diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor.php b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor.php new file mode 100644 index 0000000..10aeece --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor.php @@ -0,0 +1,52 @@ +auth->isSuperAdmin()){ + $arr = []; + }else{ + $arr = $this->loadResYML('menu'); + } + + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez = false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2admineditor'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_edit.php b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_edit.php new file mode 100644 index 0000000..8e02dae --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_edit.php @@ -0,0 +1,259 @@ + +
+
+
+
+ Manage Templates +
+
+ + "; + public $edit_raw = " + + + + + + "; + + public $edit_area = " + + Cansel + Save +

Редактируем: {file}

+ + +

+ + + + "; + + //public $dir_from = "/k2shop/k2shop/app/app/3dvisio/k23dvisio/"; + public $dir_from = "/k2shop/usr/{temp}/php/"; + + public $dir_to = "/usr/{temp}/php/"; + + public $ext = "htm"; + + + + public function renderJS() { + global $k2; + //$k2->site->addJS('ckeditor.js',"/k2shop/k2shop/libs/ckeditor_test/ckeditor.js"); + $rez = ''; + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + function showComp(){ + global $k2; + $rez=''; + + $dir = $k2->rootdir.$this->dir_from; + $dir = str_replace('{temp}', $k2->curtemplate, $dir); + + $dirto = $k2->rootdir.$this->dir_to.$k2->post('file'); + + $rez .= $this->edit_form; + + // Открыть заведомо существующий каталог и начать считывать его содержимое + + if (is_dir($dir)) { + if ($dh = opendir($dir)) { + while (($file = readdir($dh)) !== false) { + $filetype = filetype($dir .'/'. $file); + if($filetype == "file") { + $info = new SplFileInfo($file); + $htm = $info->getExtension(); + $filename = $info->getFilename(); + if($this->ext !== ''){ + if($htm == $this->ext){ + $rez .= $this->edit_raw; + $rez = str_replace('{file}', $file, $rez); + $rez = str_replace('{do}', 'Main Template', $rez); + $rez = str_replace('{icon}', 'fa fa-object-group', $rez); + } + if($filename == 'userstyle.css'){ + $rez .= $this->edit_raw; + $rez = str_replace('{file}', $file, $rez); + $rez = str_replace('{do}', 'Users Style', $rez); + $rez = str_replace('{icon}', 'fa fa-paint-brush', $rez); + } + }else{ + $rez .= $this->edit_raw; + $rez = str_replace('{file}', $file, $rez); + } + } + } + closedir($dh); + } + } + $rez .= "
+ + +

{do} ({file})

+
+ +
+ +
"; + + + $rez .= $this->renderJS(); + return $rez; + } + + /** + * чтение шаблона + * @global type $k2 + * @param type $tpl + * @return type + */ + function readTpl($files = '') + { + global $k2; + + $rez = ''; + //echo $this->dir_to.$files; + $dir = $k2->rootdir.$this->dir_from; + $dir0 = $k2->rootdir.$this->dir_to; + $dir = str_replace('{temp}', $k2->curtemplate, $dir); + $dir0 = str_replace('{temp}', $k2->curtemplate, $dir0); + //echo $dir; + //echo $dir0; + if (file_exists($dir0.$files)){ + $dir = $dir0; + //echo 32423; + } + + + + $info = new SplFileInfo($files); + $htm = $info->getExtension(); + try{ + $rez = file_get_contents($dir.$files); + }catch(PDOException $e) { + echo "Error readTpl().file_get_contents().".$tpl."\n"; + echo $e->getMessage(); + } + + return $rez; + } + + function getFileTpl() + { + global $k2; + $files = $k2->post('file'); + $theme = $this->readTpl($files); + $rez = $this->edit_area; + $rez = str_replace('{file}', $files, $rez); + $rez = str_replace('{fp}', $theme, $rez); + + return $rez; + + } + + + function saveFileTpl() + { + global $k2; + $files = $k2->post('file'); + $info = new SplFileInfo($files); + + + $htm = $info->getExtension(); + + if($htm == 'css'){ + $files = 'userstyle.css'; + } + $filename = $k2->rootdir.$this->dir_to.$files; + $filename = str_replace('{temp}', $k2->curtemplate, $filename); + + file_put_contents ($filename, ''); + + if ( is_writeable($filename) ){ + $fh = fopen($filename, "w+"); + $params_fm = ["<", ">", """, "#k2-3#?", "#k2-4#?"]; + $params_to = ["<", ">", '"', '']; + $data = str_replace($params_fm, $params_to, $k2->post('new_tpl')); + + $success = fwrite($fh, $data); + $rez.="

Template is saved!



"; + fclose($fh); + }else{ + $rez .= "

Error saving file!



"; + } + return $rez; + } + + + + // Возвращаем контент + function content(){ + global $k2; + $event = $k2->get('event'); + switch ($event) + { + case "gettemp": + $rez = $this->getFileTpl(); + break; + case "savetemp": + $rez = $this->saveFileTpl(); + break; + default: + $rez .= $this->showComp(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_group.php b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_group.php new file mode 100644 index 0000000..63d386d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_group.php @@ -0,0 +1,40 @@ +ins_comp2('k2phpgrid', $this); + //$rez .= $grid->simpleTable($arr); + $arr = $this->loadResYML('temp_group'); + + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + + $rez .= $this->showThemesTables(); + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_themes.php b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_themes.php new file mode 100644 index 0000000..199066c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/k2admineditor_themes.php @@ -0,0 +1,206 @@ + + .card { + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); + transition: 0.3s; + width: 100%; + } + + .card:hover { + box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); + } + + .theme { + padding: 12px 16px; + } + '; + public $main_tpl = '
+
+ {theme} +
+
'; + + public $theme_tpl = '
+
+

+ +
+
+
+
Назва:
+
{templatename}
+
+
+ {buttons} +
+
+
+
+
'; + + public $button_act = ''; + + public $button_del = ''; + + public $button_edit = ''; + + + function renderJS() { + $rez = ''; + + return $rez; + } + + function showThemes() + { + global $k2; + + $rez = $this->style; + $rez .= $this->renderJS(); + $temp = $k2->ins_comp('k2siteadmin','templates'); + + $templatesArray = $temp->getThemes(); + + $rez .= $this->main_tpl; + + foreach ($templatesArray as $value) { + $themes .= $this->theme_tpl; + + if ($value['temp_active'] == 1){ + $themes = str_replace('{buttons}', $this->button_edit, $themes); + } else { + $themes = str_replace('{buttons}', $this->button_act.' '.$this->button_del, $themes); + } + $themes = str_replace('{themeid}', $value['tempid'], $themes); + $themes = str_replace('{templatename}', $value['templatename'], $themes); + $themes = str_replace('{img_path}', '/'.$value['screenshot'], $themes); + } + $rez = str_replace('{theme}', $themes, $rez); + return $rez; + } + + function showThemesTables() + { + global $k2; + $temp = $k2->ins_comp('k2siteadmin','templates'); + $grid = $k2->ins_comp2('k2phpgrid', $this); + + //echo $k2->curtemplate; + + $this->Vars([ + 'sel' => 'SELECT tempid, siteid, usl, templatename, comment_temp, temp_active, screenshot FROM k2temp WHERE siteid="'.$k2->site->siteid.'" ', + ]); + $arr = $this->loadResYML('temp'); + $rez .= $grid->simpleTable($arr); + + $arr = $this->loadResYML('temp_rel'); + $rez .= $grid->simpleTable($arr); + +// $arr = $this->loadResYML('temp_group'); +// $rez .= $grid->simpleTable($arr); + + return $rez; + } + + function actTheme() + { + global $k2; + $temp = $k2->ins_comp('k2siteadmin','templates'); + + $rez = $temp->actThemes($k2->post('tempid')); + return $rez; + } + + function delTheme() + { + return $rez; + } + + function editTheme() + { + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + if (!$rez = $k2->auth->isAdmin()) { + die('У Вас нет прав для редактирования!!!'); + } + $event = $k2->get('event'); + switch ($event) + { + case "act": + $rez = $this->actTheme(); + break; + case "del": + $rez = $this->delTheme(); + break; + case "edit": + $rez = $this->editTheme(); + break; + default: + //$rez = $this->showThemes(); + } + + $rez .= $this->showThemesTables(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/en.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/en.csv new file mode 100644 index 0000000..f00fe0d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/en.csv @@ -0,0 +1,3 @@ +name| value +lnTemplateEditor| Template Editor +lnEdit| Edit \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/ru.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/ru.csv new file mode 100644 index 0000000..342799c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/ru.csv @@ -0,0 +1,3 @@ +name| value +lnTemplateEditor| Внешний вид +lnEdit| Редактировать diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/ua.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/ua.csv new file mode 100644 index 0000000..a32371f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor/ua.csv @@ -0,0 +1,3 @@ +name| value +lnTemplateEditor| Вигляд +lnEdit| Редактор шаблону \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/en.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/en.csv new file mode 100644 index 0000000..27201d9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/en.csv @@ -0,0 +1,5 @@ +name| value +lnIPAddress| IP-address +lnPort| Port +lnSorting| Sorting +lnChecked| Checked \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/ru.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/ru.csv new file mode 100644 index 0000000..bf2192f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/ru.csv @@ -0,0 +1,5 @@ +name|value +lnIPAddress| IP-адрес +lnPort| Порт +lnSorting| Сортировка +lnChecked| Проверено \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/ua.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/ua.csv new file mode 100644 index 0000000..f1b7cf2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_edit/ua.csv @@ -0,0 +1,5 @@ +name| value +lnIPAddress| IP-адреса +lnPort| Порт +lnSorting| Сортування +lnChecked| Перевірено \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/en.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/en.csv new file mode 100644 index 0000000..29d5d3f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/en.csv @@ -0,0 +1,6 @@ +name| value +lnTemplates | Templates list for +lnTempName | Name +lnTempUls | Additional conditions +lnTempComment | Comments +lnTempActive | Active \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/ru.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/ru.csv new file mode 100644 index 0000000..f610afa --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/ru.csv @@ -0,0 +1,6 @@ +name|value +lnTemplates | Шаблоны для сайта +lnTempName | Название +lnTempUls | Доп. условия +lnTempComment | Комментарии +lnTempActive | Активен diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/ua.csv b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/ua.csv new file mode 100644 index 0000000..d7a00c5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/lng/k2admineditor_themes/ua.csv @@ -0,0 +1,17 @@ +name| value +lmMenu| Меню +lmName| Назва +lnIdentifier| Ідентифікатор +lnNote| Примітка +lnOn| Увімкнути +lnMenuItems| Елементи меню +lnNameMenuItem| Назва пункту меню +lnIdBeforeMenu| Id попер. меню +lnCommand| Команда +lnSorting| Сортування +lnHint| Підказка +lnHeader| Заголовок +lnDescription| Опис +lnKeywords| Ключові слова +lnScript| Скрипт +lnContent| Контент \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/res/info.yml b/k2shop/k2shop/app/app/k2/k2admineditor/res/info.yml new file mode 100644 index 0000000..0b8fc9b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2admineditor" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/res/menu.yml b/k2shop/k2shop/app/app/k2/k2admineditor/res/menu.yml new file mode 100644 index 0000000..35cefda --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/res/menu.yml @@ -0,0 +1,26 @@ +0: + category: + parent: root + name: k2admineditor + caption: <%lnTemplateEditor%> + iconclass: fa fa-database + + elements: + editor: + name: k2admineditor_edit + caption: <%lnEdit%> + url: "?adm=k2admineditor_edit" + command: + iconclass: + themes: + name: site_themes + caption: Темы + url: "?adm=k2admineditor_themes" + command: + iconclass: fa fa-image + themes_group: + name: themes_group + caption: Группы тем + url: "?adm=k2admineditor_group" + command: + iconclass: fa fa-image diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/res/temp.yml b/k2shop/k2shop/app/app/k2/k2admineditor/res/temp.yml new file mode 100644 index 0000000..58416b5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/res/temp.yml @@ -0,0 +1,67 @@ +select: <%sel%> +table: k2temp +sortname: tempid +typeid: 1 +height: 250 +detile: k2temp_rel +sortorder: asc +caption: "<%lnTemplates%>: <%sitename%>" +fields: + 0: + field: tempid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: siteid + caption: ID + width: 40 + readonly: false + hidden: true + def_value: <%siteid%> + align: center + + 2: + field: templatename + caption: <%lnTempName%> + width: 250 + readonly: false + type_field: DropDown + multy: false + sql: + SELECT temp_id as k, temp_name as v + FROM k2temp_list + + 3: + field: usl + caption: <%lnTempUls%> + width: 250 + readonly: false + + 4: + field: comment_temp + caption: <%lnTempComment%> + width: 250 + readonly: false + + 5: + field: temp_active + caption: <%lnTempActive%> + width: 80 + readonly: false + align: center + type_field: checkbox + + screen: + field: screenshot + caption: Screenshot + width: 300 + readonly: false + params: + height: 100 + type_field: file + upload_dir: public/img + align: left + diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/res/temp_group.yml b/k2shop/k2shop/app/app/k2/k2admineditor/res/temp_group.yml new file mode 100644 index 0000000..401582d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/res/temp_group.yml @@ -0,0 +1,25 @@ +select: SELECT temp_groupid, tempgroup_name FROM k2temp_group +table: k2temp_group +sortname: temp_groupid +sortorder: asc +height: 250px +caption: Групи тем +fields: + 0: + field: temp_groupid + caption: ID + width: 60 + readonly: true + hidden: true + align: center + required: true + + 1: + field: tempgroup_name + caption: Назва групи + width: 250 + readonly: false + align: left + + + diff --git a/k2shop/k2shop/app/app/k2/k2admineditor/res/temp_rel.yml b/k2shop/k2shop/app/app/k2/k2admineditor/res/temp_rel.yml new file mode 100644 index 0000000..7ad5bda --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2admineditor/res/temp_rel.yml @@ -0,0 +1,43 @@ +select: SELECT temprelid, tempid, temp_groupid FROM k2temp_rel +where: " where (tempid='{masterid}') " +table: k2temp_rel +height: 250 +sortname: temprelid +sortorder: asc +getmaster: true +masterid: tempid +caption: связь шаблонов +fields: + 0: + field: temprelid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + 1: + field: tempid + caption: Шаблон + width: 250 + readonly: true +# hidden: true + type_field: DropDown + multy: false + sql: + SELECT tempid as k, templatename as v + FROM k2temp + + 2: + field: temp_groupid + caption: Группа + width: 250 + readonly: false + type_field: DropDown + multy: false + sql: + SELECT temp_groupid as k, tempgroup_name as v + FROM k2temp_group + + diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc.php new file mode 100644 index 0000000..b3ce7ca --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc.php @@ -0,0 +1,45 @@ +loadResYML('menu'); + + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2adminfunc'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1]); + if ($comp<>'') + echo $comp->content(); + + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_changedesign.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_changedesign.php new file mode 100644 index 0000000..8163e75 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_changedesign.php @@ -0,0 +1,59 @@ +get('id')); + + + $upd1 = "update k2admin_design set active=0 where (id<>$id)"; + try{ + $k2->db->exec($upd1); + }catch(PDOException $e) { + $rez.="Error SQL: $upd1\n"; + $rez.=$e->getMessage(); + } + + $upd2 = "update k2admin_design set active=1 where (id=$id)"; + try{ + $k2->db->exec($upd2); + }catch(PDOException $e) { + $rez.="Error SQL: $upd2\n"; + $rez.=$e->getMessage(); + } + + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + $adm=$this->Translate("{lnAdministration}"); + $settings=$this->Translate("{lnSiteSettings}"); + $rez=$this->changeDesign(); + + $url=$_SERVER['PHP_SELF']."?adm=k2adminfunc_settings&category=$adm&itemmenu=$settings"; + $rez.=header("Location:$url"); + + return $rez; + + } + + +} diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_changepassword.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_changepassword.php new file mode 100644 index 0000000..08e421e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_changepassword.php @@ -0,0 +1,264 @@ + +

+ {err} +

+ + {oldpasswd} + +
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+ + "; + + + public $oldpaswd="
+ +
+ +
+
+ "; + + + + + public $err = ''; // Ошибка + + protected $userid=''; // id пользователя, для которого сменяется пароль администратором + + + // Инициализация + function init_obj(){ + global $k2; + if (!$k2->auth->isAuth()) { + die(''.$this->Translate("{lnRepeatNewPasswd}").' !'); + } + } + + + // Форма смены пароля + function changePasswd(){ + global $k2; + $rez=$this->change_form; + + // Смена пароля самим пользователем + if ($this->userid<>''){ + $rez = str_replace('{oldpasswd}', '', $rez); + }else{ + $rez = str_replace('{oldpasswd}', $this->oldpaswd, $rez); + } + + $rez=str_replace('{err}', $this->err, $rez); + $rez=str_replace('{NewPasswd}', $this->Translate("{lnNewPasswd}"), $rez); + $rez=str_replace('{RepeatNewPasswd}', $this->Translate("{lnRepeatNewPasswd}"), $rez); + $rez=str_replace('{OldPasswd}', $this->Translate("{lnOldPasswd}"), $rez); + $rez=str_replace('{Save}', $this->Translate("{lnSave}"), $rez); + return $rez; + } + + + // Проверка совпадения старого пароля + function isOldPasswordChecked($oldpasswd){ + global $k2; + $rez=false; + + $this->err .= '
*'. $this->Translate("{lnNotMatchPasswd}").'!
'; + + $login = $k2->auth->login; + + if (trim($login)==''){ + return false; + } + + $sql = "select p.password + from k2users p + where p.login='$login'"; + + foreach ($k2->db->query($sql) as $value) { + $rez=$value['password']==md5($oldpasswd); + } + + + return $rez; + } + + // Проверка корректности заполненности пароля + function check(){ + global $k2; + + $this->err = ''; + $rez = true; + + + + if ($k2->auth->isAuth()) { + + if (trim($this->userid)==''){ + if ($k2->post("oldpasswd") == '') { + $this->err .= '
* '. $this->Translate("{lnFillOldPasswd}").'.
'; + $rez = false; + }else{ + // Проверка совпадения старого пароля + if (!$this->isOldPasswordChecked($k2->post("oldpasswd"))){ + $rez=false; + } + } + } + + + if ($k2->post("passwd1") == '') { + $this->err .= '
* '. $this->Translate("{lnFillNewPasswd}").'.
'; + $rez = false; + } + + if ($k2->post("passwd2") == '') { + $this->err .= '
* '. $this->Translate("{lnRepeatNewPasswd}").'.
'; + $rez = false; + } + + // Проверка одинаковости пароля + if ($k2->post("passwd2") <> $k2->post("passwd1")) { + $this->err .= '
**'. $this->Translate("{lnMustMatchPasswd}").'!
'; + $rez = false; + } + + + }else{ + $rez=false; + } + + return $rez; + + } + + + + // Обновление личных данных + function updUser() + { + global $k2; + + // Изменяем текущего пользователя + if (trim($this->userid)==''){ + $login = $k2->auth->login; + }else{ + +// if (!$k2->auth->isAdmin()){ +// die(''. $this->Translate("{lnNotPermittOperation}").'!'); +// } + + $login = $this->userid; + } + + if (trim($login)==''){ + return ''; + } + + // Изменяем пароль только в том случае, если он указан + $passwdfield = ''; + if ($k2->post("passwd1") != '' && $k2->post("passwd1") == $k2->post("passwd2")) { + $passwdfield = "password='" . md5(trim($k2->post("passwd1"))) . "' "; + + $sql = "UPDATE k2users SET " . $passwdfield. " WHERE login='" . $login . "'"; + + try { + $k2->db->exec($sql); + + // Выходим из системы, если изменения вносил администратор + if (trim($this->userid)==''){ + $k2->auth->unLogin(); + } + + } catch (PDOException $e) { + echo "Ошибка изменения пароля: $sql\n"; + echo $e->getMessage(); + } + + + } + + } + + + + + // Смена пароля + function change(){ + global $k2; + + $rez=''; + + if($k2->get('temp')=='ajax'){ + $check = true; + } else { + $check = $this->check(); + } + + if ($check){ + $rez.=$this->updUser(); + }else{ + $rez.=$this->changePasswd(); + } + + return $rez; + + } + + + + // Возвращаем контент + function content(){ + global $k2; + $rez=''; + + $this->userid=$k2->get('userid'); + + $k2->site->pathway->addarr(array('/'=>$this->Translate("{lnMain}"), '/?p=auth'=>$this->Translate("{lnPersonalArea}"),'#'=>$this->Translate("{lnChangePasswd}"))); + $k2->site->h1=$this->Translate("{lnChangePasswd}"); + + + if ($k2->isPost()){ + $rez=$this->change(); + }else{ + $rez.=$this->changePasswd(); + } + + + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_createuser.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_createuser.php new file mode 100644 index 0000000..26285b1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_createuser.php @@ -0,0 +1,35 @@ +ins_comp('k2auth','regform'); + $rez = $authform->content(); + + return $rez; + + + } + + // Возвращаем контент + function content(){ + $rez = $this->createUserForm(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_k2sysinfo.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_k2sysinfo.php new file mode 100644 index 0000000..b465fe4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_k2sysinfo.php @@ -0,0 +1,33 @@ +(.*).*$%ms','$1',$pinfo); + + return $rez; + } + + + +} + diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_logs.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_logs.php new file mode 100644 index 0000000..87f5c9e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_logs.php @@ -0,0 +1,56 @@ + + + + ins_comp2('k2phpgrid', $this); + $arr=$this->loadResYML('logs'); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + // Возвращаем контент + function content(){ + $rez = $this->showLogs(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_menu_access.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_menu_access.php new file mode 100644 index 0000000..0d06a76 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_menu_access.php @@ -0,0 +1,243 @@ +menu_comp=$k2->ins_comp2('k2phpgrid', $this); + + $arr=$this->loadResYML('admin_menu'); + + $rez .= $this->menu_comp->simpleTable($arr); + + return $rez; + } + + + // Права доступа к элементам меню + function showMenuPrava(){ + global $k2; + + $this->prava_comp=$k2->ins_comp2('k2phpgrid', $this); + + + $arr=$this->loadResYML('admin_menu_prav'); + + $rez .= $this->prava_comp->simpleTable($arr); + + return $rez; + } + + + // Выводит простейший сплиттер + function Splitter(){ + global $k2; + + $menu=$this::show_menu(); + $prava=$this::showMenuPrava(); + + + $rez = $k2->ins_comp('k2splitter')->Splitter([/*'name'=>'spl'.$this->name, */ + 'resize_objs'=>[ + ['obj'=>$this->menu_comp, 'panel'=>'0'], + ['obj'=>$this->prava_comp, 'panel'=>'1'] + ], + 'orient'=>'hor','width'=>'1400', + 'height'=>'950','panel_size'=>'100','panel_size'=>'250', + 'panel1'=>$menu, 'panel2'=>$prava]); + + return $rez; + } + + + + + // Вывод java-script + function renderJS(){ + global $k2; + + $rez=" + + "; + + + + return $rez; + } + + + + // Вывод таблиц + function showTables(){ + global $k2; + + $rez=$this::renderJS().$this::Splitter(); + + return $rez; + } + + + // Поиск пункта меню + // $name_menu - название идентификатора меню для поиска + function searchMenu($name_menu){ + global $k2; + $rez=false; + + $data=$k2->sql->sel('SELECT menuid FROM k2admin_menus WHERE (namemenu=:namemenu)', ['namemenu'=>$name_menu]); + + foreach ($data['data'] as $v){ + $rez=true; + } + + return $rez; + } + + + // Добавление меню + // $menu - меню с информацией о меню: + // 'name' - название меню + // 'caption' - подпись меню + // 'module_name' - название модуля (извлеченное значение из параметра adm) + // 'url' - URL адрес меню + function addMenu($menu){ + global $k2; + $rez=''; + $module_name=''; + + if (!empty($menu['url'])){ + $parse=parse_url($menu['url']); + + $query = explode("&", $parse['query']); + foreach($query as $p){ + list($key, $value) = explode("=", $p); + + if (trim($key)=='adm'){ + $module_name=$value; + } + } + + } + + + $order_ins=$menu['name']; + + if (trim($menu['parent'])<>'root'){ + $order_ins=$menu['parent'].'>'.$order_ins; + } + + $k2->sql->ins_arr( + ['table' => 'k2admin_menus', + 'fields' => + [ 'menuid'=>'{id}', + 'namemenu'=>$menu['name'], + 'caption'=>$menu['caption'], + 'prevmenu'=>$menu['parent'], + 'url'=>(empty($menu['url']) ? '' : $menu['url'] ), + + 'module_name'=>$module_name, + 'del'=>'0', + 'active'=>'1', + 'createuser'=>'{login}', + 'createdate'=>'{now}', + + 'updateuser'=>'{login}', + 'updatedate'=>'{now}', + + 'order_ins' => $order_ins + + ] + ] + ); + + return $rez; + } + + + + // Синхронизация меню + function sincMenu(){ + global $k2; + $rez=''; + + foreach ($k2->admin->adminpage->menu as $menu){ + + if (!$this::searchMenu($menu['category']['name'])){ + + $this::addMenu([ + 'parent' => $menu['category']['parent'], + 'name' => $menu['category']['name'], + 'caption' => $menu['category']['caption'] + ]); + } + + foreach ($menu['elements'] as $el){ + + if (!$this::searchMenu($el['name'])){ + $this::addMenu([ + 'parent' => $menu['category']['name'], + 'name' => $el['name'], + 'caption' => $menu['category']['caption'].' - '.$el['caption'], + 'url' => $el['url'] + ]); + + } + } + } + + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + + $event = $k2->get('event'); + + switch ($event) + { + case "sm": + $rez=$this->sincMenu(); + break; + default: + $rez=$this->showTables(); + + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_roles.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_roles.php new file mode 100644 index 0000000..460e995 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_roles.php @@ -0,0 +1,36 @@ +ins_comp2('k2phpgrid', $this); + + $arr=$this->loadResYML('roles'); + + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->show_users(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_settings.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_settings.php new file mode 100644 index 0000000..869d2b2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_settings.php @@ -0,0 +1,37 @@ +ins_comp2('k2phpgrid', $this); + + $arr=$this->loadResYML('settings'); + + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->showAdminDesign(); + return $rez; + } + +} diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_users.php b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_users.php new file mode 100644 index 0000000..2fee496 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/k2adminfunc_users.php @@ -0,0 +1,269 @@ +{lnChangePasswdButton}'; + + function test($arg=[]){ + + return $arg; + } + + + + + // Вывод таблицы прокси-серверов + function show_users(){ + + global $k2; + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $this->changePassw = str_replace('{lnChangePasswdButton}', $this->Translate("{lnChangePasswdButton}"), $this->changePassw); + $dialog = $k2->ins_comp2('k2form', $this); + + + $arr2=$this->loadResYML('change_form'); + $rez .= $dialog->showForm($arr2); + + $this->Vars([ + 'change_passwd'=>$this->changePassw + ]); + + $arr = $this->loadResYML('users'); + if ($k2->proj = 'dp2_public') { + $arr = $this->loadResYML('users_dp'); + + if ($k2->get('t')=='cli') { + $arr = $this->loadResYML('users_clidp'); + } + } + + $rez .= $grid->simpleTable($arr); + + $script = " + "; + if ($k2->get('t')!=='cli') { + $rez .= $this->showObl(); + } + + + $rez .= $script; + return $rez; + + } + + + + + // TODO: fdsfdf + // Вывод областей + function showObl(){ + global $k2; + $rez = ''; + + if($k2->user == 'dp2_vdoc'){ + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $arr=$this->loadResYML('user_obl'); + + $rez .= $grid->simpleTable($arr); + } + + + return $rez; + } + + function showSocial(){ + global $k2; + $rez = ''; + + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $arr=$this->loadResYML('user_social'); + + $rez .= $grid->simpleTable($arr); + //} + + + return $rez; + } + + function updateUser($userid, $active) + { + global $k2; + $rez = $k2->sql->upd( + "UPDATE k2users + SET + active=:active + WHERE user_id =:userid ", + [ + 'active' => $active, + 'userid' => $userid + ] + ); + if($rez['err'] !== ''){ + $k2->log->err('Помилка: '.$rez['err']); + return $rez; + } + + return $rez; + } + + function sendEmail($email, $pass) + { + global $k2; + $mailto = 'k2ae1978@gmail.com'; + $mailto2 = $email; + $subj = 'Активація клієнта'; + $headers = "Content-type: text/html; charset=utf-8 \r\n"; + $headers .= 'From: ДП "Державний центр сертифікації і експертизи сільськогосподарської продукції" \r\n'; + + $message = ''; + $message .= 'Шановний клієнт, ваш акаунт було активовано.
'; + + $message .= 'Можете авторизуватись в системі за цим посиланням: Вхід в кабінет
'; + + $message .= 'Ваш email: '.$email.'
'; + $message .= 'Ваш пароль: '.$pass.'


'; + + $message .= 'З повагою, ДП "Державний центр сертифікації і експертизи сільськогосподарської продукції"
'; + + $k2->mail->sendMail($mailto, $subj, $message, $headers); + $k2->mail->sendMail($mailto2, $subj, $message, $headers); + return $rez; + } + + function changeAct() + { + global $k2; + $userid = $k2->post('userid'); + + $finduser = $k2->sql->sel('select email, passwd_decode, active from k2users where user_id=:userid ',['userid'=>$userid]); + //print_r($finduser['data'][0]); + + $this->updateUser($userid, !$finduser['data'][0]['active']); + + if ($finduser['data'][0]['active']) { + echo 1; + } else { + $this->sendEmail($finduser['data'][0]['email'], $finduser['data'][0]['passwd_decode']); + } + + return $user_id; + } + + // Возвращаем контент + function content(){ + global $k2; + $event = $k2->get('event'); + switch ($event) + { + case "changeact": + $rez = $this->changeAct(); + break; + default: + $rez = $this->show_users(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/en.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/en.csv new file mode 100644 index 0000000..7ebf8e2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/en.csv @@ -0,0 +1,9 @@ +name| value +lnAdministration| Administration +lnCreateUser| Create user +lnUsers| Users +lnRights| Rights +lnSiteSettings| Site Settings +lnSystemInformation| System Information +lnChangePasswd| Change Password +lnAccessMenu| Access to the menu \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/ru.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/ru.csv new file mode 100644 index 0000000..a255035 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/ru.csv @@ -0,0 +1,9 @@ +name|value +lnAdministration| Администрирование +lnCreateUser| Новый пользователь +lnUsers| Пользователи +lnRights| Права +lnSiteSettings| Настройки сайта +lnSystemInformation| О системе +lnChangePasswd | Смена пароля +lnAccessMenu| Доступ к меню \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/ua.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/ua.csv new file mode 100644 index 0000000..810d330 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc/ua.csv @@ -0,0 +1,9 @@ +name| value +lnAdministration| Адміністрування +lnCreateUser| Новий користувач +lnUsers| Користувачі +lnRights| Права +lnSiteSettings| Налаштування сайту +lnSystemInformation| Про систему +lnChangePasswd| Зміна паролю +lnAccessMenu| Доступ до меню \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/en.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/en.csv new file mode 100644 index 0000000..7b28711 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/en.csv @@ -0,0 +1,3 @@ +name|value +lnSiteSettings| Site settings +lnAdministration| Administration \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/ru.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/ru.csv new file mode 100644 index 0000000..63f8585 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/ru.csv @@ -0,0 +1,3 @@ +name|value +lnSiteSettings| Настройки сайта +lnAdministration| Администрирование \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/ua.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/ua.csv new file mode 100644 index 0000000..063ef00 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changedesign/ua.csv @@ -0,0 +1,3 @@ +name|value +lnSiteSettings| Налаштування сайту +lnAdministration| Адміністрування \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/en.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/en.csv new file mode 100644 index 0000000..6b64256 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/en.csv @@ -0,0 +1,21 @@ +name| value +lnAdministration| Administration +lnCreateUser| Create user +lnUsers| Users +lnRights| Rights +lnSiteSettings| Site Settings +lnSystemInformation| System Information +lnChangePasswd | Change Password +lnNewPasswd| New Password +lnRepeatNewPasswd| Repeat New Passwd +lnSave| Save +lnOldPasswd| Old Passwd +lnNotMatchPasswd| Old password does not match the entered +lnFillOldPasswd| You must fill in the OLD PASSWORD +lnFillNewPasswd| You must fill in the NEW PASSWORD +lnRepeatNewPasswd| It is necessary to repeat new password +lnMustMatchPasswd| Passwords must match +lnNotAuthChangePasswd| Changing the password is not prohibited by authorized users +lnNotPermittOperation| The operation is prohibited for non-administrators +lnMain| Main +lnPersonalArea| Personal Area \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/ru.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/ru.csv new file mode 100644 index 0000000..5a16bac --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/ru.csv @@ -0,0 +1,20 @@ +name|value +lnAdministration| Администрирование +lnCreateUser| Создать пользователя +lnUsers| Пользователи +lnRights| Права +lnSiteSettings| Настройки сайта +lnSystemInformation| Информация о системе +lnChangePasswd | Смена пароля +lnNewPasswd| Новый пароль +lnRepeatNewPasswd| Повторите новый пароль +lnSave| Сохранить +lnOldPasswd| Старый пароль +lnNotMatchPasswd| Старый пароль не совпадает с введенным +lnFillOldPasswd| Необходимо заполнить СТАРЫЙ ПАРОЛЬ +lnFillNewPasswd| Необходимо заполнить НОВЫЙ ПАРОЛЬ +lnRepeatNewPasswd| Необходимо ПОВТОРИТЬ НОВЫЙ ПАРОЛЬ +lnMustMatchPasswd| Пароли должны СОВПАДАТЬ +lnNotPermittOperation| Операция запрещена для не администраторов +lnMain| Главная +lnPersonalArea| Личный кабинет \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/ua.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/ua.csv new file mode 100644 index 0000000..67617c0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_changepassword/ua.csv @@ -0,0 +1,20 @@ +name| value +lnAdministration| Адміністрування +lnCreateUser| Створити користувача +lnUsers| Користувачі +lnRights| Права +lnSiteSettings| Налаштування сайту +lnSystemInformation| Інформація про систему +lnChangePasswd | Зміна паролю +lnNewPasswd| Новий пароль +lnRepeatNewPasswd| Повторіть новий пароль +lnSave| Зберегти +lnOldPasswd| Старий пароль +lnNotMatchPasswd| Старий пароль не співпадає з введеним +lnFillOldPasswd| Необхідно заповнити СТАРИЙ ПАРОЛЬ +lnFillNewPasswd| Необхідно заповнити НОВИЙ ПАРОЛЬ +lnRepeatNewPasswd| Необхідно ПОВТОРИТИ НОВИЙ ПАРОЛЬ +lnMustMatchPasswd| Паролі повинні СПІВПАДАТИ +lnNotPermittOperation| Операція заборонена для не адміністраторів +lnMain| Головна +lnPersonalArea| Особистий кабінет \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/en.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/en.csv new file mode 100644 index 0000000..db8be6c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/en.csv @@ -0,0 +1,6 @@ +name| value +lnRights| Rights +lnNameofTheRole| The name of the role +lnNote| Note +lnOn| On +inPublic| Public \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/ru.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/ru.csv new file mode 100644 index 0000000..05d55b0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/ru.csv @@ -0,0 +1,6 @@ +name|value +lnRights| Права +lnNameofTheRole| Название роли +lnNote| Примечание +lnOn| Вкл +lnPublic| Публичная \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/ua.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/ua.csv new file mode 100644 index 0000000..23d6435 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_roles/ua.csv @@ -0,0 +1,6 @@ +name| value +lnRights| Права +lnNameofTheRole| Назва ролі +lnNote| Примітка +lnOn| Увімкнути +lnPublic| Публічна \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/en.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/en.csv new file mode 100644 index 0000000..5d37b49 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/en.csv @@ -0,0 +1,4 @@ +name|value +lnSiteSettings| Site settings (design choice) +lnDesignname| The name of the design +lnActive| Active \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/ru.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/ru.csv new file mode 100644 index 0000000..ab74da1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/ru.csv @@ -0,0 +1,4 @@ +name|value +lnSiteSettings| Настройки сайта (выбор дизайна админки) +lnDesignname| Наименование дизайна административной части +lnActive| Текущий дизайн \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/ua.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/ua.csv new file mode 100644 index 0000000..640d0d8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_settings/ua.csv @@ -0,0 +1,4 @@ +name|value +lnSiteSettings| Налаштування сайту (вібір дизайну адмінки) +lnDesignname| Назва дизайну адміністративної частини +lnActive| Поточний дизайн \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/en.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/en.csv new file mode 100644 index 0000000..7521f2b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/en.csv @@ -0,0 +1,14 @@ +name| value +lnUsers| Users +lnLogin| Login +lbName| Name +lnEmail| Email +lnPhone| Phone +lnSurname| Surname +lnMiddleName| Middle name +lnRights| Rights +lnPartner | Partner +lnEDRPOU| EDRPOU +lnChangePasswdTitle| Change Passwd +lnDateCreate| Date Create +lnWhoCreate| Who Create \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/fr.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/fr.csv new file mode 100644 index 0000000..7955ae5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/fr.csv @@ -0,0 +1,9 @@ +name| value +lnUsers| Utilisateurs +lnLogin| Login +lbName| Nom +lnEmail| Email +lnPhone| Téléphone +lnSurname| Nom de famille +lnMiddleName| Patronyme +lnRights| Droits \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/ru.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/ru.csv new file mode 100644 index 0000000..5f18b31 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/ru.csv @@ -0,0 +1,16 @@ +name|value +lnUsers| Пользователи +lnLogin| Логин +lbName| Имя +lnEmail| Email +lnPhone| Телефон +lnSurname| Фамилия +lnMiddleName| Отчество +lnRights| Права +lnChangePasswdTitle|Поменять
пароль +lnChangePasswdButton|Сменить пароль +lnFirm|Контрагент +lnPartner | Партнер +lnEDRPOU| ЕГРПОУ +lnDateCreate| Дата создания +lnWhoCreate| Кто создал \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/ua.csv b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/ua.csv new file mode 100644 index 0000000..a7357d2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/lng/k2adminfunc_users/ua.csv @@ -0,0 +1,16 @@ +name| value +lnUsers| Користувачі +lnLogin| Логін +lbName| Ім'я +lnEmail| Email +lnPhone| Телефон +lnSurname| Прізвище +lnMiddleName| По батькові +lnRights| Права +lnChangePasswdTitle|Змінити
пароль +lnChangePasswdButton|Змінити пароль +lnFirm|Контрагент +lnPartner | Партнер +lnEDRPOU| ЕГРПОУ +lnDateCreate| Дата створення +lnWhoCreate| Хто створив diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/admin_menu.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/admin_menu.yml new file mode 100644 index 0000000..1ad6d2e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/admin_menu.yml @@ -0,0 +1,99 @@ +select: + select menuid, namemenu, scriptrun, prevmenu, prevmenu_text, module_name, del, active, + createuser, createdate, updateuser, updatedate, order_ins, caption, url/*, t */ + from k2admin_menus + +table: k2admin_menus +sortname: order_ins +typeid: 1 + +# Детально +detile: k2admin_menus_prava + +addtool_button: + 0: + caption: Синхр. + title: Загрузка списка пунктов меню + id: rights + icon: "ui-icon-extlink" + action: "loadMenuItems()" + position: last + +height: 150 + +sortorder: asc +caption: Доступ к меню +fields: + 0: + field: menuid + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + 1: + field: caption + caption: Меню + width: 400 + readonly: false + align: left + + 2: + field: namemenu + caption: Идентификатор меню + width: 200 + readonly: false + align: left + hidden: false + + 3: + field: module_name + caption: Название модуля + width: 200 + readonly: false + align: left + hidden: false + +# t: +# field: t +# caption: Параметр t +# width: 100 +# readonly: false +# align: left +# hidden: false + + 4: + field: url + caption: URL + width: 250 + readonly: false + align: left + hidden: false + + 5: + field: order_ins + caption: Сортировка + width: 75 + readonly: false + align: left + hidden: false + + 6: + field: active + caption: Акт. + width: 50 + readonly: false + type_field: checkbox + def_value: 1 + align: center + + 7: + field: del + caption: Удал. + width: 50 + readonly: false + type_field: checkbox + def_value: 0 + align: center + hidden: true diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/admin_menu_prav.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/admin_menu_prav.yml new file mode 100644 index 0000000..b68a466 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/admin_menu_prav.yml @@ -0,0 +1,155 @@ +select: + select pravrepid, menuid, username, r, w, i, d, c, + exp, imp, settable, cutpast, enable, magazinsid, del, + active, createuser, createdate, updateuser, updatedate, order_ins, + roleid from k2admin_menus_prava + +table: k2admin_menus_prava +sortname: pravrepid +typeid: 1 + +height: 590 + +where: " WHERE (menuid='{masterid}') " +getmaster: true +masterid: menuid + +sortorder: asc +caption: Права +fields: + 0: + field: pravrepid + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + 1: + field: roleid + caption: Права + width: 200 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + select roleid as k, rolename as v + from k2roles + order by rolename + + 2: + field: username + caption: Пользователь + width: 150 + readonly: false + align: left + + 3: + field: r + caption: Чтение + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 4: + field: w + caption: Запись + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 5: + field: i + caption: Вставка + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 6: + field: d + caption: Удаление + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 7: + field: c + caption: Копирование + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 0 + + 8: + field: exp + caption: Экспорт + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 0 + + 9: + field: imp + caption: Импорт + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 0 + + 10: + field: settable + caption: "Настройка
таблиц" + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 11: + field: cutpast + caption: "Копирование
в буфер" + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 12: + field: enable + caption: "Активность
элементов" + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 13: + field: active + caption: Акт. + width: 50 + readonly: false + align: left + type_field: checkbox + def_value: 1 + + 14: + field: del + caption: Удал. + width: 50 + readonly: false + align: left + type_field: checkbox + def_value: 0 + hidden: true diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/change_form.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/change_form.yml new file mode 100644 index 0000000..77d01fa --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/change_form.yml @@ -0,0 +1,20 @@ +form_id: change_pass +table: k2users +form_height: 250 +btn_hidd: true +caption: Зміна паролю +fields: + 0: + field: user_id + caption: Новий пароль + width_form: 200 + + 1: + field: password + caption: Новий пароль + width_form: 200 + + 2: + field: password2 + caption: Повторити новий пароль + width_form: 200 diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/info.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/info.yml new file mode 100644 index 0000000..2cba970 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2adminfunc" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/logs.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/logs.yml new file mode 100644 index 0000000..59cbbe5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/logs.yml @@ -0,0 +1,83 @@ +select: + select logid, userid, ip, agent, comp, event, descript, datetime + from k2logs +table: k2logs +sortname: datetime +typeid: 1 +sortorder: desc +caption: Логи +fields: + logid: + field: logid + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + userid: + field: userid + caption: Пользователь + width: 150 + readonly: true + type_field: DropDown + align: left + sql: select user_id as k, login as v from k2users + # act: + # field: " " + # alias: active + # caption: Деталі + # width: 70 + # readonly: true + # align: center + # type_field: condition + # cond: + # exp: ($row["ip"]==0) + # # url1: "" + # # target1: _self + # target2: _self + # # caption1: + # url2: "" + # caption2: + ip: + field: ip + caption: IP + width: 100 + readonly: false + align: left + + agent: + field: agent + caption: Agent + width: 100 + readonly: false + align: left + + comp: + field: comp + caption: Компонента + width: 150 + readonly: false + align: left + + event: + field: event + caption: Событие + width: 150 + readonly: false + align: left + + descript: + field: descript + caption: Описание + width: 300 + readonly: false + align: left + + datetime: + field: datetime + caption: Дата + width: 100 + readonly: true + align: left + type_field: datetime diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/menu.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/menu.yml new file mode 100644 index 0000000..e32741e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/menu.yml @@ -0,0 +1,71 @@ +0: + category: + parent: root + name: admin + caption: <%lnAdministration%> + iconclass: fa fa-database + + + elements: + 0: + name: k2adminfunc_changepassword + caption: <%lnChangePasswd%> + url: "/?adm=k2adminfunc_changepassword" + command: + iconclass: fa fa-unlock + + 1: + name: k2adminfunc_createuser + caption: <%lnCreateUser%> + url: "/?adm=k2adminfunc_createuser" + command: + iconclass: fa fa-user + + 2: + name: k2adminfunc_users1 + caption: <%lnUsers%> + url: "/?adm=k2adminfunc_users&t=all" + command: + iconclass: fa fa-users + + k2adminfunc_userscli: + name: k2adminfunc_usercli + caption: Користувачі клієнти + url: "/?adm=k2adminfunc_users&t=cli" + command: + iconclass: fa fa-users + + 3: + name: k2adminfunc_roles + caption: <%lnRights%> + url: "/?adm=k2adminfunc_roles" + command: + iconclass: fa fa-thumbs-up + + 4: + name: k2adminfunc_menu_access + caption: <%lnAccessMenu%> + url: "/?adm=k2adminfunc_menu_access" + command: + iconclass: fa fa-unlock-alt + + 5: + name: k2adminfunc_logs + caption: Логи + url: "/?adm=k2adminfunc_logs" + command: + iconclass: fa fa-unlock-alt + + # 5: + # name: k2adminfunc_settings + # caption: <%lnSiteSettings%> + # url: "/?adm=k2adminfunc_settings" + # command: + # iconclass: fa fa-wrench + + 6: + name: k2adminfunc_k2sysinfo + caption: <%lnSystemInformation%> + url: "/?adm=k2adminfunc_k2sysinfo" + command: + iconclass: fa fa-info diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/roles.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/roles.yml new file mode 100644 index 0000000..b08b3f0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/roles.yml @@ -0,0 +1,65 @@ +select: + select roleid, rolename, commentrole, active, pubrole, is_admin, order_roles + from k2roles +table: k2roles +sortname: roleid +typeid: 1 +sortorder: asc +caption: <%lnRights%> +fields: + 0: + field: roleid + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + 1: + field: rolename + caption: <%lnNameofTheRole%> + width: 250 + readonly: false + align: left + + 2: + field: order_roles + caption: Сортировка + width: 100 + readonly: false + align: left + + 3: + field: commentrole + caption: <%lnNote%> + width: 150 + readonly: false, + align: left' + + + 4: + field: active + caption: <%lnOn%> + width: 100 + readonly: false + align: left + type_field: checkbox + def_value: 1 + + 5: + field: pubrole + caption: <%lnPublic%> + width: 100 + readonly: false + align: left + type_field: checkbox + def_value: 1 + + is_admin: + field: is_admin + caption: is_admin + width: 100 + readonly: false + align: left + type_field: checkbox + def_value: 1 diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/settings.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/settings.yml new file mode 100644 index 0000000..d98abe6 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/settings.yml @@ -0,0 +1,36 @@ +select: select id, name, active from k2admin_design +table: k2admin_design +sortname: id +sortorder: asc +caption: <%lnSiteSettings%> +fields: + 0: + field: id + caption: ID + width: 60 + readonly: true + align: center + + 1: + field: name + caption: <%lnDesignname%> + width: 450 + readonly: false + align: left + + 2: + field: active + caption: <%lnActive%> + width: 150 + readonly: true + align: center + type_field: condition + cond: + url1: "/?adm=k2adminfunc_changedesign&id={id}" + caption1: Включить + target1: '_self' + style1: "style='padding:5px 50px 5px 50px; color:grey;' title='Включить' " + exp: "($row['active']==0)" + caption2: Активен + target2: "_self" + style2: "style='padding:5px 70px 5px 50px; font-weight:bold; color:green;' title='Активен' " diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/user_obl.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/user_obl.yml new file mode 100644 index 0000000..ff3a0aa --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/user_obl.yml @@ -0,0 +1,74 @@ +select: + select u.usersoblid, u.user_id, u.OblastId, o.OblastNameUA, r.name_rayon, u.rayid + + from k2users_obl u + + LEFT JOIN dp2Oblast o + ON o.OblastId=u.OblastId + + LEFT JOIN dp2rajon r + ON r.rayid = u.rayid + +table: k2users_obl +typeid: 1 +sortname: OblastId +sortorder: asc +caption: Області + +getmaster: true + +masterid: user_id + +where: " WHERE (user_id='{masterid}') " +autowidth: false +height: 300 +width: 750 +form_width: 390 +form_height: 320 +fields: + 0: + field: usersoblid + caption: ID області + width: 120 + readonly: true + align: center + hidden: true + + 1: + field: user_id + caption: user_id + width: 120 + readonly: false + hidden_form: true + def_value: "{masterid}" + align: center + hidden: true + + 2: + field: OblastId + alias: OblastNameUA + caption: Область + sql: select OblastId as k, OblastNameUA as v from dp2Oblast order by OblastNameUA +# depend: rayid +# depend_sql: "select rayid as k, name_rayon as v from dp2rajon r where OblastId = '{mid}'" + width: 300 + width_form: 200 + readonly: false + type_field: DropDown + align: left + type_fieldform: DropDown + sql_form: select OblastId as k, OblastNameUA as v from dp2Oblast order by OblastNameUA + + 3: + field: rayid + alias: rayid + caption: Район + sql: select null as k, '_' as v union select rayid as k, name_rayon as v from dp2rajon r + width: 300 + width_form: 200 + type_field: DropDown + readonly: false + align: left + child: true + type_fieldform: DropDown + sql_form: select rayid as k, name_rayon as v from dp2rajon r diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/user_social.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/user_social.yml new file mode 100644 index 0000000..caa678b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/user_social.yml @@ -0,0 +1,63 @@ +select: + select s.users_socid, s.user_id, s.soc_name, s.active + + from k2users_social s + +table: k2users_social +typeid: 1 +sortname: users_socid +sortorder: asc +caption: Соц. сети + +getmaster: true + +masterid: "user_id" + +where: " WHERE (s.user_id='{masterid}') " +autowidth: false +height: 300 +width: 750 +form_width: 390 +form_height: 320 +fields: + 0: + field: users_socid + caption: ID + width: 120 + readonly: true + align: center + hidden: true + + 1: + field: user_id + caption: user_id + width: 120 + readonly: false + hidden_form: true + def_value: "{masterid}" + align: center + hidden: true + + 2: + field: soc_name + caption: Соц. сеть + width: 120 + readonly: false +# hidden_form: true +# def_value: "{masterid}" + align: left + + + + 3: + field: active + caption: Активно + width: 120 + readonly: false +# hidden_form: true +# def_value: "{masterid}" + align: center + type_field: checkbox + + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/users.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/users.yml new file mode 100644 index 0000000..7c80d8e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/users.yml @@ -0,0 +1,256 @@ +select: + select u.user_id, u.name, u.login, u.password, u.email, u.phone, u.firstname, u.middlename, + u.lastname, u.roleid, u.create_datetime, u.who_create, u.firmid, u.partner_transid, + u.all_obl, u.order_ins, f.name_firm, f.edrpou, u.prover, u.active + from k2users u + + left join k2firms f + on u.firmid=f.firmid + + + +table: k2users +typeid: 1 +sortname: order_ins +sortorder: desc +detile: k2users_obl +caption: <%lnUsers%> +readonly_form: + who_create: +height: 650 + +#custom_form: true + +fields: + 0: + field: user_id + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + order_ins: + field: order_ins + caption: № + width: 40 + readonly: true + align: left + hidden: true + + # prover: + # field: prover + # caption: Активовано + # width: 80 + # readonly: false + # align: center + # def_value: 0 + # type_field: checkbox + +# active: +# field: active +# caption: Активовано +# width: 80 +# readonly: false +# align: center +# def_value: 0 +# type_field: checkbox + + 1: + field: login + caption: <%lnLogin%> + width: 100 + readonly: false + align: left + +# 21: +# field: " " +# caption: <%lnChangePasswdTitle%> +# width: 110 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# url2: "" +# caption2: <%change_passwd%> +# target2: _self + + + + + 2: + field: " " + caption: <%lnChangePasswdTitle%> + width: 110 + readonly: true + align: center + type_field: condition + cond: + exp: (false) + url2: "/?adm=k2adminfunc_changepassword&userid={login}&mode=admin" + caption2: "Сменить" + + + 3: + field: lastname + caption: <%lnSurname%> + width: 100 + readonly: false + align: left + + 4: + field: name + caption: <%lbName%> + width: 50 + readonly: false + align: left + +# 5: +# field: firstname +# caption: <%lbName%> +# width: 100 +# readonly: false +# hidden: true +# align: left + + 6: + field: middlename + caption: <%lnMiddleName%> + width: 100 + readonly: false + align: left + + 7: + field: email + alias: u.email + caption: <%lnEmail%> + width: 100 + readonly: false + align: left + + 8: + field: phone + caption: <%lnPhone%> + width: 100 + readonly: false + align: left + + +# 9: +# field: all_obl +# caption: Всі області +# width: 75 +# readonly: false +# align: center +# type_field: checkbox + + 10: + field: roleid + caption: <%lnRights%> + width: 150 + readonly: false + align: left + type_field: DropDown + multy: false + sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" + + roleid: + field: roleid + caption: + width: 150 + readonly: true + hidden: true + + + 12: + field: create_datetime + caption: <%lnDateCreate%> + width: 150 + readonly: true + align: left + + 13: + field: who_create + caption: <%lnWhoCreate%> + width: 150 + readonly: false +# hidden_form: true + align: left + def_value: <%user%> + width_form: 200 + disabled: true + + edrpou: + field: edrpou + alias: f.edrpou +# alias_form: firmid + caption: <%lnEDRPOU%> + width: 250 + readonly: true + align: left + type_fieldform: DropDown + sql_form: "select firmid as k, edrpou as v + from k2firms + where trim(name_firm)<>'' + order by name_firm " + width_form: 400 + formoptions: + colspan: 4 + +# name_firm: +# field: name_firm +# alias: f.name_firm +# alias_form: firmid +# caption: <%lnFirm%> +# width: 250 +# readonly: false +# align: left +# type_fieldform: DropDown +# sql_form: +# select firmid as k, CONCAT(name_firm, IF(edrpou<>'',CONCAT(' (', edrpou,')'),'')) as v +# from k2firms +# where trim(name_firm)<>'' +# order by name_firm +# width_form: 400 +# formoptions: +# colspan: 4 + +# 14: +# field: firmid +# caption: <%lnFirm%> +# width: 150 +# readonly: false, +# align: left +# type_field: DropDown +# multy: false, +# sql: "select NULL as k, '---' as v +# UNION +# +# select firmid as k, name_firm as v from k2firms +# +# UNION +# +# SELECT pt.partner_transid as k, pt.partner_name as v +# FROM k2_partner_trans pt +# +# ORDER BY 2 +# " + +# 15: +# field: partner_transid +# caption: <%lnPartner%> +# width: 150 +# readonly: false, +# align: left +# type_field: DropDown +# multy: false, +# sql: +# select NULL as k, '---' as v +# +# UNION +# +# SELECT pt.partner_transid as k, pt.partner_name as v +# FROM k2_partner_trans pt +# ORDER BY 2 + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/users_clidp.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/users_clidp.yml new file mode 100644 index 0000000..4e9fbd3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/users_clidp.yml @@ -0,0 +1,250 @@ +select: + select u.user_id, u.name, u.login, u.password, u.email, u.phone, u.firstname, u.middlename, u2.login as login2, + u.lastname, u.roleid, u.create_datetime, u.who_create, u.firmid, u.partner_transid, u.parentuserid, + u.all_obl, u.order_ins, f.name_firm, f.edrpou, u.prover, u.active, u.VirobnikId, v.VirobnikNameUA, o.OblastNameUA, concat(v.VirobnikNameUA,'(',o.OblastNameUA,')') as VirObl, r.rolename + from k2users u + + left join k2roles r + on u.roleid=r.roleid + + left join k2firms f + on u.firmid=f.firmid + + left join k2users u2 + on u2.user_id = u2.parentuserid + + LEFT JOIN dp2Virobn v + ON u.VirobnikId = v.VirobnikId + + left join dp2Oblast o + ON o.OblastId = v.IdOblast + +where: where u.roleid = 100 +table: k2users +typeid: 1 +rows: 10 +sortname: order_ins +sortorder: desc +# detile: k2users_obl +caption: Клієнти +readonly_form: + who_create: +height: 250 + +custom_form: true + +fields: + 0: + field: user_id + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + order_ins: + field: order_ins + caption: № + width: 40 + readonly: true + align: left + hidden: true + + # prover: + # field: prover + # caption: Активовано + # width: 80 + # readonly: false + # align: center + # def_value: 0 + # type_field: checkbox + + active: + field: active + alias: active + caption: Активовано + width: 0.1 + readonly: false + align: center + def_value: 0 + type_field: checkbox + + 1: + field: login + caption: <%lnLogin%> + width: 100 + readonly: false + align: left + +# 21: +# field: " " +# caption: <%lnChangePasswdTitle%> +# width: 110 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# url2: "" +# caption2: <%change_passwd%> +# target2: _self + + act: + field: " " + alias: active + caption: Акт. + width: 110 + readonly: true + align: center + type_field: condition + cond: + exp: ($row["active"]==0) + url1: "" + target1: _self + target2: _self + caption1: + url2: "" + caption2: + + + 2: + field: " " + caption: <%lnChangePasswdTitle%> + width: 110 + readonly: true + align: center + type_field: condition + cond: + exp: (false) + url2: "/?adm=k2adminfunc_changepassword&userid={login}&mode=admin" + caption2: "Сменить" + + + 3: + field: lastname + caption: <%lnSurname%> + width: 100 + readonly: false + align: left + + 4: + field: name + caption: <%lbName%> + width: 50 + readonly: false + align: left + +# 5: +# field: firstname +# caption: <%lbName%> +# width: 100 +# readonly: false +# hidden: true +# align: left + + 6: + field: middlename + caption: <%lnMiddleName%> + width: 100 + readonly: false + align: left + + 7: + field: email + alias: u.email + caption: <%lnEmail%> + width: 100 + readonly: false + align: left + + 8: + field: phone + caption: <%lnPhone%> + width: 100 + readonly: false + align: left + + +# 9: +# field: all_obl +# caption: Всі області +# width: 75 +# readonly: false +# align: center +# type_field: checkbox + + rolename: + field: rolename + alias: r.rolename + caption: <%lnRights%> + width: 150 + readonly: false + align: left +# type_field: DropDown + multy: false +# sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" + type_fieldform: DropDown + alias_form: roleid + sql_form: select roleid as k, rolename as v from k2roles where (active='1') order by rolename + + roleid: + field: roleid + caption: + width: 150 + readonly: true + hidden: true + + VirObl: + field: VirObl + alias: v.VirobnikNameUA + caption: Виробник + width: 150 + readonly: false + align: left + multy: false + sql: select VirobnikId as k, VirobnikNameUA as v from dp2Virobn order by VirobnikNameUA + is_book: true + required: false + formoptions: +# rowpos: 2 +# colpos: 0 + # colspan: 3 + width_form: 250 + alias_form: VirobnikId + type_fieldform: DropDown + sql_form: select VirobnikId as k, VirobnikNameUA as v from dp2Virobn order by w.VirobnikNameUA + #valid: <%oblid%> + VirobnikId: + field: VirobnikId + alias: VirobnikId + caption: VirobnikId + width: 200 + readonly: true + hidden: true + + parentuserid: + field: parentuserid + alias: parentuserid + caption: Батьків + width: 200 + readonly: true + hidden: true + + 12: + field: create_datetime + caption: <%lnDateCreate%> + width: 150 + readonly: true + align: left + + 13: + field: who_create + caption: <%lnWhoCreate%> + width: 150 + readonly: false +# hidden_form: true + align: left + def_value: <%user%> + width_form: 200 + disabled: true + diff --git a/k2shop/k2shop/app/app/k2/k2adminfunc/res/users_dp.yml b/k2shop/k2shop/app/app/k2/k2adminfunc/res/users_dp.yml new file mode 100644 index 0000000..91b91db --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminfunc/res/users_dp.yml @@ -0,0 +1,253 @@ +select: + select u.user_id, u.name, u.login, u.password, u.email, u.phone, u.firstname, u.middlename, u.jobtitle, + u.lastname, u.roleid, u.create_datetime, u.who_create, u.firmid, u.partner_transid, u.OblastId, o.OblastNameUA, + u.all_obl, u.order_ins, f.name_firm, f.edrpou, u.prover, u.active, u.VirobnikId, v.VirobnikNameUA, r.rolename + from k2users u + + left join k2roles r + on u.roleid=r.roleid + + left join k2firms f + on u.firmid=f.firmid + + LEFT JOIN dp2Virobn v + ON u.VirobnikId = v.VirobnikId + + left join dp2Oblast o + on u.OblastId=o.OblastId +where: +table: k2users +typeid: 1 +rows: 10 +sortname: order_ins +sortorder: desc +detile: k2users_obl +caption: <%lnUsers%> +readonly_form: + who_create: +height: 250 + +custom_form: true + +fields: + 0: + field: user_id + caption: ID + width: 40 + readonly: true + align: left + hidden: true + + order_ins: + field: order_ins + caption: № + width: 40 + readonly: true + align: left + hidden: true + + # prover: + # field: prover + # caption: Активовано + # width: 80 + # readonly: false + # align: center + # def_value: 0 + # type_field: checkbox + + active: + field: active + caption: Активовано + width: 80 + readonly: false + align: center + def_value: 0 + type_field: checkbox + + 1: + field: login + caption: <%lnLogin%> + width: 100 + readonly: false + align: left + +# 21: +# field: " " +# caption: <%lnChangePasswdTitle%> +# width: 110 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# url2: "" +# caption2: <%change_passwd%> +# target2: _self + + + + + 2: + field: " " + caption: <%lnChangePasswdTitle%> + width: 110 + readonly: true + align: center + type_field: condition + cond: + exp: (false) + url2: "/?adm=k2adminfunc_changepassword&userid={login}&mode=admin" + caption2: "Сменить" + + + 3: + field: lastname + caption: <%lnSurname%> + width: 100 + readonly: false + align: left + + 4: + field: name + caption: <%lbName%> + width: 50 + readonly: false + align: left + +# 5: +# field: firstname +# caption: <%lbName%> +# width: 100 +# readonly: false +# hidden: true +# align: left + + 6: + field: middlename + caption: <%lnMiddleName%> + width: 100 + readonly: false + align: left + + 7: + field: email + alias: u.email + caption: <%lnEmail%> + width: 100 + readonly: false + align: left + + 8: + field: phone + caption: <%lnPhone%> + width: 100 + readonly: false + align: left +# 9: +# field: all_obl +# caption: Всі області +# width: 75 +# readonly: false +# align: center +# type_field: checkbox + + rolename: + field: rolename + alias: r.rolename + caption: <%lnRights%> + width: 150 + readonly: false + align: left +# type_field: DropDown + multy: false +# sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" + type_fieldform: DropDown + alias_form: roleid + sql_form: select roleid as k, rolename as v from k2roles where (active='1') order by rolename + + # jobtitle: + # field: jobtitle + # caption: Посада + # width: 100 + # readonly: false + # align: left + + roleid: + field: roleid + caption: + width: 150 + readonly: true + hidden: true + + VirobnikNameUA: + field: VirobnikNameUA + alias: v.VirobnikNameUA + caption: Виробник + width: 150 + readonly: false + align: left + multy: false + sql: select VirobnikId as k, VirobnikNameUA as v from dp2Virobn order by VirobnikNameUA + is_book: true + required: false + formoptions: +# rowpos: 2 +# colpos: 0 + # colspan: 3 + width_form: 250 + alias_form: VirobnikId + type_fieldform: DropDown + sql_form: select VirobnikId as k, VirobnikNameUA as v from dp2Virobn order by VirobnikNameUA + #valid: <%oblid%> + VirobnikId: + field: VirobnikId + alias: VirobnikId + caption: VirobnikId + width: 200 + readonly: true + hidden: true + 12: + field: create_datetime + caption: <%lnDateCreate%> + width: 150 + readonly: true + align: left + + 13: + field: who_create + caption: <%lnWhoCreate%> + width: 150 + readonly: false +# hidden_form: true + align: left + def_value: <%user%> + width_form: 200 + disabled: true + OblastId: + field: OblastId + alias: OblastId + caption: OblastId + width: 200 + readonly: true + hidden: true + +# OblastNameUA: +# field: OblastNameUA +# alias: o.OblastNameUA +# caption: Область +# width: 150 +# readonly: false +# align: left +# multy: false +# sql: select OblastId as k, OblastNameUA as v from dp2Oblast order by OblastId +# # is_book: true +# required: false +# formoptions: +# # rowpos: 2 +# # colpos: 0 +# # colspan: 3 +# width_form: 250 +# alias_form: OblastId +# type_fieldform: DropDown +# sql_form: select OblastId as k, OblastNameUA as v from dp2Oblast order by OblastId +# #valid: <%oblid%> diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage.php b/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage.php new file mode 100644 index 0000000..2b6c0b5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage.php @@ -0,0 +1,46 @@ +loadResYML('menu'); + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2adminmessage'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage_create.php b/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage_create.php new file mode 100644 index 0000000..66c1f4a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage_create.php @@ -0,0 +1,95 @@ + +
+
+ {lnSendMessageUsers} +
+
+
{lnMessage}:
+
+ {lnAdress}: + +
+ {lnColor}: + +
+ + {lnSend} + +
+
+
+ + "; + + + // Инициализация + function init_obj(){ + global $k2; + $k2->site->addJS('jscolor.js', '/k2shop/k2shop/libs/colorpicker/js/jscolor.js'); + $k2->site->addCSS('font-awesome.min.css', 'http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css'); + $k2->site->addCSS('bootstrap.min.css', 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css'); + } + + + //Запись сообщения в базу + function insertMessage(){ + global $k2; + $rez = ''; + $userid = $k2->auth->login; + + $rez.= $this->message_form; + + + + if($k2->post('message')&&$k2->post('adress')) { + + $message = $k2->post('message'); + $adress = $k2->post('adress'); + $color = $k2->post('color'); + $sql = "INSERT INTO `k2mass_message` ( userid, message, adres, color) VALUES ('".$userid."','".$message."','".$adress."','".$color."')"; + + $k2->db->exec($sql); + + header("Location: /?adm=k2adminmessage_table"); + exit; + } + + + $rez = str_replace('{lnSendMessageUsers}',$this->Translate("{lnSendMessageUsers}"), $rez); + $rez = str_replace('{lnMessage}',$this->Translate("{lnMessage}"), $rez); + $rez = str_replace('{lnPutYourMessage}',$this->Translate("{lnPutYourMessage}"), $rez); + $rez = str_replace('{lnAdress}',$this->Translate("{lnAdress}"), $rez); + $rez = str_replace('{lnPutMessageAdress}',$this->Translate("{lnPutMessageAdress}"), $rez); + $rez = str_replace('{lnSend}',$this->Translate('{lnSend}'), $rez); + $rez = str_replace('{lnColor}',$this->Translate('{lnColor}'), $rez); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->insertMessage(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage_table.php b/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage_table.php new file mode 100644 index 0000000..2bf723d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/k2adminmessage_table.php @@ -0,0 +1,39 @@ +ins_comp2('k2phpgrid', $this); + $arr=$this->loadResYML('mass_mess'); + $rez .= $grid->simpleTable($arr); + + + $grid = $k2->ins_comp2('k2phpgrid', $this); + $arr=$this->loadResYML('mass_mess_user'); + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->showMessage(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/en.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/en.csv new file mode 100644 index 0000000..a930ea4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/en.csv @@ -0,0 +1,4 @@ +name| value +lnMessages| Messages +lnCreateMessage| Create message +lnMessagesTable| Messages table \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/ru.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/ru.csv new file mode 100644 index 0000000..2e384cc --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/ru.csv @@ -0,0 +1,4 @@ +name| value +lnMessages| Сообщения +lnCreateMessage| Создать сообщение +lnMessagesTable| Таблица сообщений diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/ua.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/ua.csv new file mode 100644 index 0000000..b5af218 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage/ua.csv @@ -0,0 +1,4 @@ +name| value +lnMessages| Повідомлення +lnCreateMessage| Створити повідомлення +lnMessagesTable| Таблиця повідомлень \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/en.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/en.csv new file mode 100644 index 0000000..902ddf0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/en.csv @@ -0,0 +1,8 @@ +name| value +lnSendMessageUsers| Send message to users +lnMessage| Message +lnAdress| Adress +lnPutYourMessage| Put your message here... +lnPutMessageAdress| Put your message adress +lnSend| Send +lnColor| Color diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/ru.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/ru.csv new file mode 100644 index 0000000..0e4230e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/ru.csv @@ -0,0 +1,8 @@ +name| value +lnSendMessageUsers| Создание сообщиния пользователям +lnMessage| Сообщение +lnAdress| Адресат +lnPutYourMessage| Запишите здесь свое сообщение... +lnPutMessageAdress| Укажите адрес сообщения +lnSend| Отправить +lnColor| Цвет \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/ua.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/ua.csv new file mode 100644 index 0000000..48cc606 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_create/ua.csv @@ -0,0 +1,8 @@ +name| value +lnSendMessageUsers| Створення повідомлення користувачам +lnMessage| Повідомлення +lnAdress| Адресат +lnPutYourMessage| Запишіть тут своє повідомлення... +lnPutMessageAdress| Вкажіть адресу повідомлення +lnSend| Відправити +lnColor| Колір \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/en.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/en.csv new file mode 100644 index 0000000..601b3ed --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/en.csv @@ -0,0 +1,9 @@ +name| value +lnCreatedMessages| Created messages +lnAuthor| Author +lnMessage| Message +lnAdresMessage| Adres message +lnDateMessage| Date message +lnReadMessages| Read Messages +lnUser| User +lnReadDate| Read date \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/ru.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/ru.csv new file mode 100644 index 0000000..0c16fec --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/ru.csv @@ -0,0 +1,9 @@ +name| value +lnCreatedMessages| Созданные сообщения +lnAuthor| Автор +lnMessage| Сообщение +lnAdresMessage| Адресат сообщения +lnDateMessage| Дата сообщения +lnReadMessages| Прочтенные сообщения +lnUser| Пользователь +lnReadDate| Дата прочтения diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/ua.csv b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/ua.csv new file mode 100644 index 0000000..fd544c1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/lng/k2adminmessage_table/ua.csv @@ -0,0 +1,9 @@ +name| value +lnCreatedMessages| Створені повідомлення +lnAuthor| Автор +lnMessage| Повідомлення +lnAdresMessage| Адресат повідомлення +lnDateMessage| Дата повідомлення +lnReadMessages| Прочитані повідомлення +lnUser| Користувач +lnReadDate| Дата читання diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/messages.css b/k2shop/k2shop/app/app/k2/k2adminmessage/messages.css new file mode 100644 index 0000000..ef98690 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/messages.css @@ -0,0 +1,69 @@ + + .modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + padding-top: 100px; /* Location of the box */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ + } + + /* Modal Content */ + .modal-content { + position: relative; + background-color: #fefefe; + margin: auto; + padding: 0; + border: 1px solid #888; + width: 30%; + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); + -webkit-animation-name: animatetop; + -webkit-animation-duration: 0.4s; + animation-name: animatetop; + animation-duration: 0.4s + } + + /* Add Animation */ + @-webkit-keyframes animatetop { + from {top:-300px; opacity:0} + to {top:0; opacity:1} + } + + @keyframes animatetop { + from {top:-300px; opacity:0} + to {top:0; opacity:1} + } + + /* The Close Button */ + .close { + color: white; + float: right; + font-size: 28px; + font-weight: bold; + } + + .close:hover, + .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + } + + .modal-header { + padding: 2px 16px; + background-color: #5cb85c; + color: white; + } + + .modal-body {padding: 2px 16px;} + + .modal-footer { + padding: 2px 16px; + background-color: #5cb85c; + color: white; + } \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/messages.js b/k2shop/k2shop/app/app/k2/k2adminmessage/messages.js new file mode 100644 index 0000000..2e78a6f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/messages.js @@ -0,0 +1,28 @@ + var modal = document.getElementById('myModal'); + + // Get the button that opens the modal + + +// Get the element that closes the modal +var span = document.getElementsByClassName("close")[0]; + +// When the user clicks the button, open the modal + +modal.style.display = "block"; + + +// When the user clicks on (x), close the modal +span.onclick = function() { +modal.style.display = "none"; + } + +// When the user clicks anywhere outside of the modal, close it +window.onclick = function(event) { +if (event.target == modal) { +modal.style.display = "none"; +} +} + + + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/res/info.yml b/k2shop/k2shop/app/app/k2/k2adminmessage/res/info.yml new file mode 100644 index 0000000..5637751 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2adminmessage" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/res/mass_mess.yml b/k2shop/k2shop/app/app/k2/k2adminmessage/res/mass_mess.yml new file mode 100644 index 0000000..95ad52c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/res/mass_mess.yml @@ -0,0 +1,45 @@ +select: SELECT k.messid, k.userid, k.message, k.messdate, k.adres + FROM k2mass_message k +table: k2mass_message + +detile: k2mass_mess_user + +sortname: messid +sortorder: desc +caption: <%lnCreatedMessages%> +fields: + 0: + field: messid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: userid + caption: <%lnAuthor%> + width: 100 + readonly: false + align: left + + 2: + field: message + caption: <%lnMessage%> + width: 300 + readonly: false + align: left + + 4: + field: adres + caption: <%lnAdresMessage%> + width: 150 + readonly: false + align: left + + 5: + field: messdate + caption: <%lnDateMessage%> + width: 150 + readonly: true + align: left + type_field: datetime diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/res/mass_mess_user.yml b/k2shop/k2shop/app/app/k2/k2adminmessage/res/mass_mess_user.yml new file mode 100644 index 0000000..46912cf --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/res/mass_mess_user.yml @@ -0,0 +1,35 @@ +select: "SELECT m.messuserid, m.messid, m.usermessid, m.messuserdate + FROM k2mass_mess_user m where messid='{masterid}' + " + +table: k2mass_mess_user + +getmaster: true +masterid: messid + +height: 200 + +sortname: messuserid +sortorder: desc +caption: <%lnReadMessages%> +fields: + 0: + field: messuserid + caption: ID + width: 140 + readonly: true + align: center + + 1: + field: usermessid + caption: <%lnUser%> + width: 140 + readonly: true + align: center + + 2: + field: messuserdate + caption: <%lnReadDate%> + width: 140 + readonly: true + align: center diff --git a/k2shop/k2shop/app/app/k2/k2adminmessage/res/menu.yml b/k2shop/k2shop/app/app/k2/k2adminmessage/res/menu.yml new file mode 100644 index 0000000..a7b8007 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminmessage/res/menu.yml @@ -0,0 +1,19 @@ +0: + category: + parent: root + name: k2adminmessage + caption: <%lnMessages%> + iconclass: fa fa-database + + elements: + 0: + name: k2adminmessage_create + caption: <%lnCreateMessage%> + url: "?adm=k2adminmessage_create" + iconclass: fa fa-unlock + 1: + name: k2adminmessage_table + caption: <%lnMessagesTable%> + url: "?adm=k2adminmessage_table" + iconclass: fa fa-unlock + diff --git a/k2shop/k2shop/app/app/k2/k2adminpage/k2adminpage.php b/k2shop/k2shop/app/app/k2/k2adminpage/k2adminpage.php new file mode 100644 index 0000000..ed4dcac --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpage/k2adminpage.php @@ -0,0 +1,247 @@ + 'k2edocadmin', + 'k2siteadmin' => 'k2siteadmin' , + 'k2customoffice' => 'k2customoffice', + 'k2adminfunc' => 'k2adminfunc', + 'k2vdocsadmin' => 'k2vdocsadmin', + 'k2test' => 'k2test', + 'k2designer' => 'k2designer', + 'k2constructor' => 'k2constructor'*/ + ]; + + public $menu = []; + + + + // Иницилизация меню + function iniMenu(){ + global $k2; + + foreach ($this->admincomp as $adm) { + $comp=$k2->ins_comp($adm); + $this->admincomp[$adm]=$comp; + + try{ + if (method_exists($comp,'getAdminMenu')){ + $arr=$comp->getAdminMenu(); + } + } catch (Exception $e) { + echo $k2->log->err('Error. k2adminpage.iniMenu(): ', $e->getMessage()); + } + + + + if (isset($arr) and (count($arr)>0)) { + foreach ($arr as $key) { + array_push($this->menu, $key); + } + } + + } + } + + // Обработка команд + function admCommands($comm=''){ + global $k2; + $rez = ''; + ob_start(); + + $comm = $k2->get('adm'); + + // Перебираем команды всех административных компонент + foreach ($this->admincomp as $m) { + if (isset($m)){ + $rezm = $m->admCommands($comm); + + if ($rezm){ + break; + } + } + } + + $rez = ob_get_contents(); + ob_clean(); + + return $rez; + } + + //Данные пользователя админки + function userAdmin(){ + global $k2; + + $rez=array(); + $userid=$k2->auth->userid; + + $sql = "select CONCAT(w.firstname,' ', w.middlename,' ', w.lastname) as name, p.partner_name, r.rolename, w.partner_transid, w.email, w.roleid + from k2users w + + left join k2_partner_trans p on (w.partner_transid=p.partner_transid) + + left join k2roles r on w.roleid=r.roleid + + where w.user_id='$userid' + "; + foreach ($k2->db->query($sql) as $value) { + $name = $value['name']; + $email = $value['email']; + $role = $value['rolename']; + } + return array ('name'=>$name, 'email'=>$email, 'role'=>$role); + } + + + + // Административное меню + /*function admMenu($menus){ + + global $k2; + $rez=''; + + $category=$k2->get('category'); + $itemmenu=$k2->get('itemmenu'); + + //Создаем массив иконок + $icons = array("fa fa-bars", "fa fa-pencil", "fa fa-book", "fa fa-database", "fa fa-adjust", "fa fa-arrows", + "fa fa-bookmark", "fa fa-check-circle", "fa fa-check-square-o", "fa fa-cube"); + + // Вывод меню + foreach ($menus as $gmenu) { + if ($gmenu['category'][2]==$category){ + $treeview="active treeview"; + } + else { + $treeview='"treeview"'; + } + //Выбираем и подключаем к категориям меню иконки font-awesome + //Если иконка указана в файле категории меню (как k2siteadmin.php, k2adminfunc.php), берем ее из файла + if (isset($gmenu['category'][3])){ + $icon= $gmenu['category'][3]; + } + //если иконка не задана, берем ее из массива случайным образом + else { + $number = mt_rand(0, count($icons) - 1); + $icon = $icons[$number]; + } + + $rez.='
  • + + + '.$gmenu['category'][2].' + + + + '; + + foreach ($gmenu['elements'] as $menu) + { + if ($menu[1]==$itemmenu){ + $li='
  • '; + } + else { + $li='
  • '; + } + $rez.= ''; + } + $rez.='
  • '; + } + + return array ('rez'=>$rez, 'category'=>$category, 'itemmenu'=>$itemmenu); + + return $rez; + + }*/ + + + + // Административное меню + function admMenu($menus){ + global $k2; + + $menu=$k2->ins_comp('k2menu2'); + $rez=$menu->generateMenu($menus); + + + return $rez; + } + + + function getAdminInfo(&$html){ + global $k2; + //$rez=''; + //$k2->selfurl=false; + + if ($k2->post('design')<>''){ + $k2->auth->setDesignMode(); + header("Location:/"); + } + + if ($k2->post('profile')<>''){ + $k2->auth->setPublicMode(); + header("Location:/?p=auth"); + } + + if ($k2->post('sign_out')<>''){ + $k2->auth->clear(); + header("Location:/?p=unlogin"); + } + + + $this->iniMenu(); + + + //$sql = 'select adminpage from k2admin_design where active=1'; + + //foreach ($k2->db->query($sql) as $value) { + // $t = $value['adminpage']; + //} + + //require_once './k2shop/k2shop/app/app/k2/k2adminpage/k2adminpage_'.$t.'.php'; + //$temp = 'k2adminpage_'.$t; + //$adminpages = new $temp(); + //$rez = $adminpages->template; + + + $admmenu = $this->admMenu($this->menu); + $admcomm = $this->admCommands(); + + + $html = str_replace('{adminmenu}', $admmenu, $html); + $html = str_replace(/*'{admcommands}'*/'{admin}', $admcomm, $html); + $html = $this->Translate($html); +// $html = str_replace('{design}', $this->Translate("{lnDesign}"), $html); +// $html = str_replace('{profile}', $this->Translate("{lnProfile}"), $html); +// if(!$k2->auth->isAuth()){ +// $html = str_replace('{sign_out}', $this->Translate("{lnSignIn}"), $html); +// } else { +// $html = str_replace('{sign_out}', $this->Translate("{lnSignOut}"), $html); +// } +// +// $html = str_replace('{search}', $this->Translate("{lnSearch}"), $html); +// $html = str_replace('{lnAdminPanel}', $this->Translate("{lnAdminPanel}"), $html); +// $html = str_replace('{lnMainMenu}', $this->Translate("{lnMainMenu}"), $html); +// $html = str_replace('{lnProfile}', $this->Translate("{lnProfile}"), $html); + + + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/en.csv b/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/en.csv new file mode 100644 index 0000000..7e2f02a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/en.csv @@ -0,0 +1,10 @@ +name|value +lnProfile| Profile +lnDesign| Design +lnSignOut| Sign Out +lnSignIn| Sign In +lnSearch| Search +lnAdminPanel| Admin panel +lnMainMenu| MAIN MENU +lnProfile| Profile +lnCabinet| Cabinet diff --git a/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/ru.csv b/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/ru.csv new file mode 100644 index 0000000..0757bcb --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/ru.csv @@ -0,0 +1,10 @@ +name|value +lnProfile| Профиль +lnDesign| Дизайн +lnSignOut| Выход +lnSignIn| Вход +lnSearch| Поиск +lnAdminPanel| Административная панель +lnMainMenu| Главное меню +lnProfile| Профиль +lnCabinet| Кабинет \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/ua.csv b/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/ua.csv new file mode 100644 index 0000000..9026666 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpage/lng/k2adminpage/ua.csv @@ -0,0 +1,10 @@ +name|value +lnProfile| Профіль +lnDesign| Дизайн +lnSignOut| Вихід +lnSignIn| Вхід +lnSearch| Пошук +lnAdminPanel| Адміністративна панель +lnMainMenu| Головне меню +lnProfile| Профіль +lnCabinet| Кабінет \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpage/res/info.yml b/k2shop/k2shop/app/app/k2/k2adminpage/res/info.yml new file mode 100644 index 0000000..de9ad2c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpage/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2adminpage" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/---k2adminpanel.php b/k2shop/k2shop/app/app/k2/k2adminpanel/---k2adminpanel.php new file mode 100644 index 0000000..9475e03 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/---k2adminpanel.php @@ -0,0 +1,1305 @@ + + .office2010blueKFR{ + text-align: left; + } + + .select2{ + width: 100px; + } + + + + +
    +
    + + {designbtn} + + + + + + /* К2® v.{ver} */ + + + /*{SelLang} */ + {mainPageEditButton} + +
    + + {admrender} +
    + + "; + + public $menu_item_tpl = " +
    {menu_name} + + +
    +
    + {menu_subitem} + "; + + + + public $menu_subitem_tpl = " + + "; + + public $theme_item_tpl = "
    {temp_name} + {theme_link} +
    +
    "; + + public $act_theme_link = ""; + + public $noact_theme_link = " + + + "; + public $adm_panel_tpl3 = ' + +
    +
    + {lnAdminPart} + {designbtn} + + + +
    + +
    + {menu_item} +
    +
    +
    + +
    + + + + {lnEdit} + {lnDelete} + +
    +
    + + + + + {lnAddRecord} + + {item_btn} + + + {lnExit} + + + +
    +
    +
    +
    +
    +
    + '; + public $adm_panel_tpl2 = ' + + +
    +
    + +
    + +
    + + '; + + public $item_btn_tpl = ' + + {lnEditRecord} + + + {lnDeleteRecord} + '; + + + + public $arr_cont_menu = []; + //public $cont_json; + + function renderJS(){ + global $k2; + ob_start(); + ?> + + selfurl) { + $mode = '/mode/'; + } + $rez = str_replace('{mode}', $mode, $rez); + return $rez; + } + + // Возвращает перечень языков + function getLangs(){ + global $k2; + + } + + public function mainPageSettingsForm() { + global $k2; + + return $this->pageEditForm; + } + + /** + * Сохраняет данные для пункта "Главная" меню текущего сайта, проекта, языка + * @param type $url - URL страницы + */ + public function saveMenuItemData(){ + global $k2; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $sqlQuery = 'UPDATE k2menuitems + SET title = "'.$k2->post('title').'", + descript = "'.$k2->post('description').'", + keywords = "'.$k2->post('keywords').'", + script = "'.$k2->post('script').'", + content = "'.$k2->post('full_content').'" + WHERE home_page ='.self::HOME_PAGE_STATUS_ACTIVE.' AND projid ='.$cont->currentProjectID.' AND siteid ='.$cont->currentSiteID.' AND langid ="'.$currentLang.'"'; + + try { + $res=$k2->db->exec($sqlQuery); + + + } catch(PDOException $e) { + echo "Ошибка обновления данных: $sqlQuery\n"; + echo $e->getMessage(); + } + } + + /** + * Получает данные для пункта меню "Главная" текущего проекта, сайта, языка + * @param type $url + * @return array. Массив данных пункта меню + */ + public static function getMenuItemData() { + global $k2; + + $whereCondition = 'WHERE home_page ='.self::HOME_PAGE_STATUS_ACTIVE; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $menuDataArray = []; + + $sqlQuery = 'SELECT caption, title, descript, keywords, content, h1, script FROM k2menuitems + '.$whereCondition.' AND projid ="'.$cont->currentProjectID.'" AND siteid ="'.$cont->currentSiteID.'" AND langid ="'.$currentLang.'" LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + + } + + public function getMenuItems() { + global $k2; + + $whereCondition = 'WHERE (1=1)'; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $menuDataArray = []; + + $sqlQuery = 'SELECT caption, title, descript, keywords, content, h1, script FROM k2menuitems + '.$whereCondition.' AND projid ="'.$cont->currentProjectID.'" AND siteid ="'.$cont->currentSiteID.'" AND langid ="'.$currentLang.'" LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + + } + + public function getIncItems() { + global $k2; + + $whereCondition = 'WHERE (1=1)'; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $menuDataArray = []; + + $sqlQuery = 'SELECT caption, title, descript, keywords, content, h1, script FROM k2menuitems + '.$whereCondition.' AND projid ="'.$cont->currentProjectID.'" AND siteid ="'.$cont->currentSiteID.'" AND langid ="'.$currentLang.'" LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + + } + + function getSubMenus($menuid) + { + global $k2; + + + $menuDataArray = []; + $cont = $k2->ins_comp('k2cont'); + + $sql = "SELECT c.k2menuid, c.k2menuitemid, c.parentid, c.active, c.hint, c.class, c.content as menuitemcont, + c.command, c.url, c.ord, c.caption AS menuitemname, c.descript, c.title, c.keywords, c.is_admin, + c_tr.k2menuitemid AS k2menuitemid_tr, c_tr.caption AS menuitemname_tr, c_tr.content AS menuitemcont_tr, + IFNULL(c_tr.caption,c.caption) as caption, + IFNULL(c_tr.content,c.content) as content + + FROM k2menuitems c + + LEFT JOIN k2menuitems c_tr + ON (c.k2menuitemid = c_tr.lgparentid) + AND (c_tr.langid='".$k2->lng."') + + WHERE (c.k2menuid='".$menuid."') + AND (c.active = '1') + AND (c.parentid = '0' OR c.home_page = '1') + AND (c.projid = '".$cont->currentProjectID."') + AND (c.siteid = '".$cont->currentSiteID."') + AND (c.langid = '".$k2->lng."') "; + + //echo $sql; + try { + foreach ($k2->db->query($sql) as $menuData) { + array_push($menuDataArray, $menuData); + } + }catch (Exception $e) { + echo "Ошибка : ".$e->getMessage()."\n"; + } + + + + return $menuDataArray; + + + + } + + function getMainMenus() + { + global $k2; + + + $menuDataArray = []; + $cont = $k2->ins_comp('k2cont'); + + $query = 'SELECT k2menuid, menu_name, ident, comment, active FROM k2menu + WHERE projid = "'.$cont->currentProjectID.'" AND active = 1 + AND siteid ="'.$cont->currentSiteID.'" '; + + + foreach ($k2->db->query($query) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + } + + function getWindow() + { + global $k2; + + $jqx = $k2->ins_comp2('k2window', $this); + $arr_win = [ + 'caption'=>'-', + 'main_div'=>'container', + 'wnd_id'=>'window', + 'is_modal'=>true, + 'height'=>750, + 'width'=>900, + 'left'=>450, + 'top'=>225, + 'is_modal'=>false, + 'button'=>false, + 'wnd_body'=>" +
    + +
    + " + ]; + $rez .= $jqx->showWindow($arr_win); + $arr_winconf = [ + 'caption'=>'{lnTextCaptDel}', + 'main_div'=>'container', + 'wnd_id'=>'windowconf', + 'is_modal'=>true, + 'height'=>175, + 'width'=>350, + 'left'=>450, + 'top'=>225, + 'is_modal'=>false, + 'button'=>false, + 'wnd_body'=>" +
    + +
    + " + ]; + $rez .= $jqx->showWindow($arr_winconf); +// $rez = ' +//
    +//
    +// Header
    +//
    +// Content
    +//
    '; + $rez=$this->Translate($rez); + return $rez; + } + + function getForm() + { + global $k2; + $mainmenus = $this->getMainMenus(); + $rez = $this->adm_panel_tpl3; + + if ($k2->auth->isPublicMode() or $k2->auth->isAdminMode()){ + $designbtn = '{lnDesignAdmin}'; + $mode = 'design'; + $adddesign_btn = ''; + }elseif ($k2->auth->isDesignMode()) { + $designbtn='{lnViewAdmin}'; + $mode = 'public'; + $adddesign_btn = $this->adddesign_btn; + } + $rez=str_replace('{designbtn}', $designbtn, $rez); + $rez=str_replace('{adddesign_btn}', $adddesign_btn, $rez); + $rez=str_replace('{mode}', $mode, $rez); + + $temp = $k2->ins_comp('k2siteadmin','templates'); + + $templatesArray = $temp->getThemes(); + + foreach ($templatesArray as $value) { + $temp_item .= $this->theme_item_tpl; + if ($value['temp_active'] == 1) { + $temp_item = str_replace('{theme_link}', $this->act_theme_link, $temp_item); + } else { + $temp_item = str_replace('{theme_link}', $this->noact_theme_link, $temp_item); + } + + $temp_item = str_replace('{themeid}', $value['tempid'], $temp_item); + $temp_item = str_replace('{temp_name}', $value['templatename'], $temp_item); + } + $rez = str_replace('{theme_item}', $temp_item , $rez); + + foreach ($mainmenus as $val){ + $menu_item .= $this->menu_item_tpl; + $menu_item = str_replace('{menu_name}', trim($val['menu_name']), $menu_item); + $menu_item = str_replace('{menuid}', trim($val['k2menuid']) , $menu_item); + $arr_submenu = $this->getSubMenus($val['k2menuid']); + foreach ($arr_submenu as $value) { + $menu_subitem .= $this->menu_subitem_tpl; + $menu_subitem = str_replace('{menu_subitem_name}', $value['menuitemname'] , $menu_subitem); + $menu_subitem = str_replace('{menuid}', $value['k2menuitemid'] , $menu_subitem); + if ($value['is_admin']) { + $menu_subitem = str_replace('{adm_view_toggle}', 'fa fa-toggle-on' , $menu_subitem); + $menu_subitem = str_replace('{adm_view_title}', 'Для всех' , $menu_subitem); + $menu_subitem = str_replace('{adm_view_val}', '1' , $menu_subitem); + } else { + $menu_subitem = str_replace('{adm_view_toggle}', 'fa fa-toggle-off', $menu_subitem); + $menu_subitem = str_replace('{adm_view_title}', 'Только админ' , $menu_subitem); + $menu_subitem = str_replace('{adm_view_val}', '0' , $menu_subitem); + } + + + //$arrayname[$value['k2menuitemid']] = $value; + $this->arr_cont_menu[$value['k2menuitemid']] = $value; + //$cont_json = json_encode($this->arr_cont_menu[$value['k2menuitemid']]); + //$menu_subitem = str_replace('{arr_cont_menu}', $cont_json , $menu_subitem); + } + + $menu_item = str_replace('{menu_subitem}', $menu_subitem , $menu_item); + $menu_subitem = ''; + } + $rez = str_replace('{menu_item}', $menu_item , $rez); + + $content = $k2->ins_comp('k2cont'); + $content->getIncArea(); + $arr_inc = $content->pageInc; + + foreach ($arr_inc as $val) { + $area_item .= $this->area_item_tpl; + $area_item = str_replace('{area_name}', $val['command'] , $area_item); + $area_item = str_replace('{contid}', $val['contentid'] , $area_item); + } + + $rez = str_replace('{area_item}', $area_item , $rez); + + //Выводит ссылку "Редактировать страницу" в панели + //$rez = str_replace('{mainPageEditButton}', $this->mainPageEditButton , $rez); + + + // Кнопка дизайна + $designbtn = ''; + + return $rez; + } + + + function showAdminPanel() + { + global $k2; + + $menu = $k2->ins_comp('k2menu'); + //$save=$k2->ins_comp('k2save'); + + +// $page=$k2->ins_comp('k2page'); +// $page->LoadFromDB($this); + + if ($k2->get('mode') !== 'admin' ) { + + $k2->site->addCSS('w3.css',"//www.w3schools.com/w3css/4/w3.css"); + $k2->site->addCSS('nestable.css',"/k2shop/k2shop/libs/nestmenu/nestable.css"); + $k2->site->addCSS('font-awesome.min.css',"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"); + //$k2->site->addCSS('jquery-ui.css',"//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"); + $k2->site->addJS('jquery.nestable.js', '/k2shop/k2shop/libs/nestmenu/jquery.nestable.js'); + //$k2->site->addJS('jquery.min.js',"/k2shop/k2shop/libs/phpgrid/phpgrid-full-v2.0/lib/js/jquery.min.js"); + + //$k2->site->addJS('ckeditor.js',"/k2shop/k2shop/libs/ckeditor_test/ckeditor.js"); + + //$k2->site->addJS('ckeditor.js',"//cdn.ckeditor.com/4.13.0/standard/ckeditor.js"); + $k2->site->addJS('ckeditor.js',"/k2shop/k2shop/libs/phpgrid/phpgrid-full-v2.0/lib/js/ckeditor/ckeditor.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'); + // $not = $k2->ins_comp('k2notification'); + // $rez .= $not->content(); + + } + + $mainmenuid = $k2->site->mainmenuid; + $menuid = $k2->site->curmenuid; + + if( $k2->post('oper') == 'main-page_settings' ) { + $this->saveMenuItemData(); + $k2->GoBack(); + } + + if ($k2->post('DesignMode')<>''){ + $k2->auth->setDesignMode(); + //$k2->GoBack(); + } + + if ($k2->post('PublicMode')<>''){ + $k2->auth->setPublicMode(); + //$k2->GoBack(); + } + + + if ($k2->post('AdminMode')<>''){ + header('Location: /?mode=admin'); + + //$k2->auth->setAdminMode(); + //$k2->GoBack(); + } + + + if ($k2->post('Exit')<>''){ + $k2->auth->clear(); + $k2->GoBack(); + } + + if ($k2->post('btnSelLang')<>''){ + $isGo=false; + $isGo=($k2->lng<>$k2->post('admSelLang')); + + $k2->lng=$k2->post('admSelLang'); + $k2->saveLang(); + + if ($isGo){ + $k2->GoBack(); + } + + //echo 'lng='.$k2->lng; + } + + + + $rez .= $this->getForm(); + + if($k2->get('item') ){ + $rez = str_replace('{item_btn}', $this->item_btn_tpl, $rez); + $contentid = $k2->get('item'); + if ($k2->site->is_slug) { + $content = $k2->ins_comp('k2cont'); + $contentid = $content->getIdBySlug($contentid); + if (!$contentid) { + $contentid = $k2->get('item'); + } + } + $rez = str_replace('{item}', $contentid, $rez); + + } else { + $rez = str_replace('{item}', '', $rez); + $rez = str_replace('{item_btn}', '', $rez); + } + + + + // URL + $url = $k2->surl->SefURL_FromURL('/?'.$k2->getParamURL()); + $rez = str_replace('{url}', $url, $rez); + + + // Вверсия + $rez = str_replace('{ver}', $k2->version, $rez); + + // Рендер + //$rez=str_replace('{admrender}', $adminpanel_tpl, $rez); + + + $menuItemArray = $this->getMenuItemData(); + + if( !empty($menuItemArray) ) { + $dataArray = $this->getMenuItemData()[0]; + + $rez=str_replace('{pageTitle}', $dataArray['title'], $rez); + $rez=str_replace('{pageDescription}', $dataArray['descript'], $rez); + $rez=str_replace('{pageKeywords}', $dataArray['keywords'], $rez); + $rez=str_replace('{pageScript}', $dataArray['script'], $rez); + $rez=str_replace('{full_content}', $dataArray['content'], $rez); + } + + $rez .= $this->getWindow(); + + $rez .= $this->renderJS(); + + $rez = str_replace('{command}', $k2->get('p'), $rez); + $rez = str_replace('{menuid}', $menuid, $rez); + $rez = str_replace('{mainmenuid}', $mainmenuid, $rez); + $rez = $this->Translate($rez); + + return $rez; + } + + // Возвращает контент админ-панели + function content(){ + + global $k2; + + $rez = $this->showAdminPanel(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/k2adminpanel.php b/k2shop/k2shop/app/app/k2/k2adminpanel/k2adminpanel.php new file mode 100644 index 0000000..48672ef --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/k2adminpanel.php @@ -0,0 +1,1238 @@ + + .office2010blueKFR{ + text-align: left; + } + + .select2{ + width: 100px; + } + + + + +
    +
    + + {designbtn} + + + + + + /* К2® v.{ver} */ + + + /*{SelLang} */ + {mainPageEditButton} + +
    + + {admrender} +
    + + "; + + public $menu_item_tpl = " +
    {menu_name} + + +
    +
    + {menu_subitem} + "; + + + + public $menu_subitem_tpl = " + + "; + + public $theme_item_tpl = "
    {temp_name} + {theme_link} +
    +
    "; + + public $act_theme_link = ""; + + public $noact_theme_link = " + + + "; + public $adm_panel_tpl3 = ' + +
    +
    + {lnAdminPart} + {designbtn} + + + +
    + +
    + {menu_item} +
    +
    +
    + +
    + + + + {lnEdit} + {lnDelete} + +
    +
    + + + + + {lnAddRecord} + + {item_btn} + + + {lnExit} + + + +
    +
    +
    +
    +
    +
    + '; + public $adm_panel_tpl2 = ' + + +
    +
    + +
    + +
    + + '; + + public $item_btn_tpl = ' + + {lnEditRecord} + + + {lnDeleteRecord} + '; + + + + public $arr_cont_menu = []; + //public $cont_json; + + function renderJS(){ + global $k2; + + $rez = ' + '; + $mode = '&mode='; + if ($k2->selfurl) { + $mode = '/mode/'; + } + $rez = str_replace('{mode}', $mode, $rez); + return $rez; + } + + // Возвращает перечень языков + function getLangs(){ + global $k2; + + } + + public function mainPageSettingsForm() { + global $k2; + + return $this->pageEditForm; + } + + /** + * Сохраняет данные для пункта "Главная" меню текущего сайта, проекта, языка + * @param type $url - URL страницы + */ + public function saveMenuItemData(){ + global $k2; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $sqlQuery = 'UPDATE k2menuitems + SET title = "'.$k2->post('title').'", + descript = "'.$k2->post('description').'", + keywords = "'.$k2->post('keywords').'", + script = "'.$k2->post('script').'", + content = "'.$k2->post('full_content').'" + WHERE home_page ='.self::HOME_PAGE_STATUS_ACTIVE.' AND projid ='.$cont->currentProjectID.' AND siteid ='.$cont->currentSiteID.' AND langid ="'.$currentLang.'"'; + + try { + $res=$k2->db->exec($sqlQuery); + + + } catch(PDOException $e) { + echo "Ошибка обновления данных: $sqlQuery\n"; + echo $e->getMessage(); + } + } + + /** + * Получает данные для пункта меню "Главная" текущего проекта, сайта, языка + * @param type $url + * @return array. Массив данных пункта меню + */ + public static function getMenuItemData() { + global $k2; + + $whereCondition = 'WHERE home_page ='.self::HOME_PAGE_STATUS_ACTIVE; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $menuDataArray = []; + + $sqlQuery = 'SELECT caption, title, descript, keywords, content, h1, script FROM k2menuitems + '.$whereCondition.' AND projid ="'.$cont->currentProjectID.'" AND siteid ="'.$cont->currentSiteID.'" AND langid ="'.$currentLang.'" LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + + } + + public function getMenuItems() { + global $k2; + + $whereCondition = 'WHERE (1=1)'; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $menuDataArray = []; + + $sqlQuery = 'SELECT caption, title, descript, keywords, content, h1, script FROM k2menuitems + '.$whereCondition.' AND projid ="'.$cont->currentProjectID.'" AND siteid ="'.$cont->currentSiteID.'" AND langid ="'.$currentLang.'" LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + + } + + public function getIncItems() { + global $k2; + + $whereCondition = 'WHERE (1=1)'; + + $cont = $k2->ins_comp('k2cont'); + $currentLang = $k2->lng; + + $menuDataArray = []; + + $sqlQuery = 'SELECT caption, title, descript, keywords, content, h1, script FROM k2menuitems + '.$whereCondition.' AND projid ="'.$cont->currentProjectID.'" AND siteid ="'.$cont->currentSiteID.'" AND langid ="'.$currentLang.'" LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + + } + + function getSubMenus($menuid) + { + global $k2; + + + $menuDataArray = []; + $cont = $k2->ins_comp('k2cont'); + + $sql = "SELECT c.k2menuid, c.k2menuitemid, c.parentid, c.active, c.hint, c.class, c.content as menuitemcont, + c.command, c.url, c.ord, c.caption AS menuitemname, c.descript, c.title, c.keywords, c.is_admin, + c_tr.k2menuitemid AS k2menuitemid_tr, c_tr.caption AS menuitemname_tr, c_tr.content AS menuitemcont_tr, + IFNULL(c_tr.caption,c.caption) as caption, + IFNULL(c_tr.content,c.content) as content + + FROM k2menuitems c + + LEFT JOIN k2menuitems c_tr + ON (c.k2menuitemid = c_tr.lgparentid) + AND (c_tr.langid='".$k2->lng."') + + WHERE (c.k2menuid='".$menuid."') + AND (c.active = '1') + AND (c.parentid = '0' OR c.home_page = '1') + AND (c.projid = '".$cont->currentProjectID."') + AND (c.siteid = '".$cont->currentSiteID."') + AND (c.langid = '".$k2->lng."') "; + + //echo $sql; + try { + foreach ($k2->db->query($sql) as $menuData) { + array_push($menuDataArray, $menuData); + } + }catch (Exception $e) { + echo "Ошибка : ".$e->getMessage()."\n"; + } + + + + return $menuDataArray; + + + + } + + function getMainMenus() + { + global $k2; + + + $menuDataArray = []; + $cont = $k2->ins_comp('k2cont'); + + $query = 'SELECT k2menuid, menu_name, ident, comment, active FROM k2menu + WHERE projid = "'.$cont->currentProjectID.'" AND active = 1 + AND siteid ="'.$cont->currentSiteID.'" '; + + + foreach ($k2->db->query($query) as $menuData) { + array_push($menuDataArray, $menuData); + } + + return $menuDataArray; + } + + function getWindow() + { + global $k2; + + $jqx = $k2->ins_comp2('k2window', $this); + $arr_win = [ + 'caption'=>'-', + 'main_div'=>'container', + 'wnd_id'=>'window', + 'is_modal'=>true, + 'height'=>550, + 'width'=>900, + 'left'=>450, + 'top'=>225, + 'is_modal'=>false, + 'button'=>false, + 'wnd_body'=>" +
    + +
    + " + ]; + $rez .= $jqx->showWindow($arr_win); + $arr_winconf = [ + 'caption'=>'{lnTextCaptDel}', + 'main_div'=>'container', + 'wnd_id'=>'windowconf', + 'is_modal'=>true, + 'height'=>175, + 'width'=>350, + 'left'=>450, + 'top'=>225, + 'is_modal'=>false, + 'button'=>false, + 'wnd_body'=>" +
    + +
    + " + ]; + $rez .= $jqx->showWindow($arr_winconf); + + $rez=$this->Translate($rez); + return $rez; + } + + function getForm() + { + global $k2; + $mainmenus = $this->getMainMenus(); + $rez = $this->adm_panel_tpl3; + + if ($k2->auth->isPublicMode() or $k2->auth->isAdminMode()){ + $designbtn = '{lnDesignAdmin}'; + $mode = 'design'; + $adddesign_btn = ''; + }elseif ($k2->auth->isDesignMode()) { + $designbtn='{lnViewAdmin}'; + $mode = 'public'; + $adddesign_btn = $this->adddesign_btn; + } + $rez=str_replace('{designbtn}', $designbtn, $rez); + $rez=str_replace('{adddesign_btn}', $adddesign_btn, $rez); + $rez=str_replace('{mode}', $mode, $rez); + + $temp = $k2->ins_comp('k2siteadmin','templates'); + + $templatesArray = $temp->getThemes(); + + foreach ($templatesArray as $value) { + $temp_item .= $this->theme_item_tpl; + if ($value['temp_active'] == 1) { + $temp_item = str_replace('{theme_link}', $this->act_theme_link, $temp_item); + } else { + $temp_item = str_replace('{theme_link}', $this->noact_theme_link, $temp_item); + } + + $temp_item = str_replace('{themeid}', $value['tempid'], $temp_item); + $temp_item = str_replace('{temp_name}', $value['templatename'], $temp_item); + } + $rez = str_replace('{theme_item}', $temp_item , $rez); + + foreach ($mainmenus as $val){ + $menu_item .= $this->menu_item_tpl; + $menu_item = str_replace('{menu_name}', trim($val['menu_name']), $menu_item); + $menu_item = str_replace('{menuid}', trim($val['k2menuid']) , $menu_item); + $arr_submenu = $this->getSubMenus($val['k2menuid']); + foreach ($arr_submenu as $value) { + $menu_subitem .= $this->menu_subitem_tpl; + $menu_subitem = str_replace('{menu_subitem_name}', $value['menuitemname'] , $menu_subitem); + $menu_subitem = str_replace('{menuid}', $value['k2menuitemid'] , $menu_subitem); + if ($value['is_admin']) { + $menu_subitem = str_replace('{adm_view_toggle}', 'fa fa-toggle-on' , $menu_subitem); + $menu_subitem = str_replace('{adm_view_title}', 'Для всех' , $menu_subitem); + $menu_subitem = str_replace('{adm_view_val}', '1' , $menu_subitem); + } else { + $menu_subitem = str_replace('{adm_view_toggle}', 'fa fa-toggle-off', $menu_subitem); + $menu_subitem = str_replace('{adm_view_title}', 'Только админ' , $menu_subitem); + $menu_subitem = str_replace('{adm_view_val}', '0' , $menu_subitem); + } + + + //$arrayname[$value['k2menuitemid']] = $value; + $this->arr_cont_menu[$value['k2menuitemid']] = $value; + //$cont_json = json_encode($this->arr_cont_menu[$value['k2menuitemid']]); + //$menu_subitem = str_replace('{arr_cont_menu}', $cont_json , $menu_subitem); + } + + $menu_item = str_replace('{menu_subitem}', $menu_subitem , $menu_item); + $menu_subitem = ''; + } + $rez = str_replace('{menu_item}', $menu_item , $rez); + + $content = $k2->ins_comp('k2cont'); + $content->getIncArea(); + $arr_inc = $content->pageInc; + + foreach ($arr_inc as $val) { + $area_item .= $this->area_item_tpl; + $area_item = str_replace('{area_name}', $val['command'] , $area_item); + $area_item = str_replace('{contid}', $val['contentid'] , $area_item); + } + + $rez = str_replace('{area_item}', $area_item , $rez); + + //Выводит ссылку "Редактировать страницу" в панели + //$rez = str_replace('{mainPageEditButton}', $this->mainPageEditButton , $rez); + + + // Кнопка дизайна + $designbtn = ''; + + return $rez; + } + + + function showAdminPanel() + { + global $k2; + + $menu = $k2->ins_comp('k2menu'); + //$save=$k2->ins_comp('k2save'); + + +// $page=$k2->ins_comp('k2page'); +// $page->LoadFromDB($this); + + if ($k2->get('mode') !== 'admin' ) { + + $k2->site->addCSS('w3.css',"//www.w3schools.com/w3css/4/w3.css"); + $k2->site->addCSS('nestable.css',"/k2shop/k2shop/libs/nestmenu/nestable.css"); + $k2->site->addCSS('font-awesome.min.css',"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"); + //$k2->site->addCSS('jquery-ui.css',"//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"); + $k2->site->addJS('jquery.nestable.js', '/k2shop/k2shop/libs/nestmenu/jquery.nestable.js'); + //$k2->site->addJS('jquery.min.js',"/k2shop/k2shop/libs/phpgrid/phpgrid-full-v2.0/lib/js/jquery.min.js"); + + //$k2->site->addJS('ckeditor.js',"/k2shop/k2shop/libs/ckeditor_test/ckeditor.js"); + + //$k2->site->addJS('ckeditor.js',"//cdn.ckeditor.com/4.13.0/standard/ckeditor.js"); + $k2->site->addJS('ckeditor.js',"/k2shop/k2shop/libs/phpgrid/phpgrid-full-v2.0/lib/js/ckeditor/ckeditor.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'); + // $not = $k2->ins_comp('k2notification'); + // $rez .= $not->content(); + + } + + $mainmenuid = $k2->site->mainmenuid; + $menuid = $k2->site->curmenuid; + + if( $k2->post('oper') == 'main-page_settings' ) { + $this->saveMenuItemData(); + $k2->GoBack(); + } + + if ($k2->post('DesignMode')<>''){ + $k2->auth->setDesignMode(); + //$k2->GoBack(); + } + + if ($k2->post('PublicMode')<>''){ + $k2->auth->setPublicMode(); + //$k2->GoBack(); + } + + + if ($k2->post('AdminMode')<>''){ + header('Location: /?mode=admin'); + + //$k2->auth->setAdminMode(); + //$k2->GoBack(); + } + + + if ($k2->post('Exit')<>''){ + $k2->auth->clear(); + $k2->GoBack(); + } + + if ($k2->post('btnSelLang')<>''){ + $isGo=false; + $isGo=($k2->lng<>$k2->post('admSelLang')); + + $k2->lng=$k2->post('admSelLang'); + $k2->saveLang(); + + if ($isGo){ + $k2->GoBack(); + } + + //echo 'lng='.$k2->lng; + } + + + + $rez .= $this->getForm(); + + if($k2->get('item') ){ + $rez = str_replace('{item_btn}', $this->item_btn_tpl, $rez); + $contentid = $k2->get('item'); + if ($k2->site->is_slug) { + $content = $k2->ins_comp('k2cont'); + $contentid = $content->getIdBySlug($contentid); + if (!$contentid) { + $contentid = $k2->get('item'); + } + } + $rez = str_replace('{item}', $contentid, $rez); + + } else { + $rez = str_replace('{item}', '', $rez); + $rez = str_replace('{item_btn}', '', $rez); + } + + + + // URL + $url = $k2->surl->SefURL_FromURL('/?'.$k2->getParamURL()); + $rez = str_replace('{url}', $url, $rez); + + + // Вверсия + $rez = str_replace('{ver}', $k2->version, $rez); + + // Рендер + //$rez=str_replace('{admrender}', $adminpanel_tpl, $rez); + + + $menuItemArray = $this->getMenuItemData(); + + if( !empty($menuItemArray) ) { + $dataArray = $this->getMenuItemData()[0]; + + $rez=str_replace('{pageTitle}', $dataArray['title'], $rez); + $rez=str_replace('{pageDescription}', $dataArray['descript'], $rez); + $rez=str_replace('{pageKeywords}', $dataArray['keywords'], $rez); + $rez=str_replace('{pageScript}', $dataArray['script'], $rez); + $rez=str_replace('{full_content}', $dataArray['content'], $rez); + } + + $rez .= $this->getWindow(); + + $rez .= $this->renderJS(); + + $rez = str_replace('{command}', $k2->get('p'), $rez); + $rez = str_replace('{menuid}', $menuid, $rez); + $rez = str_replace('{mainmenuid}', $mainmenuid, $rez); + $rez=$this->Translate($rez); + + return $rez; + } + + // Возвращает контент админ-панели + function content(){ + + global $k2; + + $rez = $this->showAdminPanel(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/en.csv b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/en.csv new file mode 100644 index 0000000..aaadb66 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/en.csv @@ -0,0 +1,47 @@ +name| value +lnDesignAdmin| Design +lnViewAdmin| View +lnAdminPart| Admin part +lnExit| Exit +lnMenu| Menu +lnIncludeArea| Include area +lnAddMenu| Add menu +lnVerK2Hint| CMS-System Version 2 K2 ® Corporation +lbVerK2Caption| K2 ®. Version +lnHistoryK2Hint| CMS-system History 2 K2 ® Corporation +lnHistoryK2Caption| History +ln5Hint| On page 1 of the table displays 5 lines +ln10Hint| On page 1 of the table displays 10 lines +ln15Hint| On page 1 of the table displays 15 lines +ln20Hint| On page 1 of the table displays 20 lines +ln50Hint| On page 1 of the table displays 50 lines +ln100Hint| On page 1 of the table displays 100 lines +ln500Hint| On page 1 of the table displays 500 lines +ln1000Hint| On page 1 of the table displays 1000 lines +lbRowStyleEditHint| Style edit table data - into a string +lbRowStyleEditCaption| Line +lbTableStyleEditHint| Style editing table information - SHAPED +lbTableStyleEditCaption| Form +lnMainPage | Main Page +lnCurrentPage| Текущая страница +lnEdit| Редактировать +lnDelete| Удалить +lnAddRecord| Добавить запись +lnEditRecord| Редактировать запись +lnDeleteRecord| Удалить запись +lnSave| Сохранить +lnCancel| Отмена +lnYes| Да +lnNo| Нет +lnTextDelMenu| Вы действительно хотите удалить текущий пункт меню? +lnTextDelRecord| Вы действительно хотите удалить текущую запись? +lnTextCaptDel| Подтверждение удаления +lnImage| Изображение +lnShortDescription| Краткое описание +lnMetaData| Мета-данные +lnTitle| Заголовок +lnDescription| Описание страницы +lnKeyWords| Ключевые слова +lnName| Название +lnMenu| Menu +lnThemes| Themes \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/fr.csv b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/fr.csv new file mode 100644 index 0000000..1fea523 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/fr.csv @@ -0,0 +1,22 @@ +name| value +lnDesignAdmin| Conception +lnViewAdmin| Vue +partie Administrateur| lnAdminPart +lnExit| Rendement +lnVerK2Hint| CMS-System Version 2 K2 ® Corporation +lbVerK2Caption| K2 ®. version +lnHistoryK2Hint| Histoire CMS-système 2 K2 ® Corporation +lnHistoryK2Caption| Histoire +ln5Hint| A la page 1 de la table affiche 5 lignes +ln10Hint| A la page 1 de la table affiche 10 lignes +ln15Hint| A la page 1 de la table affiche 15 lignes +ln20Hint| A la page 1 de la table affiche 20 lignes +ln50Hint| A la page 1 de la table affiche 50 lignes +ln100Hint| A la page 1 de la table affiche 100 lignes +ln500Hint| A la page 1 de la table affiche 500 lignes +ln1000Hint| A la page 1 de la table affiche 1000 lignes +lbRowStyleEditHint| Style de données de table d'édition - dans une chaîne +lbRowStyleEditCaption| Ligne +lbTableStyleEditHint| Style de l'information de table d'édition - FAÇONNÉ +lbTableStyleEditCaption| Sous forme de +lnMainPage | Maison \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/ru.csv b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/ru.csv new file mode 100644 index 0000000..908e50c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/ru.csv @@ -0,0 +1,47 @@ +name|value +lnDesignAdmin|Дизайн +lnViewAdmin|Просмотр +lnAdminPart|Админ-часть +lnExit|Выход +lnMenu| Меню +lnIncludeArea| Включаемая область +lnAddMenu| Добавить меню +lnVerK2Hint|Версия CMS-системы Корпорация 2 К2® +lbVerK2Caption|К2®. Версия +lnHistoryK2Hint|История CMS-системы Корпорация 2 К2® +lnHistoryK2Caption|История +ln5Hint|На 1 странице таблицы выводится 5 строк +ln10Hint|На 1 странице таблицы выводится 10 строк +ln15Hint|На 1 странице таблицы выводится 15 строк +ln20Hint|На 1 странице таблицы выводится 20 строк +ln50Hint|На 1 странице таблицы выводится 50 строк +ln100Hint|На 1 странице таблицы выводится 100 строк +ln500Hint|На 1 странице таблицы выводится 500 строк +ln1000Hint|На 1 странице таблицы выводится 1000 строк +lbRowStyleEditHint|Стиль редактирования информации таблицы - В СТРОКЕ +lbRowStyleEditCaption|В строке +lbTableStyleEditHint|Стиль редактирования информации таблицы - В ФОРМЕ +lbTableStyleEditCaption|В форме +lnMainPage | Главная страница +lnCurrentPage| Текущая страница +lnEdit| Редактировать +lnDelete| Удалить +lnAddRecord| Добавить запись +lnEditRecord| Редактировать запись +lnDeleteRecord| Удалить запись +lnSave| Сохранить +lnCancel| Отмена +lnYes| Да +lnNo| Нет +lnTextDelMenu| Вы действительно хотите удалить текущий пункт меню? +lnTextDelRecord| Вы действительно хотите удалить текущую запись? +lnTextCaptDel| Подтверждение удаления +lnImage| Изображение +lnShortDescription| Краткое описание +lnMetaData| Мета-данные +lnTitle| Заголовок +lnDescription| Описание страницы +lnKeyWords| Ключевые слова +lnName| Название +lnMenu| Меню +lnThemes| Темы \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/ua.csv b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/ua.csv new file mode 100644 index 0000000..afabaf9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/lng/k2adminpanel/ua.csv @@ -0,0 +1,44 @@ +name| value +lnDesignAdmin| Дизайн +lnViewAdmin| Перегляд +lnAdminPart| Адмін-частина +lnExit| Вихід +lnVerK2Hint| Версія CMS-системи Корпорація 2 К2 ® +lbVerK2Caption| К2®. версія +lnHistoryK2Hint| Історія CMS-системи Корпорація 2 К2 ® +lnHistoryK2Caption| Історія +ln5Hint| На 1 сторінці таблиці виводиться 5 рядків +ln10Hint| На 1 сторінці таблиці виводиться 10 рядків +ln15Hint| На 1 сторінці таблиці виводиться 15 рядків +ln20Hint| На 1 сторінці таблиці виводиться 20 рядків +ln50Hint| На 1 сторінці таблиці виводиться 50 рядків +ln100Hint| На 1 сторінці таблиці виводиться 100 рядків +ln500Hint| На 1 сторінці таблиці виводиться 500 рядків +ln1000Hint| На 1 сторінці таблиці виводиться 1000 рядків +lbRowStyleEditHint| Стиль редагування даних таблиці - В РЯДКУ +lbRowStyleEditCaption| В рядку +lbTableStyleEditHint| Стиль редагування даних таблиці - У ФОРМІ +lbTableStyleEditCaption| У формі +lnMainPage | Головна сторінка +lnCurrentPage| Поточна сторінка +lnEdit| Редагувати +lnDelete| Видалити +lnAddRecord| Додати запис +lnEditRecord| Редагувати запис +lnDeleteRecord| Видалити запис +lnSave| Зберегти +lnCancel| Відміна +lnYes| Так +lnNo| Ні +lnTextDelMenu| Ви дійсно хочете видалити поточний пункт меню? +lnTextDelRecord| Ви дійсно хочете видалити поточний запис? +lnTextCaptDel| Підтведження видалення +lnImage| Зображення +lnShortDescription| Короткий опис +lnMetaData| Мета-дані +lnTitle| Заголовок +lnDescription| Опис сторінки +lnKeyWords| Ключові слова +lnName| Назва +lnMenu| Меню +lnThemes| Теми \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2adminpanel/res/info.yml b/k2shop/k2shop/app/app/k2/k2adminpanel/res/info.yml new file mode 100644 index 0000000..ce920d8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2adminpanel/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2adminpanel" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2ads/k2ads.php b/k2shop/k2shop/app/app/k2/k2ads/k2ads.php new file mode 100644 index 0000000..49dc02a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2ads/k2ads.php @@ -0,0 +1,50 @@ +auth->isSuperAdmin()){ + $arr = []; + }else{ + $arr = $this->loadResYML('menu'); + } + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2ads'){ + return; + } + + $comp = $k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2ads/k2ads_route.php b/k2shop/k2shop/app/app/k2/k2ads/k2ads_route.php new file mode 100644 index 0000000..d6d064c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2ads/k2ads_route.php @@ -0,0 +1,116 @@ +ins_comp2('k2phpgrid', $this); + $route = $k2->get('r'); + + if($route == 'k2courses'){ + $rez .= $this->showCourseTree(); + } elseif ($route == 'k2ads') { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr2 = $this->loadResYML('k2ads_banners'); + $rez .= $grid->simpleTable($arr2); + } else { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + } + //$this->searchInfoFile(); + return $rez; + } + + + function showTable($route) + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + + + + function showCourseTree() + { + global $k2; + + $arr_tree = $this->loadResYML('k2courses'); + + $report_data = $this->showTable('k2course_tasks'); + + $params=[ + 'name'=>'SysTree', + + 'tree'=>[ + 'select' => 'SELECT courseid, parent_courseid, course_name, teacherid, (select count(*) from k2courses pc where pc.parent_courseid = c.courseid) as ccount FROM k2courses c where (1=1) ', + 'id' => 'courseid', + 'name' => 'course_name', + 'parentid' => 'parent_courseid', + 'tablename' => 'k2courses', + 'caption' => 'Курсы', + 'sortname' => 'course_name', + //'divtable' => 'updSys1', + 'sortorder' => 'asc', + 'detile' => 'k2course_lessons', + //'fields' => $arr_tree['fields'], + ], + + + 'table' => $this->loadResYML('k2course_lessons'), + 'bootom_buttons'=>$report_data, + ]; + $report = $k2->ins_comp('k2tree_frame'); + + $rez = $report->getTreeTable($params); + + return $rez; + } + + + + // Возвращаем контент + function content(){ + global $k2; + + + + $event = $k2->get('event'); + + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2ads/k2ads_show.php b/k2shop/k2shop/app/app/k2/k2ads/k2ads_show.php new file mode 100644 index 0000000..259c9ab --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2ads/k2ads_show.php @@ -0,0 +1,138 @@ + + $(window).scroll(function() { + $(".mobhide").css("top", $(this).scrollTop()); + }); + + +
    +
    + +
    +
    '; + + /** + * получение рекламных компаний + * @global type $k2 + * @return type + */ + function getAds(){ + global $k2; + + $par = []; + $r = $k2->sql->sel("SELECT a.adsid, a.ads_name, a.active + FROM k2ads a + WHERE (1=1) AND a.active=1 ORDER BY a.adsid", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + + $arr_bann = []; + $i = 1; + foreach ($r['data'] as $value) { + + $i++; + } + + $rez = $r['data']; + return $rez; + } + + /** + * получение баннеров + * @global type $k2 + * @param type $adsid + * @return type + */ + function getBanners($adsid = ''){ + global $k2; + + $par = []; + $r = $k2->sql->sel("SELECT b.image, b.linknum, b.param, b.url + FROM k2ads_banners b + WHERE (1=1) AND b.adsid='$adsid' ORDER BY b.linknum", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + + $rez = $r['data']; + return $rez; + } + + /** + * вывод баннеров + * @global type $k2 + * @return type + */ + function showAds(){ + global $k2; + + $rez = $this->ads_tpl; + + $ads = $this->getAds(); + + $cnt = count($ads); + + $rnd = rand(0, $cnt-1); + + $adsid = $ads[$rnd]['adsid']; + + $banners = $this->getBanners($adsid); + + $arr_bann = []; + + $cnt_bn = count($banners)/2; + + $rnd = rand(0, $cnt_bn-1)*2; + + $rez = str_replace('{url}', $banners[$rnd]['url'], $rez); + $rez = str_replace('{image1}', '/'.$banners[$rnd]['image'], $rez); + $rez = str_replace('{image2}', '/'.$banners[$rnd+1]['image'], $rez); + + + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + $rez .= $this->showAds(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2ads/res/k2ads.yml b/k2shop/k2shop/app/app/k2/k2ads/res/k2ads.yml new file mode 100644 index 0000000..ce141fc --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2ads/res/k2ads.yml @@ -0,0 +1,35 @@ +select: SELECT adsid, ads_name, active FROM k2ads +where: +table: k2ads +detile: k2ads_banners +height: 250 +rows: 10 +sortname: adsid +sortorder: asc +caption: Рекламные компании +fields: + versionid: + field: adsid + caption: ID + width: 60 + hidden: true + readonly: true + align: left + required: true + + ads_name: + field: ads_name + caption: Название + width: 250 + readonly: false + hidden: false + align: left + + active: + field: active + caption: Акт. + width: 50 + readonly: false + hidden: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2ads/res/k2ads_banners.yml b/k2shop/k2shop/app/app/k2/k2ads/res/k2ads_banners.yml new file mode 100644 index 0000000..b4c48a7 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2ads/res/k2ads_banners.yml @@ -0,0 +1,55 @@ +select: SELECT bannerid, image, linknum, param, adsid, url FROM k2ads_banners +where: "where (adsid='{masterid}')" +getmaster: true +masterid: adsid +table: k2ads_banners +height: 250 +rows: 10 +sortname: linknum +sortorder: asc +caption: Рекламные баннера +fields: + versionid: + field: bannerid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + linknum: + field: linknum + caption: Связь № + width: 50 + readonly: false + hidden: false + align: right + + param: + field: param + caption: Параметр + width: 100 + readonly: false + hidden: false + align: left + + url: + field: url + caption: Url + width: 150 + readonly: false + hidden: false + align: left + + image: + field: image + caption: Изображение + width: 150 + readonly: false + hidden: false + align: center + params: + height: 100 + type_field: file + upload_dir: public/img \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2ads/res/menu.yml b/k2shop/k2shop/app/app/k2/k2ads/res/menu.yml new file mode 100644 index 0000000..1670a85 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2ads/res/menu.yml @@ -0,0 +1,15 @@ +0: + category: + parent: root + name: k2ads + caption: Реклама + iconclass: fa fa-database + + elements: + k2ads: + name: k2ads + caption: Рекламные компании + url: "?adm=k2ads_route&r=k2ads" + command: + iconclass: fa fa-database + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/k2api.php b/k2shop/k2shop/app/app/k2/k2api/k2api.php new file mode 100644 index 0000000..307955a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/k2api.php @@ -0,0 +1,277 @@ +requestUri = explode('/', trim($_SERVER['REQUEST_URI'],'/')); + $this->requestParams = $_REQUEST; + + $this->objectid = $k2->get('id'); + $this->event = $k2->get('event'); + $this->param = $k2->get('param'); + + //Определение метода запроса + $this->method = $_SERVER['REQUEST_METHOD']; + if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) { + if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') { + $this->method = 'DELETE'; + } else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') { + $this->method = 'PUT'; + } else { + throw new Exception("Unexpected Header"); + } + } + + + } + + /** + * проверка ключа приложения + * @return type + */ + private function checkAppKey($api_key) { + $rez = 0; + if ($api_key) { + $rez = 1; + } + return $rez; + } + + + /** + * проверка прав доступа (логин, пароль) + * @return type + */ + private function checkRights() { + return; + } + + + + /** + * запуск + * @global type $k2 + */ + private function run() { + global $k2; + + + //$check = $this->checkRights(); + //$check = $this->checkAppKey(); + + //Первые 2 элемента массива URI должны быть "api" и название таблицы + if($k2->get('p') !== 'api' || !$k2->get('model')){ + echo 'API Not Found', 404; + } + + //Определение модели + if ($k2->get('model')) { + $this->model = $k2->ins_comp($k2->get('model')); + } + + //Определение действия для обработки + $this->action = $this->getAction(); + echo $this->{$this->action}(); + exit; + } + + /** + * + * @param type $data + * @param type $status + * @return type + */ + protected function response($data, $status = 500) { + header("HTTP/1.1 " . $status . " " . $this->requestStatus($status)); + return json_encode($data, JSON_UNESCAPED_UNICODE); + } + + /** + * статус + * @param type $code + * @return type + */ + private function requestStatus($code) { + $status = array( + 200 => 'OK', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 500 => 'Internal Server Error', + ); + return ($status[$code])?$status[$code]:$status[500]; + } + + /** + * определение действия + * @return string + */ + protected function getAction() + { + $method = $this->method; + switch ($method) { + case 'GET': + if($this->event !== ''){ + if ($this->event == 'getauth'){ + return 'getauth'; + } + if ($this->event == 'chpass'){ + return 'chpass'; + } + return 'updateGet'; + } + if($this->objectid !== ''){ + return 'getOne'; + } else { + return 'getAll'; + } + break; + case 'POST': + return 'create'; + break; + case 'PUT': + return 'update'; + break; + case 'DELETE': + return 'delete'; + break; + default: + return null; + } + } + + + /** + * получение всех записей + * @return type + */ + protected function getAll() + { + $data = $this->model->getall(); + if($data){ + return $this->response($data, 200); + } + return $this->response('Data not found', 404); + } + + /** + * получение 1 записи + * @return type + */ + protected function getOne() + { + $data = $this->model->getone($this->objectid, $this->param); + if($data){ + return $this->response($data, 200); + } + return $this->response('Data not found', 404); + } + + /** + * создание новой записи + * @return type + */ + protected function create() + { + $input = (array) json_decode(file_get_contents('php://input'), TRUE); + $data = $this->model->create($input); + if($data){ + return $this->response('Data saved.', 200); + } + return $this->response("Saving error", 500); + } + + /** + * обновление записи + * @return type + */ + protected function update() + { + $input = (array) json_decode(file_get_contents('php://input'), TRUE); + $data = $this->model->update($input); + if($data){ + return $this->response('Data updated.', 200); + } + return $this->response("Update error", 400); + } + + /** + * обновление записи GET + * @return type + */ + protected function updateGet() + { + $data = $this->model->updateGet($this->objectid, $this->event); + + if($data){ + $rez = ['res'=>1,'info'=>'Data updated.']; + return $this->response($rez, 200); + } + $rez = ['res'=>0,'info'=>"Update error"]; + return $this->response($rez, 400); + } + protected function getauth() + { + $data = $this->model->getauth(); + if($data){ + return $this->response($data, 200); + } + return $this->response('Data not found', 404); + } + protected function chpass() + { + $data = $this->model->chpass(); + if($data){ + return $this->response($data, 200); + } + return $this->response('Data not found', 404); + } + /** + * удаление записи + * @return type + */ + protected function delete() + { + $data = $this->model->delete($id); + if($data){ + return $this->response('Data deleted.', 200); + } + return $this->response("Delete error", 500); + } + + + function content(){ + $this->run(); + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/lng/k2api/en.csv b/k2shop/k2shop/app/app/k2/k2api/lng/k2api/en.csv new file mode 100644 index 0000000..10c4e08 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/lng/k2api/en.csv @@ -0,0 +1,3 @@ +name| value +lnSEOModule| SEO-module +lnProxyServer| Proxy Server \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/lng/k2api/ru.csv b/k2shop/k2shop/app/app/k2/k2api/lng/k2api/ru.csv new file mode 100644 index 0000000..2382cdf --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/lng/k2api/ru.csv @@ -0,0 +1,3 @@ +name|value +lnSEOModule| SEO-модуль +lnProxyServer| Прокси-сервера diff --git a/k2shop/k2shop/app/app/k2/k2api/lng/k2api/ua.csv b/k2shop/k2shop/app/app/k2/k2api/lng/k2api/ua.csv new file mode 100644 index 0000000..7d54f11 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/lng/k2api/ua.csv @@ -0,0 +1,3 @@ +name| value +lnSEOModule| SEO-модуль +lnProxyServer| Проксі-сервера \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/models/k2drivers.php b/k2shop/k2shop/app/app/k2/k2api/models/k2drivers.php new file mode 100644 index 0000000..bf89664 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/models/k2drivers.php @@ -0,0 +1,206 @@ +inc('k2transfermain'); + } + + /** + * Все сервисы + * @global type $k2 + * @return type + */ + public function getauth() + { + global $k2, $trans; + + $phone = trim($k2->get('phone')); + $password = trim($k2->get('password')); + + + return $rez; + } + + public function chpass() + { + global $k2, $trans; + + $phone = trim($k2->get('phone')); + $password = trim($k2->get('password')); + $newpassword = trim($k2->get('newpassword')); + + return $rez; + } + + + /** + * один сервис + * @global type $k2 + * @return type + */ + public function getone($id) + { + global $k2, $trans; + $rez = $trans->getOrders($id); + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function getone2($id = '', $param = '') + { + global $k2; + $id = $k2->get('id'); + + if($param == ''){ + $param = 'transferid'; + } + $par = [$param=>$id]; + + $r = $k2->sql->sel("SELECT * + FROM k2transfer + WHERE (1=1) AND $param=$id ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $input + * @return type + */ + public function create($input) + { + global $k2; + + $user_id = $this->getID(); + $r = $k2->sql->ins_arr( + ['table' => 'k2transfer', + 'fields' => + [ + 'user_id'=> htmlspecialchars(strip_tags($user_id)), + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + ] + ] + ); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['count']; + return $rez; + } + + + /** + * Обновление события сервиса + * @global type $k2 + * @param type $id + * @return type + */ + public function updateGet($id = '', $event) + { + global $k2; + + $time_field = $event.'_time'; + $now = date("Y-m-d H:i:s"); + $r = $k2->sql->upd( + "UPDATE k2transfer + SET + $event=1, + $time_field='$now' + WHERE transferid=:id ", + [ + 'id' => $id + ] + ); + if($r['err']!==''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['count']; + return $rez; + } + + + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function update($id = '', $input) + { + global $k2; + $r = $k2->sql->upd( + "UPDATE k2transfer + SET + name=:name, + login=:login, + email=:email + WHERE user_id=:id ", + [ + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + 'id' => $id + ] + ); + + + if($r['err']!==''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + public function delete($id = '') + { + global $k2; + $rez = $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->del("DELETE FROM k2transfer WHERE user_id=:id", ['id'=>$id] ); + if (trim($r['err'])<>''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $rez = $r['count']; + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/models/k2orders.php b/k2shop/k2shop/app/app/k2/k2api/models/k2orders.php new file mode 100644 index 0000000..a7394cb --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/models/k2orders.php @@ -0,0 +1,163 @@ +inc('k2transfermain'); + //$trans->noTransDenied(); + } + /** + * + * @global type $k2 + * @return type + */ + public function getall() + { + global $k2; + $par = []; + $r = $k2->sql->sel("SELECT * + FROM k2transfer + WHERE (1=1)", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function getone($id = '', $param = '') + { + global $k2; + $id = $k2->get('id'); + + if($param == ''){ + $param = 'id'; + } + $par = [$param=>$id]; + +// $sql = "SELECT * +// FROM k2transfer +// WHERE (1=1) AND $param=$id "; +// echo $sql; +// print_r($par); + $r = $k2->sql->sel("SELECT * + FROM k2transfer + WHERE (1=1) AND $param=$id ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $input + * @return type + */ + public function create($input) + { + global $k2; + + $user_id = $this->getID(); + $r = $k2->sql->ins_arr( + ['table' => 'k2transfer', + 'fields' => + [ + 'user_id'=> htmlspecialchars(strip_tags($user_id)), + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + ] + ] + ); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['count']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function update($id = '', $input) + { + global $k2; + $r = $k2->sql->upd( + "UPDATE k2transfer + SET + name=:name, + login=:login, + email=:email + + WHERE user_id=:id ", + + [ + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + 'id' => $id + ] + ); + + + if($r['err']!==''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + public function delete($id = '') + { + global $k2; + $rez = $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->del("DELETE FROM k2transfer WHERE user_id=:id", ['id'=>$id] ); + if (trim($r['err'])<>''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $rez = $r['count']; + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/models/k2transfers.php b/k2shop/k2shop/app/app/k2/k2api/models/k2transfers.php new file mode 100644 index 0000000..6c6b825 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/models/k2transfers.php @@ -0,0 +1,157 @@ +sql->sel("SELECT * + FROM k2transfer + WHERE (1=1)", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function getone($id = '', $param = '') + { + global $k2; + $id = $k2->get('id'); + + if($param == ''){ + $param = 'id'; + } + $par = [$param=>$id]; + +// $sql = "SELECT * +// FROM k2transfer +// WHERE (1=1) AND $param=$id "; +// echo $sql; +// print_r($par); + $r = $k2->sql->sel("SELECT * + FROM k2transfer + WHERE (1=1) AND $param=$id ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $input + * @return type + */ + public function create($input) + { + global $k2; + + $user_id = $this->getID(); + $r = $k2->sql->ins_arr( + ['table' => 'k2transfer', + 'fields' => + [ + 'user_id'=> htmlspecialchars(strip_tags($user_id)), + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + ] + ] + ); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['count']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function update($id = '', $input) + { + global $k2; + $r = $k2->sql->upd( + "UPDATE k2transfer + SET + name=:name, + login=:login, + email=:email + + WHERE user_id=:id ", + + [ + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + 'id' => $id + ] + ); + + + if($r['err']!==''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + public function delete($id = '') + { + global $k2; + $rez = $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->del("DELETE FROM k2transfer WHERE user_id=:id", ['id'=>$id] ); + if (trim($r['err'])<>''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $rez = $r['count']; + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/models/k2users.php b/k2shop/k2shop/app/app/k2/k2api/models/k2users.php new file mode 100644 index 0000000..db3a32a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/models/k2users.php @@ -0,0 +1,147 @@ +sql->sel("SELECT user_id, name, login, email + FROM k2users + WHERE (1=1)", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function getone($id = '') + { + global $k2; + $id = $k2->get('id'); + $par = ['id'=>$id]; + $r = $k2->sql->sel("SELECT user_id, name, login, email + FROM k2users + WHERE (1=1) AND user_id=:id ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['data']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $input + * @return type + */ + public function create($input) + { + global $k2; + + $user_id = $this->getID(); + $r = $k2->sql->ins_arr( + ['table' => 'k2users', + 'fields' => + [ + 'user_id'=> htmlspecialchars(strip_tags($user_id)), + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + ] + ] + ); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $r['count']; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $id + * @return type + */ + public function update($id = '', $input) + { + global $k2; + $r = $k2->sql->upd( + "UPDATE k2users + SET + name=:name, + login=:login, + email=:email + + WHERE user_id=:id ", + + [ + 'name' => htmlspecialchars(strip_tags($input['name'])), + 'login' => htmlspecialchars(strip_tags($input['login'])), + 'email' => htmlspecialchars(strip_tags($input['email'])), + 'id' => $id + ] + ); + + + if($r['err']!==''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + public function delete($id = '') + { + global $k2; + $rez = $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->del("DELETE FROM k2users WHERE user_id=:id", ['id'=>$id] ); + if (trim($r['err'])<>''){ + $k2->log->err('Ошибка API: '.$r['err']); + return; + } + $rez = $rez = $r['count']; + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2api/res/info.yml b/k2shop/k2shop/app/app/k2/k2api/res/info.yml new file mode 100644 index 0000000..d0defb1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2api/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2seo" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2auth/README.txt b/k2shop/k2shop/app/app/k2/k2auth/README.txt new file mode 100644 index 0000000..e69de29 diff --git a/k2shop/k2shop/app/app/k2/k2auth/k2auth.php b/k2shop/k2shop/app/app/k2/k2auth/k2auth.php new file mode 100644 index 0000000..eeb31de --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/k2auth.php @@ -0,0 +1,1005 @@ +{lnEnter}'; // Не авторизирован + public $temp_auth = '{login}'; // Авторизирован + + + + public $go_auth = ''; + + public $alt_auth = false; + + + public $is_captcha = false; + + public $is_soc = false; + + + //public $temp_auth='Ви авторизовані як: {login} (Вийти)'; // Авторизирован + + public $userid = ''; // id пользователя + public $login = ''; // Логин пользователя + public $isauth = false; // Пометка авторизации + public $username = ''; // Имя пользователя + public $firmid = ''; // id компании + public $email = ''; // email пользователя + public $roleid = ''; // id прав + public $rolename = ''; // Название роли + public $photo = ''; // фото пользователя + public $countryid = ''; // страна + public $cityid = ''; // город + public $phone = ''; // телефон пользователя + public $mode = 'public'; // Режим работы (public - публичная часть, admin - админ-часть, design - дизайнерская часть) + + public $fullusername = ''; + + + public $arrauth = []; + + public $check_email = false; + + public $check_active = false; + + public $go_after = ''; // URL для перехода после авторизации + + public $custom_auth_url = ''; + + public $custom_noauth_url = ''; + + public $offline_users = [ // Пользователи, доступные без подключения к базе данных + /*array('login' => '', 'username' => 'Супер-администратор', 'roleid' => '-1', 'rolename' => 'Супер-администратор', 'userid' => '-1', 'password' => ''), // Супер-администратор + array('login' => '', 'username' => 'Администратор', 'roleid' => '1', 'rolename' => 'Администратор', 'userid' => '-2', 'password' => ''), // Администратор + array('login' => '', 'username' => 'Пользователь', 'roleid' => '100', 'rolename' => 'Пользователь', 'userid' => '-3', 'password' => '') // Пользователь*/ + ]; + + public $rolenames = [ + '-1' => '{lnSuperAdmin}', + '1' => '{lnAdministrator}', + '10' => '{lnModerator}', + '100' => '{lnUser}', + '1000' => '{lnOwner}', + '1500' => '{lnClient}', + ]; + + public $fiz=3; // Физ. особа + public $yur=2; // Юр. особа + public $our=1; // Наша компания + + public $idSuperAdmin='-1'; + + + // Инициализация + function init_obj(){ + global $k2; + $this->LoadCfg('/data/' . $k2->domain() . '/' . $this->getClassName() . '.php'); + $this->loadSession(); + } + + + function getFullUserName(){ + $rez=trim($this->login); + + if (trim($this->username)<>''){ + $rez.='
    ('.trim($this->fullusername).')'; + } + + return $rez; + } + + + + + // Запрет доступа, когда пользователь не авторизирован + function noAuthDenied(){ + global $k2; + + if (!$k2->auth->isAuth()){ + die('Access is denied (Auth) '.$this->go_auth); + } + } + + // Запрет доступа, когда пользователь не авторизирован + function noAdminDenied(){ + global $k2; + + if (!$k2->auth->isAdmin()){ + die('Access is denied (Admin)'); + } + } + + + // Запрет доступа, когда пользователь не авторизирован + function noAuthToAuth(){ + global $k2; + + if (!$k2->auth->isAuth()){ + header('Location: /?p=auth'); + } + } + + + + // Возвращает шаблон авторизации + function tempAuth() + { + $rez = ''; + + if ($this->isAuth()) { + /*if($this->roleid <= 10){ + $rez = $this->Translate($this->temp_auth_moderation); + }else{ + $rez = $this->Translate($this->temp_auth); + }*/ + $rez = $this->Translate($this->temp_auth); + + } else { + $rez = $this->Translate($this->temp_noauth); + $rez = $this->Translate($rez); + } + + return $rez; + } + + + // Проверяет включен ли дизайнерский режим + function isDesignMode() + { + return $this->mode == 'design'; + } + + // Проверяет включен ли публичный режим + function isPublicMode() + { + return $this->mode == 'public'; + } + + // Определение режима работы в админке + function getMode(){ + global $k2; + + $this->mode='public'; + + if ($k2->get('mode')<>''){ + $this->mode = $k2->get('mode'); + } + } + + + + + // Проверяет включен ли режим админ-части + function isAdminMode() + { + return $this->mode == 'admin'; + } + + // Проверяет включен ли режим админ-части + function isAjaxMode() + { + return $this->mode == 'ajax'; + } + + // Печать + function isPrintMode() + { + return $this->mode == 'print'; + } + + + // Установка дизайнерского режима + function setDesignMode() + { + $this->mode = 'design'; + $this->saveSession(); + } + + // Установка публичного режима + function setPublicMode() + { + $this->mode = 'public'; + $this->saveSession(); + } + + // Установка режима админ-части + function setAdminMode() + { + + header('Location: &mode=admin'); + //$this->mode = 'admin'; + //$this->saveSession(); + + } + + + // Является ли пользователь супер-администратором + function isSuperAdmin() + { + return $this->roleid == '-1'; + } + + + // Является ли пользователь администратором + function isAdmin() + { + return $this->roleid == '1' or $this->isSuperAdmin(); + } + + // Является ли пользователь пользователем + function isUser() + { + return $this->roleid == '100' or $this->isAdmin() or $this->isSuperAdmin(); + } + + // Является ли пользователь ФОП + function isFiz() + { + global $k2; + $rez = false; + + $sql = "SELECT typefirmid + FROM k2firms f + + LEFT JOIN k2users c + ON c.firmid = f.firmid + + WHERE c.login = '" . $k2->auth->login . "'"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['typefirmid']; + } + + $rez = $rez==$this->fiz; + + return $rez; + } + + // Является ли пользователь ФОП + function isArtist() + { + global $k2; + $rez = false; + + $sql = "SELECT k2kartauthor + FROM k2firms f + + LEFT JOIN k2users c + ON c.firmid = f.firmid + + WHERE c.login = '" . $k2->auth->login . "'"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['typefirmid']; + } + + $rez = $rez==$this->fiz; + + return $rez; + } + + + // Авторизирован ли пользователь + function isAuth() + { + return $this->isauth; + } + + + // Восстановление массива из свойств объекта + function loadArr() + { + $this->getMode(); + + //var_dump($this->arrauth); + + if (count($this->arrauth) > 0) { + $this->userid = $this->arrauth['userid']; + $this->login = $this->arrauth['login']; + $this->isauth = $this->arrauth['isauth']; + $this->roleid = $this->arrauth['roleid']; + $this->rolename = $this->arrauth['rolename']; + + + //$this->mode = $this->arrauth['mode']; + $this->fullusername = $this->arrauth['fullusername']; + + $this->username = $this->arrauth['username']; + $this->firmid = $this->arrauth['firmid']; + $this->email = $this->arrauth['email']; + $this->countryid = $this->arrauth['countryid']; + $this->cityid = $this->arrauth['cityid']; + $this->photo = $this->arrauth['photo']; + $this->phone = $this->arrauth['phone']; + + } else { + $this->clear(); + } + + } + + + function isActiveUserid($userid) + { + global $k2; + $sql = "SELECT p.active FROM k2users p WHERE (p.user_id='$userid') limit 1"; + $res = 0; + try{ + foreach ($k2->db->query($sql) as $row) { + $res = $row['active']; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $res; + } + + + // Сохранение объекта из массива + function saveArr() + { + $this->arrauth = + [ + 'userid' => $this->userid, + 'login' => $this->login, + 'isauth' => $this->isauth, + 'roleid' => $this->roleid, + 'rolename' => $this->Translate($this->rolename), + 'mode' => $this->mode, + 'username' => $this->username, + 'fullusername' => $this->fullusername, + 'firmid' => $this->firmid, + 'email' => $this->email, + 'countryid' => $this->countryid, + 'cityid' => $this->cityid, + 'photo' => $this->photo, + 'phone' => $this->phone + ]; + } + + // Сохранение сессии пользователя + function saveSession() + { + + global $k2; + + $this->saveArr(); + $k2->session['k2auth'] = $this->arrauth; + + } + + + // Восстановление авторизации пользователя + function loadSession() + { + + global $k2; + + if (isset($k2->session['k2auth'])) { + + + $this->arrauth = $k2->session['k2auth']; + $this->loadArr(); + } + } + + // Отмена авторизации + function unLogin() + { + + global $k2; + + $this->clear(); + $this->saveSession(); + $k2->GoBack(); + + } + + // Очистка параметров логина + function clear() + { + $this->userid = ''; + $this->login = ''; + $this->isauth = false; + $this->roleid = ''; + $this->rolename = ''; + $this->mode = 'public'; + $this->username = ''; + $this->fullusername = ''; + $this->firmid = ''; + $this->email = ''; + $this->countryid = ''; + $this->cityid = ''; + $this->photo = ''; + $this->phone = ''; + $this->arrauth = []; + + $this->saveSession(); + } + + + // Проверка xml-авторизации + function checkXMLPassword($login, $password) + { + + $rez = 0; + + foreach ($this->offline_users as $user) { + + + if ((trim($login) == $user['login']) and (trim($password) == $user['password'])) { + + $this->login = $user['login']; + $this->username = $user['username']; + $this->isauth = true; + $this->roleid = $user['roleid']; + $this->rolename = $user['rolename']; + $this->userid = $user['userid']; + $this->firmid = $user['firmid']; + $this->email = $user['email']; + $rez = 1; + break; + + } else { + $this->clear(); + $rez = 0; + } + + } + + + return $rez; + + } + + + // Проверка на существование логина + function isLoginExists($login) + { + global $k2; + + $rez = ''; + + $sql = "select user_id as id from k2users where (login='$login')"; + + + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row["id"]; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $rez; + } + + // Проверка на существование email + function isEmailExists($email) + { + global $k2; + + $rez = ''; + + $sql = "select user_id as id from k2users where (email='$email')"; + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row["id"]; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + + + return $rez; + } + + // Проверка на существование ЕДРПОУ + function isEdrpouExists($edrpou) + { + global $k2; + + $rez = ''; + $sql = "SELECT firmid FROM k2firms WHERE (edrpou='$edrpou')"; + + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row["firmid"]; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $rez; + } + + + + // Получение название роли + function getRoleName($roleid){ + global $k2; + $rez=''; + + $sql = "SELECT rolename FROM k2roles WHERE (roleid='$roleid')"; + + + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row["rolename"]; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $rez; + + } + + /** + * проверка ассоциации с соц сетью + * @global type $k2 + * @param type $userid + * @param type $soc_name + * @return type + */ + function checkActiveSoc($userid, $soc_name) + { + global $k2; + + $rez = 0; + + $sql = "SELECT active FROM k2users_social WHERE (user_id='$userid') AND (soc_name = '$soc_name')"; + + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row["active"]; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $rez; + } + + /** + * проверка через социальные сети + * @global type $k2 + * @param type $login + * @return int + */ + function checkDbSocial($login, $soc_name) + { + global $k2; + + + $sql = "SELECT p.user_id as userid, p.login, p.name, p.lastname, p.middlename, p.roleid, p.firmid, p.email, p.active FROM k2users p WHERE (p.login='$login' OR p.email='$login') limit 1"; + + $res = 0; + + try{ + foreach ($k2->db->query($sql) as $row) { + + if($this->is_soc){ + $checksoc = $this->checkActiveSoc($row['userid'], $soc_name); + if ($checksoc){ + + } + } + + $this->userid = $row['userid']; + $this->login = $row['login']; + $this->isauth = true; + $this->roleid = $row['roleid']; + + $this->rolename = /*$this->rolenames[$this->roleid]*/ $this->getRoleName($this->roleid); + + $this->fullusername = $row['lastname'].' '.$row['name'].' '.$row['middlename']; + $this->mode = 'public'; + $this->username = $row['name']; + $this->firmid = $row['firmid']; + $this->email = $row['email']; + //if($row['active']==1){ + $res = 1; + //} + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + + $check_isusrsoc = $this->checkIsUserSoc($soc_name); + //print_r($check_isusrsoc); + if (!$check_isusrsoc) { + //$this->insSocial($soc_name, $this->userid); + } + + $this->saveSession(); + return $res; + } + + /** + * user_id по email + * @global type $k2 + * @param type $email + * @return type + */ + function getUserId ($email = '') + { + global $k2; + $rez = ''; + $sql = "SELECT p.user_id FROM k2users p WHERE (p.email='$email') limit 1"; + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row['user_id']; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $rez; + } + + /** + * проверка наличия записи в таблице соц сетей + * @global type $k2 + * @param type $soc_name + * @return type + */ + function checkIsUserSoc($soc_name, $email = '') + { + global $k2; + $rez = 0; + + $user_id = $this->userid; + + if ($email !== '') { + $user_id = $this->getUserId($email); + + //если user_id не найден + if ($user_id == '') { + return $rez; + } else { + //сохраняем в сесии данные из соц сетей + $k2->session['k2social'] = [ + 'user_id'=>$user_id, + 'email'=>$email, + 'soc_name'=>$soc_name + ]; + } + + } + + $sql="select count(users_socid) as cnt from k2users_social where (soc_name = '$soc_name' and user_id = '$user_id')"; + + try{ + foreach ($k2->db->query($sql) as $row) { + $rez = $row['cnt']; + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $rez; + } + + + /** + * Генерирует случайную строку для активации через email + * @return type string + */ + function generatePassword($length = 15) { + + $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789'; + $numChars = strlen($chars); + $string = ''; + for ($i = 0; $i < $length; $i++) { + $string .= substr($chars, rand(1, $numChars) - 1, 1); + } + return $string; + } + + + /** + * Отправляет письмо со ссылкой для активации учетной записи + + * @param type $name Имя прльзователя + * @param type $email Пароль + * @param type $hash Сгенерированный хеш + * @return string + */ + function sendRegMail($name, $email, $hash) { + global $k2; + + $rez = ''; + + $mailto = $email; + $subj = 'Реєстрація на аукціоні зернових'; + $mess = "Доброго дня, " . $name . "\n" + . "Для завершення реєстрації перейдіть по посиланню: " + . "http://".$_SERVER['HTTP_HOST']."/?p=auth&hash=" . $hash . "\n" + . "Проігноруйте це повідомлення, якщо воно попало до Вас випадково"; + + $k2->mail->mail_from = 'www'; + + $k2->mail->sendMail($mailto, $subj, $mess); + + return $rez; + } + + + /** + * проверка прохождения каптчи + * @global type $k2 + * @return int + */ + function checkCaptcha() + { + global $k2; + if (isset($_POST['g-recaptcha-response'])){ + $url_to_google_api = "//www.google.com/recaptcha/api/siteverify"; + $secret_key = '6LcILHsUAAAAAISafhO_3UK__Qypkh_F98j1oa81'; + $query = $url_to_google_api . '?secret=' . $secret_key . '&response=' . $_POST['g-recaptcha-response'] . '&remoteip=' . $_SERVER['REMOTE_ADDR']; + $data = json_decode(file_get_contents($query)); + if ($data->success) { + $rez = 1; + } else { + $rez = 0; + } + }else{ + $rez = 0; + } + $rez = 1; + return $rez; + } + + /** + * связка пользователя с соц сетью + * @global type $k2 + * @param type $soc_name + * @return type + */ + function insSocial($soc_name, $user_id) + { + global $k2; + $rez = ''; + $r = $k2->sql->ins_arr( + ['table' => 'k2users_social', + 'fields' => [ + 'users_socid'=>$k2->sys->getGUID(), + 'user_id'=>$user_id, + 'soc_name'=>$soc_name, + 'active'=>1 + ] + ] + ); + + //print_r($r); + + unset($k2->session['k2social']); + if($r['err']!==''){ + $rez['err'] = $rez['err']; + return $rez; + } + return $rez; + } + + //подтверждение email + function confirmEmail($hash) + { + global $k2; + $sql = "UPDATE k2users SET prover = 1 WHERE hash='" .$hash. "' "; + $rez = 0; + try{ + //echo 'user='.$sql."\n"; + $k2->db->exec($sql); + $rez = 1; + }catch(PDOException $e) { + echo $this->Translate("Ошибка ").": $sql\n"; + $rez = 0; + echo $e->getMessage(); + } + + return $rez; + } + + function checkHashEmail($hash) + { + global $k2; + $sql = "SELECT * FROM k2users WHERE hash='" .$hash. "' "; + $arr = []; + try{ + foreach ($k2->db->query($sql) as $row) { + array_push($arr, $row); + } + + + }catch(PDOException $e) { + echo $this->Translate("Ошибка ").": $sql\n"; + $arr = []; + echo $e->getMessage(); + } + + return $arr; + } + + function isActive($login, $password) + { + global $k2; + $sql = "SELECT p.active FROM k2users p WHERE (p.login='$login' OR p.email='$login')and(p.password='" . md5($password) . "') limit 1"; + + $res = 0; + + try{ + foreach ($k2->db->query($sql) as $row) { + $res = $row['active']; + + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + return $res; + } + + // Проверка авторизации при работе с базой данных + function checkDBPassword($login, $password) + { + global $k2; + + //echo "Проверка checkDBPassword
    "; + $and = ''; + + if($this->check_active){ + $and .= ' and (active = 1)'; + } + + if ($this->check_email) { + $and .= ' and (prover = 1)'; + } + + $sql = "SELECT p.user_id as userid, + p.login, + p.name, + p.lastname, + p.middlename, + p.roleid, + p.firmid, + p.email, + p.countryid, + p.cityid, + p.photo, + p.phone, + p.active + FROM k2users p + WHERE (p.login='$login' OR p.email='$login')and(p.password='" . md5($password) . "') ".$and." limit 1"; + + $res = 0; + + try{ + + foreach ($k2->db->query($sql) as $row) { + + $this->userid = $row['userid']; + $this->login = $row['login']; + $this->isauth = true; + $this->roleid = $row['roleid']; + + $this->rolename = /*$this->rolenames[$this->roleid]*/ $this->getRoleName($this->roleid); + + $this->fullusername = $row['lastname'].' '.$row['name'].' '.$row['middlename']; + $this->mode = 'public'; + $this->username = $row['name']; + $this->firmid = $row['firmid']; + $this->email = $row['email']; + $this->countryid = $row['countryid']; + $this->cityid = $row['cityid']; + $this->photo = $row['photo']; + $this->phone = $row['phone']; + //if($row['active']==1){ + $res = 1; + //} + } + } catch (Exception $e) { + echo "Ошибка: ".$e->getMessage()."\n"; + } + + return $res; + + + } + + // Проверка пароля + function checkPassword($login, $password) + { + global $k2; + + $rez = false; + + // Если пустой пароль или логин - выходим + if ((trim($login) <> '') or (trim($password) <> '')) { + + // Проверяем пароль и имя пользователя в зависимости от нашего подключения + $rez = $this->checkXMLPassword($login, $password); + + if (($rez == 0) and ($k2->connected)) { + $rez = $this->checkDBPassword($login, $password); + } + + + $this->saveSession(); + + $this->logAuth($login, $rez); + if($rez){ + $this->lastDateAuth($login); + } + } + + return $rez; + } + + /** + * Последняя авторизация + * @global type $k2 + * @param type $login + */ + function lastDateAuth($login){ + global $k2; + $last_datetime = date('Y-m-d H:i:s'); + $r = $k2->sql->upd( + "UPDATE k2users + SET + last_datetime=:last_datetime + + WHERE login=:login OR email=:login ", + [ + 'last_datetime'=>$last_datetime,'login'=>$login + ] + ); + } + + /** + * лог авторизации + * @global type $k2 + * @param type $login + * @param type $arg + */ + function logAuth($login, $arg){ + global $k2; + $k2->addLog('Login-'.$login.' Попытка авторизации - '.$arg.' ', 'AUTH.log'); + } + + // Обработка команд + public function oper(){ + + global $k2; + $rez=''; + + $comm=$k2->get('comp'); + $c=$k2->get('c'); + + $s=$k2->getComp($comm); + if ($s[0]<>'k2auth'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>''){ + $rez.=$comp->content(); + + return $rez; + } + } + // Вывод контента + function content() + { + $rez=12; + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/k2auth_alt.php b/k2shop/k2shop/app/app/k2/k2auth/k2auth_alt.php new file mode 100644 index 0000000..826a7d8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/k2auth_alt.php @@ -0,0 +1,174 @@ + '{lnSuperAdmin}', + '1' => '{lnAdministrator}', + '10' => '{lnModerator}', + '100' => '{lnUser}', + '1000' => '{lnOwner}', + '1500' => '{lnClient}', + ]; + + + // Проверка авторизации при работе с базой данных + function checkDBPassword($login, $password) + { + + global $k2; + + //echo "Проверка checkDBPassword
    "; + + $sql = "SELECT * FROM users p WHERE (p.login='$login')and(p.password='".$password."') limit 1"; + + $res = 0; + + foreach ($k2->db->query($sql) as $row) { + + $this->userid = $row['id']; + $this->login = $row['login']; + $this->isauth = true; + $this->roleid = 1500; + $this->rolename = $this->rolenames[$this->roleid]; + $this->mode = 'public'; + $this->username = $row['login']; + //$this->firmid = $row['firmid']; + + $res = 1; + } + print_r($row['login']); + return $res; + + + } + + + // Сохранение объекта из массива + function saveArr() + { + $this->arrauth = array( + 'userid' => $this->userid, + 'login' => $this->login, + 'isauth' => $this->isauth, + 'roleid' => $this->roleid, + 'rolename' => $this->Translate($this->rolename), + 'mode' => $this->mode, + 'username' => $this->username, + // 'firmid' => $this->firmid + ); + } + + // Сохранение сессии пользователя + function saveSession() + { + + global $k2; + + $this->saveArr(); + $k2->session['k2auth'] = $this->arrauth; + + } + + + + + // Проверка пароля + function checkPassword($login, $password) + { + + global $k2; + + $rez = false; + + // Если пустой пароль или логин - выходим + if ((trim($login) <> '') or (trim($password) <> '')) { + + + + + if ($k2->connected) { + $rez = $this->checkDBPassword($login, $password); + $this->saveArr(); + + } + + + $this->saveSession(); + + header('Location: /?comp=k2games&c=all'); + } + + return $rez; + } + + + // Вывод контента + function content() + { + + global $k2; + + if ($k2->post('Login')<>''){ + $a=$this->checkPassword($k2->post('login'), $k2->post('password')); + + + if (($a)&&(trim($k2->auth->go_after)<>'')){ + header ('Location: '.$k2->auth->go_after); + }else{ + $k2->GoBack(); + } + } + + + if ($k2->post('clear')<>''){ + $k2->auth->unLogin(); + } + if ($k2->auth->isAuth()){ + + // Если включен автоматический переход на личный кабинет, то переходим автоматически на него + if (trim($k2->auth->go_after)<>''){ + header ('Location: '.$k2->auth->go_after); + } + + } + + return $rez; + } + + + + // Вывод на экран + function show() + { + echo $this->content(); + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/k2auth_form.php b/k2shop/k2shop/app/app/k2/k2auth/k2auth_form.php new file mode 100644 index 0000000..6f64832 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/k2auth_form.php @@ -0,0 +1,323 @@ + +
    + + +
    +
    + {lnAuthorization} + + + + + + + + + + + + + +
    {lnLogin}:
    {lnPassword}:
    +
    +    {lnRememberPassword} +
    +
    + + +
    +
    + + +
    + + '; + + public $socAssocForm = ''; + public $orrow = ''; + public $info1 = ''; + public $divcaptcha = ''; + public $unLoginForm='
    +
    + + +
    +
    + {lnUserIsAuthorized} + + + + + + + + +
    {lnYouAreLogged}.
    + {lnLogin}: {login}
    + {lnName}: {username}
    + {lnRights}: {rolename}
    +
    + +
    +
    + + +
    +
    + + +
    +
    + '; + public $err='

    {lnErrAuth}

    '; + + public $captchaerr='

    {lnCaptchaErr}

    '; + + public $activerr='

    Невірний дані або Ваш акаунт не активовано, зверніться до відповідної філії

    '; + + public $inb1 = ''; + + public $inb2 = ''; + + public $congrat_reg = ''; + + // {render_auth} + + + // Форма авторизации + function authForm(){ + + } + + + function socAuth() + { + global $k2; + $rez = ''; + + $check_isusrsoc = 1; + + $result = file_get_contents('//ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $_SERVER['HTTP_HOST']); + $user = json_decode($result, true); + + //print_r($user); + //$user['network'] - соц. сеть, через которую авторизовался пользователь + //$user['identity'] - уникальная строка определяющая конкретного пользователя соц. сети + //$user['first_name'] - имя пользователя + //$user['last_name'] - фамилия пользователя + + + if (!$user['error']) { + if ($user['verified_email'] == '1'){ + //проверка на наличие ассоциации с соцсетью + $check_isusrsoc = $k2->auth->checkIsUserSoc($user['network'], $user['email']); + if ($check_isusrsoc) { + //авторизация через соц сеть + $a = $k2->auth->checkDbSocial($user['email'], $user['network']); + } + $rez = $user['network']; + } + } + return $rez; + } + + + // Вывод контента + function content() + { + global $k2; + + + $error = ''; + + $socauth = 1; + + // + if ($k2->auth->is_soc) { + $socauth = $this->socAuth(); + if ($socauth == '') { + $rez = $this->err; + } else { + if (($k2->auth->isAuth())&&(trim($k2->auth->go_after)<>'')){ + header ('Location: '.$k2->auth->go_after); + } + } + } + + + + if ($k2->post('Login') <> ''){ + $chekcaptcha = 1; + if ($k2->auth->is_captcha){ + $chekcaptcha = $k2->auth->checkCaptcha(); + if ($chekcaptcha !== 1) { + $error = $this->captchaerr; + } + } + unset($k2->session['k2social']); + if ($chekcaptcha){ + $is_active = 1; + + $a = $k2->auth->checkPassword($k2->post('Login'), $k2->post('Password')); + + if ($k2->auth->check_active && $a == 0){ + $is_active = $k2->auth->isActive($k2->post('Login'), $k2->post('Password')); + //print_r($is_active); + if ($is_active !== 1) { + $error = $this->activerr; + } + } + if ($is_active) { + + + if ($a !== 1) { + if ($k2->get('temp') == 'ajax'){ + $error = $this->err; + $error = $this->Translate($error); + $arr_rez = [$error, 0]; + $json_rez = json_encode($arr_rez); + return $json_rez; + } + $error = $this->err; + } + + if ($a){ + if ($k2->get('temp') == 'ajax'){ + $arr_rez = [$error, 1]; + $json_rez = json_encode($arr_rez); + return $json_rez; + } + } + if (($a)&&(trim($k2->auth->go_after)<>'')){ + header ('Location: '.$k2->auth->go_after); + } + } + + } + } + + + if ($k2->post('clear') <> ''){ + $k2->auth->unLogin(); + } else { + + } + + //require_once $k2->kool->KoolControlsFolderAbs."/KoolForm/koolform.php"; + + //$myform_manager = new KoolForm("myform"); + //$myform_manager->scriptFolder = $k2->kool->KoolControlsFolder."/KoolForm"; + + + //$myform_manager->DecorationEnabled = true; + //$myform_manager->styleFolder = $k2->kool->style_form(); + + //$myform_manager->Init(); + + + if ($k2->auth->isAuth()){ + + // Если включен автоматический переход на личный кабинет, то переходим автоматически на него + if (trim($k2->auth->go_after)<>''){ + header ('Location: '.$k2->auth->go_after); + } + + $form = $this->unLoginForm; + + $form = str_replace('{login}', $k2->auth->login, $form); + $form = str_replace('{username}', $k2->auth->username, $form); + $form = str_replace('{rolename}', $k2->auth->rolename, $form); + + } else { + + if (trim($k2->auth->custom_auth_url)<>''){ + header ('Location: '.$k2->auth->custom_auth_url); + } + + //если подключны соц сети + if ($k2->auth->is_soc) { + if ($socauth !== ''){ + $form = $this->socAssocForm; + + $form = str_replace('{soc_name}', $socauth, $form); + } else { + $form = $this->LoginForm; + if ($k2->session['k2social']){ + + //связка пользователя с соц сетью + $k2->auth->insSocial($k2->session['k2social']['soc_name'], $k2->session['k2social']['user_id']); + + $form = str_replace('{info1}', '', $form); + $form = str_replace('{orrow}', '', $form); + $form = str_replace('{congrat_reg}', '', $form); + } elseif($k2->get('hash')) { + $form = str_replace('{lnEnterCabinet}', $this->Translate('{lnFinishReg}'), $form); + $form = str_replace('{congrat_reg}', $this->congrat_reg, $form); + $form = str_replace('{info1}', '', $form); + $form = str_replace('{orrow}', '', $form); + } else { + $form = str_replace('{info1}', $this->info1, $form); + $form = str_replace('{orrow}', $this->orrow, $form); + $form = str_replace('{congrat_reg}', '', $form); + } + } + } else { + $form = $this->LoginForm; + } + if ($k2->auth->is_captcha){ + $k2->site->addJS('api.js', 'https://www.google.com/recaptcha/api.js'); + + $form = str_replace('{divcaptcha}', $this->divcaptcha, $form); + } + + } + + + //$btn = $myform_manager->Render(); + + // Отключил, т.к. только мешает и от Koolphp нужно отказываться... + //$form=str_ireplace('{render_auth}', $btn, $form); + + + $form = $this->Translate($form); + + $rez = $error; + $rez = str_replace('{lnErrAuth}', $this->Translate('{lnErrAuth}'), $rez); + $rez = str_replace('{lnCaptchaErr}', $this->Translate('{lnCaptchaErr}'), $rez); + $rez = str_replace('{lnActiveErr}', $this->Translate('{lnActiveErr}'), $rez); + $rez .= $form; + + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/k2auth_regform.php b/k2shop/k2shop/app/app/k2/k2auth/k2auth_regform.php new file mode 100644 index 0000000..6d713a3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/k2auth_regform.php @@ -0,0 +1,1034 @@ +{lnCongratulations}!
    {lnSuccessfullySigned}!
    "; // Сообщение о регистрации + + public $remember_form_msg = "
    {lnLinkPasswordRecovery} {login} {lnMailed}!
    "; // Сообщение о востановлении пароля + public $remember_form_msg_err = "
    {lnOfLogin} {login} {lnNotFound}!
    "; // Сообщение ошибки востановления пароля + + + public $reg_subj='{lnUserRegistration} {domain}'; // Заголовок почтоового сообщения о регистрации + public $mail_registered='{lnHello}, {name}, + + {lnThankYou} http://{domain} + + {lnCongratulationsRegistered} {domain}! + {lnYourCredentials}: + + {lnLogin} - {login} + {lnPassword} - {password}'; // Сообщение, которое выдается при регистрации + + + + // Форма "вспомнить пароль" + public $remember_form=' +
    + + +
    + {lnRememberPassword} + + + + + + +
    + {lnEnterLogin}: + + + +
    +
    + +
    + +
    + +
    + + '; + + // {postback} + + + // Заголовок в письме восстановления пароля + public $remember_subject='{lnPasswordReset} {login} {lnByAddress} http://{domain}'; + + // Письмо, которое высылается с ссылкой на восстановление пароля + public $remember_hash_mail=' + {lnHello}, {login}! + + {lnUsedPasswordRecovery} {lnByAddress} {domain} + + {lnPleaseGo} {url_remember}, {lnFinishProcedure} + + + {lnIfNotRequest}. + '; + + public $new_password='{lnPasswordToLogin} {login} {lnRestore}'; + + public $new_password_mess=' + {lnHello}, {login}! + + {lnYourPasswordSite} {domain} {lnChanged}. + + {lnNewPassword}: {password}'; + + + public $reg_form=' + + + + +
    + + + + +
    + Регистрация пользователя + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + {lnLogin}*: + + + +
    + Ф.И.О.*: + + +
    + {lnPhone}: + + + + +
    + {lnEmail}*: + + + + +
    + {lnPassword}*: + + + +
    + {lnRepeatPassword}*: + + +
    + Права*: + + {role} +
    +
    + +
    + + +
    + + +
    + + '; + public $err = ''; + public $captchaerr='

    Вы не прошли валидацию reCaptcha!

    '; + + // Проверяем есть ли пользователь в базе + function checkUser($username){ + global $k2; + $res=''; + + //$sql = "SELECT p.login as login FROM k2users p WHERE (p.login='$username') limit 1"; + + $r=$k2->sql->sel('SELECT p.login as login FROM k2users p WHERE (p.login=:login) OR (p.email=:login) LIMIT 1', ['login'=>$username]); + + //print_r($r); + + foreach ($r['data'] as $row) { + $res=$row['login']; + } + + return $res; + } + + function createSadminRole() + { + global $k2; + $res=''; + $r = $k2->sql->ins_arr( + ['table' => 'k2roles', + 'fields' => [ + 'roleid'=>'-1', + 'active'=>1, + 'pubrole'=>0, + 'rolename'=>'Super Admin', + 'order_roles'=>'1' + ] + ] + ); + if (trim($r['err'])<>''){ + $k2->log->err('Error Insert Sadmin: '.$r['err']); + $rez = $r['err']; + return $rez; + } + + return $res; + } + + + + // Вставляем информацию о пользователе + function insUser($arr, $roleid = 100, $firmid = null){ + global $k2; + + $res=''; + $login = $arr['login'] ? $arr['login'] : null; + $fio = $arr['fio'] ? $arr['fio'] : null; + $roleid = $arr['role'] ? $arr['role'] : null; + $email = $arr['email'] ? $arr['email'] : null; + $phone = $arr['phone'] ? $arr['phone'] : null; + $hash = $arr['hash'] ? $arr['hash'] : null; + $sexid = $arr['sexid'] ? $arr['sexid'] : null; +// $sql = "INSERT INTO k2users (user_id, name, login, password, email, phone, roleid, firmid) VALUES ('".$k2->sys->getGUID()."','" +// .$fio."','".$login."','".md5($arr['password'])."','".$email."','".$phone."', '". $roleid ."', '". $firmid ."')"; +// +// try{ +// $k2->db->exec($sql); +// }catch(PDOException $e) { +// $res=$e->getMessage(); +// echo "Error Insert User: $sql\n"; +// echo $e->getMessage(); +// } + + $r = $k2->sql->ins_arr( + ['table' => 'k2users', + 'fields' => [ + 'user_id'=>$k2->sys->getGUID(), + 'name'=>$fio, + 'login'=>$login, + 'password'=>md5($arr['password']), + 'passwd_decode'=>$arr['password'], + 'email'=>$email, + 'phone'=>$phone, + 'roleid'=>$roleid, + 'firmid'=>$firmid, + 'hash'=>$hash, + 'sexid'=>$sexid, + 'create_datetime'=>'{now}' + ] + ] + ); + if (trim($r['err'])<>''){ + $k2->log->err('Error Insert User: '.$r['err']); + $rez = $r['err']; + return $rez; + } + + return $res; + + } + + + // Обновление информации о пользователе + function updUser($arr){ + + global $k2; + + $res=''; + + // Изменяем текущего пользователя + $login=$k2->auth->login; + + // Изменяем пароль только в том случае, если он указан + $passwdfield=''; + if (trim($arr['password'])<>''){ + //$passwdfield="password='".md5(trim($arr['password']))."', "; + $passwdfield = "password=:password,"; + } + + // Другие переменные + $phone=$arr['phone']; + $email=$arr['email']; + $countryid = $arr['countryid']; + $cityid = $arr['cityid']; + + +// $sql = "UPDATE k2users SET $passwdfield phone='$phone', email='$email' WHERE (login='$login')"; +// +// try{ +// $res=$k2->db->exec($sql); +// }catch(PDOException $e) { +// echo "Error Update User: $sql\n"; +// echo $e->getMessage(); +// } + + $r = $k2->sql->upd( + "UPDATE k2users + SET + $passwdfield + phone=:phone, + email=:email + + WHERE login =:login ", + [ + 'phone' => $phone, + 'email' => $email, + 'login'=>$login, + 'password'=>md5(trim($arr['password'])) + ] + ); + if($r['err']!==''){ + $k2->log->err('Error Update User: '.$r['err']); + $rez = $r['err']; + return $rez; + } + + + return $res; + + } + + + + // Замены сообщений по маскам + function replTempl($strinp, $arr){ + + global $k2; + + $rez=$strinp; + + $rez=str_replace('{domain}', $k2->domain(), $rez); + $rez=str_replace('{name}', $arr['login'], $rez); + $rez=str_replace('{login}', $arr['login'], $rez); + $rez=str_replace('{password}', $arr['password'], $rez); + + + return $rez; + } + + + // Отправка почтового сообщения + function sendMail($arr){ + + global $k2; + + $subj=$this->reg_subj; + $mess=$this->mail_registered; + + // Заменяем маски в сообщении + $subj=$this->replTempl($subj, $arr); + $mess=$this->replTempl($mess, $arr); + + + // Отправляем сообщение по электронной почте + $k2->mail->sendMail($arr['email'], $subj, $mess); + + + } + + + + // Автоматическая авторизация пользователя + function auth($arr){ + + global $k2; + + $k2->auth->userid=0; // id пока не используется, поэтому. пока не заморачиваюсь + $k2->auth->login=$arr['login']; + $k2->auth->isauth=true; + $k2->auth->roleid='100'; + $k2->auth->rolename='Пользователь'; + $k2->auth->mode='public'; + $k2->auth->username=$arr['login']; + + $k2->auth->saveSession(); + + } + + + // Отправляет регистрационные данные + function sendReg(){ + + global $k2; + + $rez=''; + + $login=trim($k2->post('txtName')); + + $arr= ['login' => $login, + 'phone' => trim($k2->post('txtPhone')), + 'email' => trim($k2->post('txtEmail')), + 'password' => trim($k2->post('txtPassword')) + ]; + + + if ($this->change){ + $this->updUser($arr); + }else{ + if ($this->checkUser($login) == ''){ + $this->insUser($arr); + + // Автоматическая авторизация пользователя + $this->auth($arr); + + // Отправляем уведомление о регистрации по почте + $this->sendMail($arr); + + //$rez="
    Вы успешно зарегистрированы!
    "; + $k2->GoBack('/?p=registered'); + }else{ + $rez="
    Такой пользователь уже есть в сиcтеме!
    "; + } + } + + return $rez; + + } + + + + // Получить информацию о пользователе + function getUserInfo($username){ + + global $k2; + + //$sql = "SELECT p.user_id as userid, p.login, p.name, p.roleid, p.email, p.phone, p.remember_hash FROM k2users p WHERE (p.login='$username') limit 1"; + + $res = []; + + $r=$k2->sql->sel('SELECT p.user_id as userid, p.login, p.name, p.roleid, p.email, p.phone, p.remember_hash + FROM k2users p + WHERE (p.login=:login) OR (p.email=:login) LIMIT 1', + ['login'=>$username]); + + foreach ($r['data'] as $row) { + $res=$row; + } + + return $res; + } + + + + + // Проверка заполненности полей + function check_fill() + { + global $k2; + + $this->err = ''; + $rez = true; + + if ($k2->post("txtName") == '') { + $this->err .= '
    * Необходимо заполнить Логин.
    '; + $rez = false; + } + + if ($k2->post("txtFIO") == '') { + $this->err .= '
    * Необходимо заполнить ФИО.
    '; + $rez = false; + } + + + if ($k2->post("txtEmail") == '') { + $this->err .= '
    * Необходимо заполнить EMAIL.
    '; + $rez = false; + } + + if ($k2->post("txtPassword") == '') { + $this->err .= '
    * Необходимо заполнить ПАРОЛЬ.
    '; + $rez = false; + } + + if ($k2->post("txtPassword2") == '') { + $this->err .= '
    * Необходимо заполнить ПОВТОРИТЬ ПАРОЛЬ.
    '; + $rez = false; + } + + // Проверка одинаковости пароля + if ($k2->post("txtPassword") <> $k2->post("txtPassword2")) { + $this->err .= '
    ** Пароли должны СОВПАДАТЬ!
    '; + $rez = false; + } + + // Проверка существования логина + if ($k2->auth->isLoginExists($k2->post("login")) <> '') { + $this->err .= '
    *** Такой логин уже есть в базе данных! Укажите ДРУГОЙ логин!
    '; + $rez = false; + } + // Проверка существования логина + if ($k2->auth->isLoginExists($k2->post("txtName")) <> '') { + $this->err .= '
    *** Такой логин уже есть в базе данных! Укажите ДРУГОЙ логин!
    '; + $rez = false; + } + // Проверка существования логина + if ($k2->auth->isEmailExists($k2->post("txtEmail")) <> '') { + $this->err .= '
    *** Такой email уже есть в базе данных! Укажите ДРУГОЙ email!
    '; + $rez = false; + } + + + return $rez; + } + + + + // Выводит форму регистрации + function showRegForm(){ + global $k2; + $rez=''; + + if ($k2->post("btnsubmit")){ + $userinfo=$this->getUserInfo($username); + }else{ + $userinfo=array(); + } + + // Формирую переменные + $login=isset($userinfo['login']) ? $userinfo['login'] : ''; + $phone=isset($userinfo['phone']) ? $userinfo['phone'] : ''; + $email=isset($userinfo['email']) ? $userinfo['email'] : ''; + + + // Заполняем маски + $rez=$this->reg_form; + + $rez=str_replace('{login}', $login, $rez); + $rez=str_replace('{phone}', $phone, $rez); + $rez=str_replace('{email}', $email, $rez); + + $roles=$k2->ins_comp('k2select2'); + $roles_out=$roles->sel( + ['name' => 'kcb_roles', + 'sql' => 'select roleid as k, rolename as v from k2roles order by rolename', + 'search_input' => 1, + 'value'=>'' + ] + ); + + $rez=str_replace('{role}', $roles_out, $rez); + + + $postfrm=''; + + + $rez=str_replace('{postback}', $postfrm, $rez); + + + + if ($this->change){ + $btnval='{lnChange}'; + }else{ + $btnval='{lnSignUp}'; + } + + $rez=str_replace('{regbtn}', $btnval, $rez); + + + return $rez; + } + + + + + + + // Регистрация пользователя + function reg($username=''){ + global $k2; + $rez=''; + + if ($k2->post("btnsubmit")) { + $check_fill = $this->check_fill(); + + if ($check_fill) { + + $arr = ['login' => trim($k2->post('txtName')), + 'phone' => trim($k2->post('txtPhone')), + 'email' => trim($k2->post('txtEmail')), + 'password' => trim($k2->post('txtPassword')), + 'role' => trim($k2->post('kcb_roles')), + 'fio' => trim($k2->post('txtFIO')), + 'sexid' => 1 + ]; + + + $ins = $this->insUser($arr); + + if (trim($ins)=='' or trim($ins)=='0'){ + $rez.='Пользователь добавлен успешно.
    '; + if ($k2->get('temp') == 'ajax'){ + $arr_rez = [$error, 1]; + $json_rez = json_encode($arr_rez); + return $json_rez; + } + }else{ + $rez.='При вставке возникла ошибка...
    '; + if ($k2->get('temp') == 'ajax'){ + $error .= 'При вставке возникла ошибка...
    '; + $arr_rez = [$error, 0]; + $json_rez = json_encode($arr_rez); + return $json_rez; + } + } + + }else{ + if ($k2->get('temp') == 'ajax'){ + $error = $this->err; + $error = $this->Translate($error); + $arr_rez = [$error, 0]; + $json_rez = json_encode($arr_rez); + return $json_rez; + } + $rez=$this->showRegForm(); + } + + }else{ + $rez=$this->showRegForm(); + } + + + + //if ($k2->post('btnsubmit')<>''){ + //$k2->GoBack(); + //} + + + return $rez; + } + + + // Функция оповещения о том, что пользователь зарегистрирован + function registered(){ + $rez=$this->reg_promt; + + return $rez; + } + + + + + // Замены сообщений по маскам в сообщениях вспоминания + function replTemplRemember($strinp, $arr_remember){ + + global $k2; + + + $rez=$strinp; + + $rez=str_replace('{domain}', $k2->domain(), $rez); + $rez=str_replace('{name}', $arr_remember['login'], $rez); + $rez=str_replace('{login}', $arr_remember['login'], $rez); + $rez=str_replace('{email}', $arr_remember['email'], $rez); + + $rez=str_replace('{lnHello}', $this->Translate("{lnHello}"), $rez); + $rez=str_replace('{lnYourPasswordSite}', $this->Translate("{lnYourPasswordSite}"), $rez); + $rez=str_replace('{lnChanged}', $this->Translate("{lnChanged}"), $rez); + $rez=str_replace('{lnNewPassword}', $this->Translate("{lnNewPassword}"), $rez); + $rez=str_replace('{lnPasswordToLogin}', $this->Translate("{lnPasswordToLogin}"), $rez); + $rez=str_replace('{lnRestore}', $this->Translate("{lnRestore}"), $rez); + return $rez; + } + + + // Письмо по восстановлению пароля + // $login - логин пользователя, которому восстанавливается пароль + // $hash - хеш восстановления пароля + function sendMailRemember($login, $hash){ + + global $k2; + + $arr=$this->getUserInfo($login); + + //array_push($arr); + + $subj=$this->remember_subject; + $mess=$this->remember_hash_mail; + + $mess = $this->Translate($mess); + $subj = $this->Translate($subj); + + $subj=$this->replTemplRemember($subj, $arr); + + $mess=str_replace('{url_remember}', 'http://'.$k2->domain().'/?p=remember&hash='.$hash, $mess); + + $mess=$this->replTemplRemember($mess, $arr); + + + // Отправляем сообщение по электронной почте + $k2->mail->sendMail($login, $subj, $mess); + //$k2->mail->sendMail($arr['email'], $subj, $mess); + + } + + + + // Генерирует хеш для восстановления пароля + function gen_hash_remember($remember_login){ + + global $k2; + + $res=''; + + + $remember_hash=$k2->sys->getGUID(); + $this->sendMailRemember($remember_login, $remember_hash); + +// $sql = "UPDATE k2users SET remember_hash='$remember_hash' WHERE (login='$remember_login')"; +// +// +// try{ +// $res=$k2->db->exec($sql); +// }catch(PDOException $e) { +// echo "Error set remember_hach: $sql\n"; +// echo $e->getMessage(); +// } + + $r = $k2->sql->upd( + "UPDATE k2users + SET + + remember_hash=:remember_hash + + WHERE login =:login OR email=:login ", + [ + 'remember_hash' => $remember_hash, + 'login' => $remember_login + ] + ); + if($r['err']!==''){ + $k2->log->err('Error set remember_hach: '.$r['err']); + $rez = $r['err']; + return $rez; + } + $rez = $this->remember_form_msg; + + header ('Location: /?p=remember&send=1'); + + return $res; + + + } + + + + // Отправка почтового уведомления о операции вспоминания пароля + // $remember_login - логин или электронный адрес, который будем вспоминать + function sendRemember($remember_login){ + + $remember_login=trim($remember_login); + + $this->remember_form_msg = str_replace('{login}', $remember_login, $this->remember_form_msg); + $this->remember_form_msg_err = str_replace('{login}', $remember_login, $this->remember_form_msg_err); + + // Проверяем есть ли такой пользователь + if ($this->checkUser($remember_login)){ + + $rez = $this->remember_form_msg; + $this->gen_hash_remember($remember_login); + + }else{ + $rez = $this->remember_form_msg_err; + } + //echo $rez; + return $rez; + } + + + + // Фуцнкция вспомнить пароль + function remember(){ + + global $k2; + $rez = ''; + $error = ''; + + + if ($k2->get('send')) { + $rez=$this->remember_form_msg; + } else { + $rez=$this->remember_form; + } + + + + + + $postfrm=''; + + $chekcaptcha = 1; + + + if ($k2->post('RememberName')) { + + //проверка каптчи + if ($k2->auth->is_captcha){ + $chekcaptcha = $k2->auth->checkCaptcha(); + if ($chekcaptcha !== 1) { + $error = $this->captchaerr; + } + } + + if ($chekcaptcha) { + $postfrm = $this->sendRemember(trim($k2->post('RememberName'))); + + $error .= $postfrm; + } + + } + + + + $rez = str_replace('{error}', $error, $rez); + + return $rez; + } + + + + // Очистка хеша + function setNewPassword($hash, $password){ + + global $k2; + + $res=''; + + if (trim($hash)==''){ + exit; + } + $r = $k2->sql->upd( + "UPDATE k2users + SET + + remember_hash=:remember_hash, + password=:password, + passwd_decode=:passwd_decode + + WHERE remember_hash =:hash ", + [ + 'hash' => $hash, + 'remember_hash' => '', + 'password' => md5($password), + 'passwd_decode' => $password + ] + ); + + if($r['err']!==''){ + $k2->log->err('{lnFailedClearHash}: '.$r['err']); + $rez = $r['err']; + return $rez; + } + + + return $res; + + } + + + // Получить информацию о пользователе по хешу + function getUserHashInfo($hash){ + + global $k2; + + $res = []; + +// $sql = "SELECT p.user_id as userid, p.login, p.name, p.roleid, p.email, p.phone FROM k2users p WHERE (p.remember_hash='$hash') limit 1"; +// +// foreach ($k2->db->query($sql) as $row) { +// +// $res=$row; +// } + + $r=$k2->sql->sel('SELECT p.user_id as userid, p.login, p.name, p.roleid, p.email, p.phone + FROM k2users p + WHERE (p.remember_hash=:remember_hash) LIMIT 1', + ['remember_hash'=>$hash]); + + foreach ($r['data'] as $row) { + $res=$row; + } + + return $res; + } + + + + // Восстанавливает вспоминаемый пароль + function changeRememberPassword($hash){ + + global $k2; + + $rez=''; + $new_password=$k2->sys->generate_password(); + + + $arr=$this->getUserHashInfo($hash); + + + $subj=$this->new_password; + $mess=$this->new_password_mess; + + $mess=str_replace('{password}', $new_password, $mess); + + if (count($arr)==0){ + $rez="
    {lnHashNotFound}!
    "; + }else{ + $subj=$this->replTemplRemember($subj, $arr); + $mess=$this->replTemplRemember($mess, $arr); + + $this->setNewPassword($hash, $new_password); + + // Отправляем сообщение по электронной почте + $k2->mail->sendMail($arr['email'], $subj, $mess); + + $rez="
    {lnNewPasswordInMail}.
    "; + + } + + return $rez; + + } + + + // Форма регистрации + function regForm($username=''){ + + global $k2; + + // Зарегистрирован + if ($k2->get('p')=='registered'){ + $rez=$this->registered(); + } elseif ($k2->get('p')=='remember'){ + if (trim($k2->get('hash'))==''){ + $rez=$this->remember(); + }else{ + $rez=$this->changeRememberPassword($k2->get('hash')); + } + + } else { + $rez=$this->reg($username); + } + return $rez; + + } + + + // Изменение данных по текущему пользователю + function change($username=''){ + + global $k2; + + if (trim($username)==''){ + $username=$k2->auth->login; + } + + + $this->change=true; + $rez=$this->regForm($username); + + // Обновляю страницу + //$k2->GoBack(); + + return $rez; + } + + + + // Вывод контента + function content(){ + $rez=$this->regForm(); + $rez=$this->Translate($rez); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/en.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/en.csv new file mode 100644 index 0000000..84c4c63 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/en.csv @@ -0,0 +1,11 @@ +name| value +lnEnter| Login +lnSuperAdmin| Super Administrator +lnAdministrator| Administrator +lnModerator| Moderator +lnUser| User +lnClient| Client +lnExit| Exit +lnCabinet| Cabinet +lnRegistration| Sign up +lnAuth| Sign in \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/fr.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/fr.csv new file mode 100644 index 0000000..de2c814 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/fr.csv @@ -0,0 +1,7 @@ +name| value +lnEnter| Entrée +lnSuperAdmin| Super administrateur +lnAdministrator| Administrateur +lnModerator| Modérateur +lnUser| Utilisateur +lnClient| Client \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/ru.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/ru.csv new file mode 100644 index 0000000..4985db1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/ru.csv @@ -0,0 +1,11 @@ +name|value +lnEnter| Вход +lnSuperAdmin| Супер-администратор +lnAdministrator| Администратор +lnModerator| Модератор +lnUser| Пользователь +lnClient| Клиент +lnExit| Выход +lnCabinet| Кабинет +lnRegistration| Регистрация +lnAuth| Авторизация \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/ua.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/ua.csv new file mode 100644 index 0000000..82e75b1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth/ua.csv @@ -0,0 +1,11 @@ +name| value +lnEnter| Вхід +lnSuperAdmin| Супер-адміністратор +lnAdministrator| Адміністратор +lnModerator| Модератор +lnUser| Користувач +lnClient| Клієнт +lnExit| Вихід +lnCabinet| Кабінет +lnRegistration| Регістрація +lnAuth| Авторизація \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/en.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/en.csv new file mode 100644 index 0000000..1780aa8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/en.csv @@ -0,0 +1,26 @@ +name| value +lnAuthorization| Authorization +lnLogin| Login +lnPassword| Password +lnRememberPassword| Remember password +lnUserIsAuthorized| This user is authorized +lnYouAreLogged| You are logged in +lnLogOut| Log out +lnAuthorize| Log in +lnName| Name +lnRights| Rights +lnErrAuthTr| This user does not exist or your account has not been activated by the site administration. +lnErrAuth| Password or login entered incorrectly. +lnRegCli| Registration for the tourist +lnRegPartn| Registration for a partner +lnRegistration| Registration +lnEmail| Email +lnEnterCabinet| Login +lnGoogleAuth| Google Login +lnFacebookAuth| Facebook Login +lnConnect| Connect +lnOr| or +lnFinishReg| Completion of registration +lnToRegistration| To register +lnCaptchaErr| You have not passed the reCaptcha validation! +lnActiveErr| Your account has not yet been activated by the administrator. After activation, you will receive a letter to the email. \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/fr.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/fr.csv new file mode 100644 index 0000000..d8445d9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/fr.csv @@ -0,0 +1,11 @@ +name| value +lnAuthorization| Autorisation +lnLogin| Login +lnPassword| Mot de passe +lnRememberPassword| Vous avez oublié votre mot de passe +lnUserIsAuthorized| Cet utilisateur est autorisé +lnYouAreLogged| Vous êtes connecté +lnLogOut| Déconnecter +lnAuthorize| Autoriser +lnName| Nom +lnRights| Droits \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/ru.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/ru.csv new file mode 100644 index 0000000..4222a36 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/ru.csv @@ -0,0 +1,26 @@ +name| value +lnAuthorization| Авторизация +lnLogin| Логин +lnPassword| Пароль +lnRememberPassword| Вспомнить пароль +lnUserIsAuthorized| Пользователь авторизован +lnYouAreLogged| Вы авторизированы +lnLogOut| Разлогиниться +lnAuthorize| Авторизироваться +lnName| Имя +lnRights| Права +lnErrAuthTr| Такого пользователя не существует либо ваш аккаунт ещё не активирован администрацией сайта. +lnErrAuth| Пароль или логин введены не правильно. +lnRegCli| Регистрация для туриста +lnRegPartn| Регистрация для партнёра +lnRegistration| Регистрация +lnEmail| Емейл +lnEnterCabinet| Вход в личный кабинет +lnGoogleAuth| Вход через Google +lnFacebookAuth| Вход через Facebook +lnConnect| Подключиться +lnOr| или +lnFinishReg| Завершение регистрации +lnToRegistration| Зарегистрироваться +lnCaptchaErr| Вы не прошли валидацию reCaptcha! +lnActiveErr| Ваш аккаунт пока не активирован администратором. После активации, вам придёт письмо на емейл. \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/ua.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/ua.csv new file mode 100644 index 0000000..f94fdf1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_form/ua.csv @@ -0,0 +1,13 @@ +name| value +lnAuthorization| Авторизація +lnLogin| Логін +lnPassword| Пароль +lnRememberPassword| Згадати пароль +lnUserIsAuthorized| Користувач авторизований +lnYouAreLogged| Ви авторизовані +lnLogOut| Вийти +lnAuthorize| Aвторизуватися +lnName| Ім'я +lnRights| Права +lnErrAuthTr| Такого користувача не існує, або ваш аккаунт щe не активований адміністраціею сайту. +lnErrAuth| Пароль або логін введені невірно. \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/en.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/en.csv new file mode 100644 index 0000000..c4109aa --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/en.csv @@ -0,0 +1,46 @@ +name| value +lnCongratulations | Congratulations +lnSuccessfullySigned | You have successfully signed up +lnLinkPasswordRecovery | Link to password recovery for login +lnMailed | mailed +lnOfLogin | Login +lnNotFound | not found +lnUserRegistration | User registration +lnHello | Good afternoon +lnThankYou | Thank you for your interest in our service +lnCongratulationsRegistered | Congratulations, you have successfully registered on the site +lnYourCredentials | Your credentials +lnLogin | Login +lnPassword | Password +lnPasswordReset | Password reset +lnByAddress | by address +lnHello | Hello +lnUsedPasswordRecovery | You used the password recovery form to login +lnPleaseGo | Please go to +lnFinishProcedure | to finish the procedure +lnIfNotRequest | If you did not request a reminder - please ignore this message +lnPasswordToLogin | Password to login +lnRestore | Reinstated +lnYourPasswordSite | Your password on the site +lnChanged | Changed +lnNewPassword | New password +lnPhone | Phone +lnEmail | Email +lnRepeatPassword | Repeat password +lnRememberPassword | Remember password +lnFieldNotFilled | The field is not filled +lnEnterPhoneNumber | Please enter the phone number +lnEnterEmail | Please enter your e-mail +lnEnterValidEmail | Please enter a valid e-mail +lnPasswordsNotMatch | Passwords do not match +lnEnterYourPassword | Please enter your password +lnDataTransmitted | The registration data is transmitted +lnChange | Change +lnSignUp | Sign up +lnFailedClearHash | It failed to clear the hash +lnHashNotFound | Hash password recovery is not found or has expired +lnNewPasswordInMail | The new password is in the mail +lnResetPassword| Reset the password +lnEnterLogin| Enter login +lnSendPassword| Send password +lnEnterAddressEmail| Enter your email address \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/fr.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/fr.csv new file mode 100644 index 0000000..1769de0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/fr.csv @@ -0,0 +1,44 @@ +name| value +lnCongratulations | Félicitations +lnSuccessfullySigned | Vous avez signé avec succès +lnLinkPasswordRecovery | Lien vers la récupération de mot de passe pour la connexion +lnMailed | envoyé par la poste +lnOfLogin | Logina +lnNotFound | trouvé +lnUserRegistration | utilisateur Inscription +lnHello | bonjour +lnThankYou | Nous vous remercions de votre intérêt pour notre service +lnCongratulationsRegistered | Félicitations, vous avez enregistré avec succès sur le site +lnYourCredentials | Vos informations d'identification +lnLogin | login +lnPassword | mot de passe +lnPasswordReset | réinitialisation de mot +lnByAddress | en ligne +lnHello | Bonjour +lnUsedPasswordRecovery | Vous avez utilisé le formulaire de récupération de mot de passe pour ouvrir une session +lnPleaseGo | S'il vous plaît aller à +lnFinishProcedure | pour terminer la procédure +lnIfNotRequest | Si vous ne l'avez pas demandé un rappel - s'il vous plaît ignorer ce message +lnPasswordToLogin | Mot de passe pour vous connecter +lnRestore | réintégré +lnYourPasswordSite | Votre mot de passe sur le site +lnChanged | modifié +lnNewPassword | Nouveau mot de passe +lnPhone | téléphone +lnEmail | Email +lnRepeatPassword | Répéter mot de passe +lnRememberPassword | Vous avez oublié votre mot de passe +lnFieldNotFilled | Le champ est pas rempli +lnEnterPhoneNumber | S'il vous plaît entrer le numéro de téléphone +lnEnterEmail | S'il vous plaît entrer votre e-mail +lnEnterValidEmail | S'il vous plaît entrer un e-mail valide +lnPasswordsNotMatch | Les mots de passe ne correspondent pas +lnEnterYourPassword | S'il vous plaît entrer votre mot de passe +lnDataTransmitted | Les données d'enregistrement sont transmises +lnChange | modifier +lnSignUp | signer +lnFailedClearHash | Il n'a pas réussi à effacer le hachage +lnHashNotFound | récupération de mot de passe Hash est introuvable ou a expiré +lnNewPasswordInMail | Le nouveau mot de passe est dans le courrier +lnResetPassword| Votre mot de passe +lnEnterLogin| Entrez votre nom d'utilisateur \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/ru.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/ru.csv new file mode 100644 index 0000000..059860a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/ru.csv @@ -0,0 +1,45 @@ +name|value +lnCongratulations| Поздравляем Вас +lnSuccessfullySigned| Вы успешно зарегистрировались +lnLinkPasswordRecovery| Ссылка на восстановление пароля для логина +lnMailed| отправлена по почте +lnOfLogin| Логина +lnNotFound| не найдено +lnUserRegistration| Регистрация пользователя +lnThankYou| Благодарим Вас за интерес к нашему сервису +lnCongratulationsRegistered| Поздравляем, вы успешно зарегистрировались на сайте +lnYourCredentials| Ваши учетные данные +lnLogin| Логин +lnPassword| Пароль +lnPasswordReset | Восстановление пароля +lnByAddress| на сайте +lnHello| Здравствуйте +lnPleaseGo| Пожалуйста, перейдите по +lnFinishProcedure| чтобы завершить процедуру +lnIfNotRequest| Если Вы не запрашивали напоминание — проигнорируйте это сообщение +lnPasswordToLogin| Пароль в логине +lnRestore| восстановлен +lnYourPasswordSite| Ваш пароль на сайте +lnChanged| изменен +lnNewPassword| Новый пароль +lnPhone| Телефон +lnEmail| Емейл +lnRepeatPassword| Повтор пароля +lnRememberPassword| Вспомнить пароль +lnFieldNotFilled| Поле не заполнено +lnEnterPhoneNumber| Пожалуйста введите телефонный номер +lnEnterEmail| Пожалуйста, введите e-mail +lnEnterValidEmail| Пожалуйста, введите правильный e-mail +lnPasswordsNotMatch| Пароли не совпадают +lnEnterYourPassword| Пожалуйста, введите пароль +lnDataTransmitted| Регистрационные данные переданы +lnChange| Изменить +lnSignUp| Зарегистрироваться +lnFailedClearHash| Не удалось очистить хеш +lnHashNotFound| Хеш восстановления пароля не найден или просрочен +lnNewPasswordInMail| Новый пароль отправлен по почте +lnResetPassword| Сбросить пароль +lnEnterLogin| Введите логин +lnUsedPasswordRecovery| Вы воспользовались формой восстановления пароля для логина +lnSendPassword| Выслать пароль +lnEnterAddressEmail| Введите адрес электронной почты \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/ua.csv b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/ua.csv new file mode 100644 index 0000000..775c433 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/lng/k2auth_regform/ua.csv @@ -0,0 +1,44 @@ +name| value +lnCongratulations | Вітаємо Вас +lnSuccessfullySigned | Ви успішно зареєструвалися +lnLinkPasswordRecovery | Посилання на відновлення пароля для логіна +lnMailed | відправлена ​​поштою +lnOfLogin | логіна +lnNotFound | не знайдено +lnUserRegistration | Реєстрація користувача +lnHello | Доброго дня +lnThankYou | Дякуємо Вам за інтерес до нашого сервісу +lnCongratulationsRegistered | Вітаємо, ви успішно зареєструвалися на сайті +lnYourCredentials | Ваші облікові дані +lnLogin | Логін +lnPassword | Пароль +lnPasswordReset | Відновлення паролю +lnByAddress | на сайті +lnHello | Вітаю +lnUsedPasswordRecovery | Ви скористалися формою відновлення пароля для логіна +lnPleaseGo | Будь ласка, перейдіть по +lnFinishProcedure | щоб завершити процедуру +lnIfNotRequest | Якщо Ви не запитували нагадування - ігноруйте це повідомлення +lnPasswordToLogin | Пароль в логіні +lnRestore | відновлений +lnYourPasswordSite | Ваш пароль на сайті +lnChanged | змінений +lnNewPassword | Новий пароль +lnPhone | Телефон +lnEmail | Email +lnRepeatPassword | Повтор пароля +lnRememberPassword | Згадати пароль +lnFieldNotFilled | Поле не заповнене +lnEnterPhoneNumber | Будь ласка, введіть номер +lnEnterEmail | Будь ласка, введіть e-mail +lnEnterValidEmail | Будь ласка, введіть правильний e-mail +lnPasswordsNotMatch | Паролі не співпадають +lnEnterYourPassword | Будь ласка, введіть пароль +lnDataTransmitted | Реєстраційні дані передані +lnChange | Змінити +lnSignUp | Зареєструватися +lnFailedClearHash | Чи не вдалося очистити хеш +lnHashNotFound | Хеш відновлення пароля не найден або прострочений +lnNewPasswordInMail | Новий пароль надіслано поштою +lnResetPassword| Скинути пароль +lnEnterLogin| Введіть логін \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2auth/rel.yml b/k2shop/k2shop/app/app/k2/k2auth/rel.yml new file mode 100644 index 0000000..da684f9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/rel.yml @@ -0,0 +1,2 @@ +relation_components: + diff --git a/k2shop/k2shop/app/app/k2/k2auth/res/info.yml b/k2shop/k2shop/app/app/k2/k2auth/res/info.yml new file mode 100644 index 0000000..6cd092f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2auth" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2auth/ver.yml b/k2shop/k2shop/app/app/k2/k2auth/ver.yml new file mode 100644 index 0000000..d2ca1f3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2auth/ver.yml @@ -0,0 +1,3 @@ +comp_name: "k2auth" +version: 1.1.1.1 +autor: diff --git a/k2shop/k2shop/app/app/k2/k2chat/CustomAJAXChat.php b/k2shop/k2shop/app/app/k2/k2chat/CustomAJAXChat.php new file mode 100644 index 0000000..a4f655d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chat/CustomAJAXChat.php @@ -0,0 +1,276 @@ +initConfig(); + +// $this->initDataBaseConnection(); +// } + + +/* + + +$this->db + +$sql = 'SELECT * FROM '; + +$result = $this->db->sqlQuery($sql); + +>if($result->error()) {^M +<------><------><------>echo $result->getError();^M +<------><------><------>die();^M +<------><------>}^M + + +$row = $result->fetch(); + +if($row['channel'] !== null) { + +} + +*/ + + + + // Returns an associative array containing userName, userID and userRole + // Returns null if login is invalid + function getValidLoginUserData() { + + $customUsers = $this->getCustomUsers(); + + if($this->getRequestVar('password')) { + // Check if we have a valid registered user: + + $userName = $this->getRequestVar('userName'); + $userName = $this->convertEncoding($userName, $this->getConfig('contentEncoding'), $this->getConfig('sourceEncoding')); + + $password = $this->getRequestVar('password'); + $password = $this->convertEncoding($password, $this->getConfig('contentEncoding'), $this->getConfig('sourceEncoding')); + + foreach($customUsers as $key=>$value) { + + ///////////////////////////////////////////////////////////////////////////// + // Запрещаем входить без пароля (Рудюк С.А.) А так же проверка пароля по md5 + ///////////////////////////////////////////////////////////////////////////// + + if(($value['userName'] == $userName) && ($value['password'] == md5($password)) && trim($value['password'])<>'') { + $userData = array(); + $userData['userID'] = $key; + $userData['userName'] = $this->trimUserName($value['userName']); + $userData['userRole'] = $value['userRole']; + return $userData; + } + } + + return null; + } else { + // Guest users: + // Запрещаю входить не авторизированному пользователю (Рудюк С.А.) + return $this->getGuestUser(); + } + } + + // Store the channels the current user has access to + // Make sure channel names don't contain any whitespace + function &getChannels() { + if($this->_channels === null) { + $this->_channels = array(); + + $customUsers = $this->getCustomUsers(); + + // Get the channels, the user has access to: + if($this->getUserRole() == AJAX_CHAT_GUEST) { + $validChannels = $customUsers[0]['channels']; + } else { + $validChannels = $customUsers[$this->getUserID()]['channels']; + } + + // Add the valid channels to the channel list (the defaultChannelID is always valid): + foreach($this->getAllChannels() as $key=>$value) { + if ($value == $this->getConfig('defaultChannelID')) { + $this->_channels[$key] = $value; + continue; + } + // Check if we have to limit the available channels: +/* if($this->getConfig('limitChannelList') && !in_array($value, $this->getConfig('limitChannelList'))) { + continue; + } + */ + + if(in_array($value, $validChannels)) { + $this->_channels[$key] = $value; + } + } + } + return $this->_channels; + } + + // Store all existing channels + // Make sure channel names don't contain any whitespace + function &getAllChannels() { + if($this->_allChannels === null) { + // Get all existing channels: + $customChannels = $this->getCustomChannels(); + + $defaultChannelFound = false; + + foreach($customChannels as $name=>$id) { + $this->_allChannels[$this->trimChannelName($name)] = $id; + if($id == $this->getConfig('defaultChannelID')) { + $defaultChannelFound = true; + } + } + + if(!$defaultChannelFound) { + // Add the default channel as first array element to the channel list + // First remove it in case it appeard under a different ID + unset($this->_allChannels[$this->getConfig('defaultChannelName')]); + $this->_allChannels = array_merge( + array( + $this->trimChannelName($this->getConfig('defaultChannelName'))=>$this->getConfig('defaultChannelID') + ), + $this->_allChannels + ); + } + + + + } + return $this->_allChannels; + } + + + function &getCustomUsers() { + // List containing the registered chat users: + $users = null; + +// require(AJAX_CHAT_PATH.'lib/data/users.php'); + $chanall=$this->myAllChannels(); + + + // Установка кодировки + $sql = 'SET NAMES utf8'; + $result = $this->db->sqlQuery($sql); + + + $users = array(); + + + // Заполнение пользователей из базы данных + $sql = 'select login, password, roleid from k2users'; + + + $result = $this->db->sqlQuery($sql); + + if($result->error()) { + echo $result->getError(); + die(); + } + + + if($result->numRows() > 0) { + + $i=0; + + while($row = $result->fetch()) { + + if ($row['roleid']=='1' or $row['roleid']=='-1'){ // Администратор + $users[$i]['userRole']=AJAX_CHAT_ADMIN; + }elseif ($row['roleid']=='10'){ // Модератор + $users[$i]['userRole']=AJAX_CHAT_MODERATOR; + }elseif ($row['roleid']=='100'){ // Пользоватлеь + $users[$i]['userRole']=AJAX_CHAT_USER; + }else{ // Гость + $users[$i]['userRole']=AJAX_CHAT_GUEST; + } + + + $users[$i]['userName'] = $row['login']; + $users[$i]['password'] = $row['password']; + + $users[$i]['channels'] = $chanall; + + $i=$i+1; + } + + } + + + + + + return $users; + } + + + function myAllChannels(){ + $arr=$this->getCustomChannels(); + + $rez=array(); + + $i=0; + foreach ($arr as $key => $value) { + $rez[$i]=$value; + + $i=$i+1; + } + + return $rez; + } + + + function getCustomChannels() { + + // List containing the custom channels: + $channels = null; +// require(AJAX_CHAT_PATH.'lib/data/channels.php'); + // Channel array structure should be: + // ChannelName => ChannelID + + + // Установка кодировки + $sql = 'SET NAMES utf8'; + $result = $this->db->sqlQuery($sql); + + + + + // Заполнение комнат из базы данных + $sql = 'select roomid, name from k2chat_room'; + + + $result = $this->db->sqlQuery($sql); + + if($result->error()) { + echo $result->getError(); + die(); + } + + + if($result->numRows() > 0) { + + $i=0; + + while($row = $result->fetch()) { + $channels[$i]=$row['name']; + $i=$i+1; + } + + } + + + return array_flip($channels); + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chat/README.txt b/k2shop/k2shop/app/app/k2/k2chat/README.txt new file mode 100644 index 0000000..86f38c9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chat/README.txt @@ -0,0 +1,6 @@ +Переопределяется модуль чата для того, чтоб повысить безопасность системы и интегрируемость в К2. +Поэтому, необходимо, чтоб файл CustomAJAXChat.php был указан симлинком там где файлы разработчика: +/k2shop/k2shop/app/app/k2chat/CustomAJAXChat.php -> /k2shop/k2shop/libs/ajax-chat/chat/lib/class/CustomAJAXChat.php + +Нужно так же симлинк поставить на конфигурационный файл чата: + ***\k2shop\k2shop\libs\ajax-chat\chat\lib \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chat/k2chat.php b/k2shop/k2shop/app/app/k2/k2chat/k2chat.php new file mode 100644 index 0000000..abc29b3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chat/k2chat.php @@ -0,0 +1,71 @@ +auth->isAdmin()) and ($k2->auth->isDesignMode())){ + $btn=$this->editLinks(); + }else{ + $btn=''; + } + + $html=str_replace('{edit}', $btn, $html); +*/ + } + + + + + + + + // Выводит окно чата + function getShoutBoxContent() { + + + $rez=' +
    + +
    + '; + + + + return $rez; + + + } + + + + + + function content(){ + $rez=$this->getShoutBoxContent(); + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chat/res/info.yml b/k2shop/k2shop/app/app/k2/k2chat/res/info.yml new file mode 100644 index 0000000..eabdb7c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chat/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2chat" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/k2chatadmin.php b/k2shop/k2shop/app/app/k2/k2chatadmin/k2chatadmin.php new file mode 100644 index 0000000..18853b8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/k2chatadmin.php @@ -0,0 +1,53 @@ + ["root","chat",$this->Translate("{lnChat}")], + 'elements' => [ + ["k2chatadmin_rooms",$this->Translate("{lnClassrooms}"),"?adm=k2chatadmin_rooms", ['','']], + ["chatusers",$this->Translate("{lnMembersChat}"),"?adm=chatusers", ['','']] + ] + ] + ]; + + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2chatadmin'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1]); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/k2chatadmin_rooms.php b/k2shop/k2shop/app/app/k2/k2chatadmin/k2chatadmin_rooms.php new file mode 100644 index 0000000..b6280ad --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/k2chatadmin_rooms.php @@ -0,0 +1,57 @@ +ins_comp2('k2grid', $this); + + $arr = array( + + 'select' => "select roomid, name from k2chat_room", + 'update' => "update k2chat_room set name='@name' where roomid=@roomid", + 'delete' => "delete from k2chat_room where roomid=@roomid", + 'insert' => "insert into k2chat_room (name) values ('@name');", + 'fields' => array( + array('field' => 'roomid', + 'caption' => 'id комнаты', + 'readonly' => true, + 'width' => '100px' + ), + array('field' => 'name', + 'caption' => 'Название комнаты' + ) + ) + + ); + + $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/app/k2/k2chatadmin/lng/k2chatadmin/en.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/en.csv new file mode 100644 index 0000000..156f9f8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/en.csv @@ -0,0 +1,4 @@ +name| value +lnChat| Chat +lnClassrooms| Classrooms +lnMembersChat| Members chat \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/fr.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/fr.csv new file mode 100644 index 0000000..05342b1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/fr.csv @@ -0,0 +1,4 @@ +name| value +lnChat| Bavarder +lnClassrooms| Salles de classe +lnMembersChat| Les membres discutent \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/ru.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/ru.csv new file mode 100644 index 0000000..d77fa37 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/ru.csv @@ -0,0 +1,4 @@ +name|value +lnChat| Чат +lnClassrooms| Кабинеты +lnMembersChat| Пользователи чата \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/ua.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/ua.csv new file mode 100644 index 0000000..624d39e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin/ua.csv @@ -0,0 +1,4 @@ +name| value +lnChat| Чат +lnClassrooms| Кабінети +lnMembersChat| Користувачі чату \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/en.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/en.csv new file mode 100644 index 0000000..267ca1e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/en.csv @@ -0,0 +1,21 @@ +name| value +lnDesignAdmin| Design +lnViewAdmin| View +lnAdminPart| Admin part +lnExit| Yield +lnVerK2Hint| CMS-System Version 2 K2 ® Corporation +lbVerK2Caption| K2 ®. Version +lnHistoryK2Hint| CMS-system History 2 K2 ® Corporation +lnHistoryK2Caption| History +ln5Hint| On page 1 of the table displays 5 lines +ln10Hint| On page 1 of the table displays 10 lines +ln15Hint| On page 1 of the table displays 15 lines +ln20Hint| On page 1 of the table displays 20 lines +ln50Hint| On page 1 of the table displays 50 lines +ln100Hint| On page 1 of the table displays 100 lines +ln500Hint| On page 1 of the table displays 500 lines +ln1000Hint| On page 1 of the table displays 1000 lines +lbRowStyleEditHint| Style edit table data - into a string +lbRowStyleEditCaption| Line +lbTableStyleEditHint| Style editing table information - SHAPED +lbTableStyleEditCaption| Form \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/fr.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/fr.csv new file mode 100644 index 0000000..f136ca3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/fr.csv @@ -0,0 +1,21 @@ +name| value +lnDesignAdmin| Conception +lnViewAdmin| Vue +partie Administrateur| lnAdminPart +lnExit| Rendement +lnVerK2Hint| CMS-System Version 2 K2 ® Corporation +lbVerK2Caption| K2 ®. version +lnHistoryK2Hint| Histoire CMS-système 2 K2 ® Corporation +lnHistoryK2Caption| Histoire +ln5Hint| A la page 1 de la table affiche 5 lignes +ln10Hint| A la page 1 de la table affiche 10 lignes +ln15Hint| A la page 1 de la table affiche 15 lignes +ln20Hint| A la page 1 de la table affiche 20 lignes +ln50Hint| A la page 1 de la table affiche 50 lignes +ln100Hint| A la page 1 de la table affiche 100 lignes +ln500Hint| A la page 1 de la table affiche 500 lignes +ln1000Hint| A la page 1 de la table affiche 1000 lignes +lbRowStyleEditHint| Style de données de table d'édition - dans une chaîne +lbRowStyleEditCaption| Ligne +lbTableStyleEditHint| Style de l'information de table d'édition - FAÇONNÉ +lbTableStyleEditCaption| Sous forme de \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/ru.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/ru.csv new file mode 100644 index 0000000..81716a4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/ru.csv @@ -0,0 +1,21 @@ +name|value +lnDesignAdmin|Дизайн +lnViewAdmin|Просмотр +lnAdminPart|Админ-часть +lnExit|Выход +lnVerK2Hint|Версия CMS-системы Корпорация 2 К2® +lbVerK2Caption|К2®. Версия +lnHistoryK2Hint|История CMS-системы Корпорация 2 К2® +lnHistoryK2Caption|История +ln5Hint|На 1 странице таблицы выводится 5 строк +ln10Hint|На 1 странице таблицы выводится 10 строк +ln15Hint|На 1 странице таблицы выводится 15 строк +ln20Hint|На 1 странице таблицы выводится 20 строк +ln50Hint|На 1 странице таблицы выводится 50 строк +ln100Hint|На 1 странице таблицы выводится 100 строк +ln500Hint|На 1 странице таблицы выводится 500 строк +ln1000Hint|На 1 странице таблицы выводится 1000 строк +lbRowStyleEditHint|Стиль редактирования информации таблицы - В СТРОКЕ +lbRowStyleEditCaption|В строке +lbTableStyleEditHint|Стиль редактирования информации таблицы - В ФОРМЕ +lbTableStyleEditCaption|В форме \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/ua.csv b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/ua.csv new file mode 100644 index 0000000..ed4cc9f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/lng/k2chatadmin_rooms/ua.csv @@ -0,0 +1,21 @@ +name| value +lnDesignAdmin| Дизайн +lnViewAdmin| Перегляд +lnAdminPart| Адмін-частина +lnExit| Вихід +lnVerK2Hint| Версія CMS-системи Корпорація 2 К2 ® +lbVerK2Caption| К2®. версія +lnHistoryK2Hint| Історія CMS-системи Корпорація 2 К2 ® +lnHistoryK2Caption| Історія +ln5Hint| На 1 сторінці таблиці виводиться 5 рядків +ln10Hint| На 1 сторінці таблиці виводиться 10 рядків +ln15Hint| На 1 сторінці таблиці виводиться 15 рядків +ln20Hint| На 1 сторінці таблиці виводиться 20 рядків +ln50Hint| На 1 сторінці таблиці виводиться 50 рядків +ln100Hint| На 1 сторінці таблиці виводиться 100 рядків +ln500Hint| На 1 сторінці таблиці виводиться 500 рядків +ln1000Hint| На 1 сторінці таблиці виводиться 1000 рядків +lbRowStyleEditHint| Стиль редагування даних таблиці - В РЯДКУ +lbRowStyleEditCaption| В рядку +lbTableStyleEditHint| Стиль редагування даних таблиці - У ФОРМІ +lbTableStyleEditCaption| У формі \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2chatadmin/res/info.yml b/k2shop/k2shop/app/app/k2/k2chatadmin/res/info.yml new file mode 100644 index 0000000..cd6f872 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2chatadmin/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2chatadmin" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2comment/k2comment.php b/k2shop/k2shop/app/app/k2/k2comment/k2comment.php new file mode 100644 index 0000000..76151c6 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/k2comment.php @@ -0,0 +1,45 @@ +loadResYML('menu'); + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez = false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2comment'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2comment/k2comment_make.php b/k2shop/k2shop/app/app/k2/k2comment/k2comment_make.php new file mode 100644 index 0000000..7a69a12 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/k2comment_make.php @@ -0,0 +1,461 @@ +
    + Комментировать + {allcomment} + '; + + public $allcomments_tpl = '
    {onecomment}
    '; + + public $ajaxcomment_tpl = 'Все комментарии ({com_num})→'; + + public $onecomment_tpl = '
    +

    {usercreate} + {create_datetime}

    +

    {textcomment}

    +
    '; + + public $commentform = ' +
    + + + + + +
    + '; + public $com_num = 0; + + /** + * добавление js скрипта + * @return type + */ + function renderJS() { + + $rez = ''; + + ob_start(); + + ?> + + ins_comp2('k2window', $this); + + $arr_winconf = [ + 'caption'=>'Написать комментарий', + 'main_div'=>'container', + 'wnd_id'=>'windowcomment', + 'is_modal'=>true, + 'height'=>250, + 'width'=>300, + 'position'=>true, + 'left'=>375, + 'top'=>475, + 'button'=>false, + 'wnd_body'=>" +
    +
    + + + + + +
    +
    + " + ]; + $rez .= $jqx->showWindow($arr_winconf); + $arr_win2 = [ + 'caption'=>'Комментарии', + 'main_div'=>'container', + 'wnd_id'=>'windowallcomment', + 'is_modal'=>true, + 'height'=>250, + 'width'=>300, + //'position'=>true, + 'left'=>375, + 'top'=>475, + 'button'=>false, + 'wnd_body'=>" +
    + +
    + " + ]; + $rez .= $jqx->showWindow($arr_win2); + $rez = str_replace('{usercreateid}', $k2->auth->userid, $rez); + $rez = $this->Translate($rez); + return $rez; + } + + /** + * вывод форм комментариев + * @global type $k2 + * @param type $objectid + * @return type + */ + function commentTpl($objectid, $par = '') + { + global $k2; + + $rez = $this->comment_tpl; + if ($k2->auth->isAuth()) { + $rez = str_replace('{commentFunc}', 'windCommentDo', $rez); + } else { + $rez = str_replace('{commentFunc}', 'mustAuth', $rez); + } + $com_num = $this->getCommentsNum($objectid); + + if ($par !== 1){ + $rez = str_replace('{allcomment}', '', $rez); + $rez .= $this->getWindow(); + $rez .= $this->renderJS(); + } else { + $rez = str_replace('{allcomment}', $this->ajaxcomment_tpl, $rez); + } + $rez = str_replace('{com_num}', $com_num['rez'][0]['com_num'], $rez); + $rez = str_replace('{objectid}', $objectid, $rez); + return $rez; + } + + + function commentForm($objectid, $par = '') + { + global $k2; + + $rez = $this->commentform; + $rez .= $this->renderJS(); + + + $rez = str_replace('{usercreateid}', $k2->auth->userid, $rez); + $rez = str_replace('{objectid}', $objectid, $rez); + return $rez; + } + + function commentMyForm($objectid, $par = '', $tpl = '') + { + global $k2; + $rez = $tpl; + if ($tpl == '') { + $rez = $this->commentform; + } + $rez .= $this->renderJS(); + $rez = str_replace('{usercreateid}', $k2->auth->userid, $rez); + $rez = str_replace('{objectid}', $objectid, $rez); + return $rez; + } + + + + /** + * Кол-во комментариев + * @global type $k2 + * @param type $objectid + * @return type + */ + function getCommentsNum($objectid, $userid) + { + global $k2; + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->sel("SELECT + COUNT(contentid) as com_num + FROM k2content + WHERE objectid=:objectid AND active = 1 AND command=:command", + ['objectid'=>$objectid,'command'=>'comment']); + + $rez['rez'] = $r['data']; + + return $rez; + } + + /** + * получение комментариев + * @global type $k2 + * @return type + */ + function getComments($objectid = '') + { + global $k2; + $arr = ['rez'=>'', 'err'=>'']; + + if ($objectid == '') { + $objectid = $k2->post('objectid'); + } + + $r = $k2->sql->sel("SELECT + contentid, + content, + usercreate, + create_datetime + FROM k2content + WHERE objectid=:objectid AND active = 1 AND command=:command ORDER BY create_datetime DESC", + ['objectid'=>$objectid,'command'=>'comment']); + + $arr['rez'] = $r['data']; + + $comments = ''; + foreach ($arr['rez'] as $value) { + $comments .= $this->onecomment_tpl; + $comments = str_replace('{textcomment}', $value['content'], $comments); + $comments = str_replace('{usercreate}', $value['usercreate'], $comments); + $comments = str_replace('{create_datetime}', date('d.m.Y H:i', strtotime($value['create_datetime'])), $comments); + + } + + $rez = $this->allcomments_tpl; + $rez = str_replace('{onecomment}', $comments, $rez); + + return $rez; + } + + /** + * получение комментариев + * @global type $k2 + * @return type + */ + function getMyComments($objectid = '', $allcomments_tpl = '', $onecomments_tpl = '') + { + global $k2; + $arr = ['rez'=>'', 'err'=>'']; + + if ($objectid == '') { + $objectid = $k2->post('objectid'); + } + + $r = $k2->sql->sel("SELECT + c.contentid, + c.content, + c.usercreate, + c.usercreateid, + c.create_datetime, + u.photo + FROM k2content c + + LEFT JOIN k2users u + ON u.user_id = c.usercreateid + + WHERE c.objectid=:objectid AND c.active = 1 AND c.command=:command ORDER BY c.create_datetime DESC", + ['objectid'=>$objectid,'command'=>'comment']); + + $arr['rez'] = $r['data']; + + $comments = ''; + $this->com_num = count($arr['rez']); + foreach ($arr['rez'] as $value) { + $comments .= $onecomments_tpl; + if ($onecomments_tpl == '') { + $comments .= $this->onecomment_tpl; + } + $comments = str_replace('{textcomment}', $value['content'], $comments); + $comments = str_replace('{photo}', $value['photo'], $comments); + $comments = str_replace('{usercreate}', $value['usercreate'], $comments); + $comments = str_replace('{create_datetime}', date('d.m.Y H:i', strtotime($value['create_datetime'])), $comments); + + } + $rez .= $allcomments_tpl; + if ($allcomments_tpl == '') { + $rez = $this->allcomments_tpl; + } + + $rez = str_replace('{onecomment}', $comments, $rez); + + return $rez; + } + + /** + * вставка комментария + * @global type $k2 + * @return type + */ + function wrightComment() + { + global $k2; + $rez = ['После модерации Ваш комментарий будет опубликован!!!', 1]; + $contentid = $this->getID(); + $active = 0; + if ($k2->post('active')) { + $active = $k2->post('active'); + $rez = ['Комментарий отправлен', 1]; + } + $r = $k2->sql->ins_arr + ( + [ + 'table' => 'k2content', + 'fields' => + [ + 'contentid' => $contentid, + 'content' => $k2->post('textcomment'), + 'usercreate' => $k2->auth->login, + 'objectid' => $k2->post('objectid'), + 'usercreateid' => $k2->post('usercreateid'), + 'create_datetime' => date("Y-m-d H:i:s"), + 'command' => 'comment', + 'active' => $active + ] + ] + ); + + if ($r['err'] !== '') { + $rez = ['Произошла ошибка!!!'.$r['err'], 0]; + } + + $rez = json_encode($rez); + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + $event = $k2->get('event'); + switch ($event) + { + case "sendcomment": + $rez = $this->wrightComment(); + break; + case "getcomments": + $rez = $this->getComments(); + break; + default: + $rez .= ''; + $rez .= $this->getWindow(); + $rez .= $this->renderJS(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2comment/k2comment_route.php b/k2shop/k2shop/app/app/k2/k2comment/k2comment_route.php new file mode 100644 index 0000000..3c7b1b3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/k2comment_route.php @@ -0,0 +1,54 @@ +ins_comp2('k2phpgrid', $this); + + $route = $k2->get('r'); + + $arr = $this->loadResYML($route); + + $rez .= $grid->simpleTable($arr); + + //зависимая таблица + if ($route == 'rateobjects') { + $arr2 = $this->loadResYML('rateparam'); + $rez .= $grid->simpleTable($arr2); + } + + + return $rez; + } + + + + + // Возвращаем контент + function content(){ + global $k2; + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2comment/res/info.yml b/k2shop/k2shop/app/app/k2/k2comment/res/info.yml new file mode 100644 index 0000000..18de20e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2comment" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2comment/res/menu.yml b/k2shop/k2shop/app/app/k2/k2comment/res/menu.yml new file mode 100644 index 0000000..197b878 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/res/menu.yml @@ -0,0 +1,22 @@ +0: + category: + parent: root + name: k2rating + caption: Голосование + iconclass: fa fa-database + + elements: + rateconf: + name: rateconf + caption: Настройка голосования + url: ?adm=k2rate_route&r=rateobjects + command: + iconclass: fa fa-money + + rating: + name: rating + caption: Голосование + url: ?adm=k2rate_route&r=rating + command: + iconclass: fa fa-money + diff --git a/k2shop/k2shop/app/app/k2/k2comment/res/rateobjects.yml b/k2shop/k2shop/app/app/k2/k2comment/res/rateobjects.yml new file mode 100644 index 0000000..9782aa8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/res/rateobjects.yml @@ -0,0 +1,35 @@ +select: SELECT rateobjectid, rateobjname, comment FROM k2rateobjects +where: +table: k2rateobjects +height: 250 +sortname: rateobjname +detile: k2rate_params +sortorder: asc +caption: Объект голосования +fields: + rateobjectid: + field: rateobjectid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + rateobjname: + field: rateobjname + caption: Название + width: 250 + readonly: false + hidden: false + align: center + + comment: + field: comment + caption: Комментарий + width: 250 + readonly: false + hidden: false + align: center + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2comment/res/rateparam.yml b/k2shop/k2shop/app/app/k2/k2comment/res/rateparam.yml new file mode 100644 index 0000000..51fb619 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/res/rateparam.yml @@ -0,0 +1,48 @@ +select: SELECT paramid, param_name, rateobjectid, active FROM k2rate_params +where: "where (rateobjectid='{masterid}')" +table: k2rate_params +getmaster: true +masterid: rateobjectid +height: 250 +sortname: param_name +sortorder: asc +caption: Параметры голосования +fields: + paramid: + field: paramid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + rateobjectid: + field: rateobjectid + caption: Объект + width: 150 + readonly: true + align: center + type_field: DropDown + multy: false + # default: '{moveid}' + sql: SELECT rateobjectid as k, rateobjname as v + FROM k2rateobjects + + param_name: + field: param_name + caption: Название + width: 250 + readonly: false + hidden: false + align: center + + active: + field: active + caption: Актив + width: 50 + readonly: false + align: center + type_field: checkbox + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2comment/res/rating.yml b/k2shop/k2shop/app/app/k2/k2comment/res/rating.yml new file mode 100644 index 0000000..67c5c0d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2comment/res/rating.yml @@ -0,0 +1,72 @@ +select: SELECT rateid, user_id, rate_val, paramid, create_datetime, ip, objectid, tablename FROM k2rating +where: +table: k2rating +height: 250 +sortname: rate_val +sortorder: asc +caption: Голосование +fields: + rateid: + field: rateid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + user_id: + field: user_id + caption: Пользователь + width: 250 + readonly: false + type_field: DropDown + multy: false + # default: '{moveid}' + sql: SELECT null AS k, '_' AS v + UNION SELECT user_id AS k, name AS v + FROM k2users + + rate_val: + field: rate_val + caption: Оценка + width: 250 + readonly: false + hidden: false + align: center + + paramid: + field: paramid + caption: Параметр + width: 250 + readonly: false + type_field: DropDown + multy: false + # default: '{moveid}' + sql: SELECT null AS k, '_' AS v + UNION SELECT paramid AS k, param_name AS v + FROM k2rate_params + + ip: + field: ip + caption: ip + width: 250 + readonly: false + hidden: false + align: center + + objectid: + field: objectid + caption: objectid + width: 250 + readonly: false + hidden: false + align: center + + tablename: + field: tablename + caption: tablename + width: 250 + readonly: false + hidden: false + align: center \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/k2courses.php b/k2shop/k2shop/app/app/k2/k2courses/k2courses.php new file mode 100644 index 0000000..5d319fa --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/k2courses.php @@ -0,0 +1,57 @@ +auth->isSuperAdmin()){ + $menu = 'menu_'.$k2->auth->rolename; + $arr = $this->loadResYML($menu); + }else{ + $arr = $this->loadResYML('menu'); + } + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + + + + $s=$k2->getComp($comm); + if ($s[0]<>'k2courses'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/k2courses_courses.php b/k2shop/k2shop/app/app/k2/k2courses/k2courses_courses.php new file mode 100644 index 0000000..2ab271e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/k2courses_courses.php @@ -0,0 +1,643 @@ + +
    +
    +

    Список курсов

    + {onecourse} +
    +
    + '; + + public $onecourse_tpl = ' +
    +
    + +

    {parent_course}

    +
    +
    +

    {course_name}

    +

    Количество уроков - {lessons_num}

    +

    Куратор - {teacher_name}

    + +
    + +
    + '; + + + public $lessons_tpl = '
    +
    +
    +

    Список уроков

    + {onelesson} +
    +
    +
    '; + + public $onelesson_tpl = ' + + {lesson_num}. {lesson_name} + '; + + + public $lesson_content_tpl = '
    +
    +

    + Урок № {lesson_num} +

    +
    + +
    +
    +
    +

    {lesson_name}

    +
    +
    +
    +
    Время урока - {lesson_time} мин
    +
    +
    +
    Видео:
    + +
    +
    + {lesson_text} +
    +
    + {add_file} +
    +
    +
    + +
    +
    +

    Написать комментарий

    +
    + +
    +
    + {commentform} +
    +
    +
    +
    +
    +

    Комментарии

    +
    + +
    +
    + {comments} +
    +
    +
    +
    +
    '; + + public $add_file_tpl = ' '; + + public $one_file_tpl = '
  • + +
    + {file_name} + + ___ + + +
    +
  • '; + + public $tasks_tpl = '
    +
    +
    +

    Список заданий

    + {onetask} +
    +
    +
    '; + + public $onetask_tpl = ' + + {task_name} - {task_desc} + '; + + public $task_tpl = '
    +
    +
    +
    +

    {task_name}

    +
    +
    +
    +

    Описание: {task_desc}

    +
    +
    + + {task_file} +
    +
    +
    + +
    + '; + + public $answer_tpl = ' +
    + + {student_block} + +
    +
    +

    История ответов

    + +
    + +
    + +
    +
    + {answers_text} +
    +
    + + + +
    + + + +
    +
    +
    +

    Написать комментарий

    +
    + +
    +
    + {commentform} +
    +
    +
    +
    +
    +

    Комментарии

    +
    + +
    +
    + {comments} +
    +
    +
    + '; + + public $comment_tpl = ' + + '; + + public $student_answer_tpl = '
    +
    +
    +

    Ваш ответ

    +

    Изменено: {dateupdate}

    +
    +
    +
    + + +
    +
    + + +

    +
    + {answers_file} +
    + +
    +
    '; + public $answer_file_tpl = ' +
    + + Отправленный файл + + +
    '; + public $teacher_answer_tpl = '
    +
    +

    Ответ студента

    +
    +
    +
    + {answer} +
    +
    + {answers_file} +
    + '; + + public $student_success_tpl = ' +
    +

    Задание успешно выполнено!!!

    +

    Переходите к следующим заданиям.

    +
    '; + + public $teacher_success_tpl = ' +
    +

    Задание успешно выполнено!!!

    +
    '; + + + // Инициализация + function init_obj(){ + global $k2; + $k2->inc('k2courses','secur'); + $k2->site->addJS('ckeditor.js',"/k2shop/k2shop/libs/phpgrid/phpgrid-full-v2.0/lib/js/ckeditor/ckeditor.js"); + } + + /** + * + * @global type $k2 + * @global type $courses + * @return type + */ + function showCourses() + { + global $k2, $courses; + $userid = $k2->auth->userid; + $courses_arr = $courses->getCourses($userid); + foreach ($courses_arr as $key => $value) { + + $lessons_arr = $courses->getLessons($value['courseid']); + $onecourse .= $this->onecourse_tpl; + $onecourse = $this->replArrMask($onecourse, $value); + + $onecourse = str_replace('{lessons_num}', count($lessons_arr), $onecourse); + } + $rez = $this->courses_tpl; + + $k2->site->pathway->addarr(['?adm=k2courses_courses&mode=admin' => 'Мои курсы']); + $rez = str_replace('{onecourse}', $onecourse, $rez); + + return $rez; + } + + /** + * Вывод уроков + * @global type $k2 + * @global type $courses + * @param type $courseid + * @return type + */ + function showLessons($courseid){ + global $k2, $courses; + $studentid = $courses->getStudentid($k2->auth->userid); + $lessons_arr = $courses->getLessons($courseid); + $cur_lesson = 0; + $onelesson = ''; + $i = 1; + foreach ($lessons_arr as $key => $value) { + $onelesson .= $this->onelesson_tpl; + + $rezult = $courses->checkLesson($value['lessonid'], $studentid); + if ($rezult) { + $cur_lesson = 1; + $onelesson = str_replace('{btn-success}', 'btn-success', $onelesson); + $onelesson = str_replace('{icon}', 'fa fa-check', $onelesson); + } else if($cur_lesson == 1 || $i == 1) { + $cur_lesson = 0; + $onelesson = str_replace('{btn-success}', 'btn-warning', $onelesson); + $onelesson = str_replace('{icon}', 'fa fa-exclamation', $onelesson); + $onelesson = str_replace('{disabled}', '', $onelesson); + } else { + $onelesson = str_replace('{btn-success}', 'btn-default', $onelesson); + $onelesson = str_replace('{disabled}', 'disabled', $onelesson); + $onelesson = str_replace('{icon}', 'fa fa-close', $onelesson); + } + + + $onelesson = $this->replArrMask($onelesson, $value); + $i++; + } + $rez = $this->lessons_tpl; + $course_arr = $courses->getCourse($courseid); + $rez = str_replace('{onelesson}', $onelesson, $rez); + $k2->site->pathway->addarr(['?adm=k2courses_courses&mode=admin' => 'Мои курсы', '' => $course_arr[0]['course_name']]); + + return $rez; + } + + /** + * Вывод заданий + * @global type $k2 + * @global type $courses + * @param type $lessonid + * @return type + */ + function showTasks($lessonid){ + global $k2, $courses; + $studentid = $courses->getStudentid($k2->auth->userid); + + $lesson_arr = $courses->getLessons('', $lessonid); + $rez = $this->lesson_content_tpl; + + + $rez = str_replace('{add_file}', $this->add_file_tpl, $rez); + + $files_arr = $courses->getFiles($lessonid); + + $links_arr = $courses->getLinks($lessonid); + + foreach ($files_arr as $value) { + $onefile .= $this->one_file_tpl; + $onefile = $this->replArrMask($onefile, $value); + } + $rez = str_replace('{one_file}', $onefile, $rez); + + foreach ($links_arr as $value) { + if ($value['link_link']) { + $rez = str_replace('{hidden}', '', $rez); + $yt_arr = explode('/', $value['link_link']); + $ytid = array_pop($yt_arr); + $rez = str_replace('{data_link}', 'https://www.youtube.com/embed/'.$ytid, $rez); + } + } + + // if ($lesson_arr[0]['data_link']) { + // $rez = str_replace('{hidden}', '', $rez); + // $yt_arr = explode('/', $lesson_arr[0]['data_link']); + // $ytid = array_pop($yt_arr); + // $rez = str_replace('{data_link}', 'https://www.youtube.com/embed/'.$ytid, $rez); + // } + $rez = str_replace('{hidden}', 'hidden', $rez); + $rez = $this->replArrMask($rez, $lesson_arr[0]); + $onetask = ''; + if ($studentid) { + $tasks_arr = $courses->getTasks($lessonid); + foreach ($tasks_arr as $key => $value) { + $onetask .= $this->onetask_tpl; + + $task_result = $courses->getTaskResult($value['taskid'], $studentid); + + if ($task_result[0]['result_status']) { + $onetask = str_replace('{btn-success}', 'btn-success', $onetask); + $onetask = str_replace('{icon}', 'fa fa-check', $onetask); + } else { + $onetask = str_replace('{btn-success}', 'btn-warning', $onetask); + $onetask = str_replace('{icon}', 'fa fa-exclamation', $onetask); + } + $onetask = $this->replArrMask($onetask, $value); + + } + + $rez .= $this->tasks_tpl; + } + + + $comment = $k2->ins_comp('k2comment','make'); + $rez = str_replace('{commentform}', $comment->commentForm($lessonid), $rez); + $rez = str_replace('{comments}', $comment->getComments($lessonid), $rez); + + $rez = str_replace('{onetask}', $onetask, $rez); + $course_arr = $courses->getCourse($lesson_arr[0]['courseid']); + + $k2->site->pathway->addarr(['?adm=k2courses_courses&mode=admin' => 'Мои курсы', '?adm=k2courses_courses&mode=admin&course='.$lesson_arr[0]['courseid'] => $course_arr[0]['course_name'], ''=>$lesson_arr[0]['lesson_name']]); + return $rez; + } + + /** + * Отдельное задание + * @global type $k2 + * @global type $courses + * @param type $taskid + * @return type + */ + function showTaskDetail($taskid){ + global $k2, $courses; + + if ($k2->get('studentid')) { + $studentid = $k2->get('studentid'); + } else { + $studentid = $courses->getStudentid($k2->auth->userid); + } + + $task_arr = $courses->getTaskDetail($taskid, $studentid); + $lesson_arr = $courses->getLessons('', $task_arr[0]['lessonid']); + foreach ($task_arr as $key => $value) { + $rez = $this->task_tpl; + + $rez .= $this->answer_tpl; + if ($k2->post('full_content') !== ''){ + $answ .= $courses->doAnswer($taskid, $studentid, $k2->post('full_content')); + $rez = str_replace('{task_file}', $value['task_file'], $rez); + //header("location:" . __FILE__); + //exit(); + } + + $rez = $this->replArrMask($rez, $value); + + $task_arr = $courses->getTaskResult($value['taskid'], $studentid); + if ($task_arr[0]['result_status']) { + + if ($k2->get('studentid')) { + $rez = str_replace('{student_block}', $this->teacher_success_tpl, $rez); + } else { + $rez = str_replace('{student_block}', $this->student_success_tpl, $rez); + } + + } else { + + if ($k2->get('studentid')) { + $rez = str_replace('{student_block}', $this->teacher_answer_tpl, $rez); + } else { + $rez = str_replace('{student_block}', $this->student_answer_tpl, $rez); + } + + if ($task_arr) { + $rez = str_replace('{dateupdate}', $k2->sys->datetimeFromBase($task_arr[0]['dateupdate']), $rez); + $rez = str_replace('{answer}', $task_arr[0]['result_file'], $rez); + if ($task_arr[0]['file']) { + $rez = str_replace('{answers_file}', $this->answer_file_tpl, $rez); + $rez = str_replace('{answer_file}', $task_arr[0]['file'], $rez); + } else { + $rez = str_replace('{answers_file}', '', $rez); + } + + $rez = str_replace('{result_comments}', $task_arr[0]['result_comments'], $rez); + } else { + $rez = str_replace('{dateupdate}', '---', $rez); + $rez = str_replace('{answer}', '', $rez); + $rez = str_replace('{answers_file}', '', $rez); + } + } + + $resultid = $task_arr[0]['resultid']; + + + $answers = $courses->getAnswers($resultid); + + foreach ($answers as $val) { + $answer_text .= $k2->sys->datetimeFromBase($val['dateupdate']); + $answer_text .= $val['answer_text']; + if ($val['answer_file']) { + $answer_text .= ''; + } + $answer_text .= '
    '; + } + + $rez = str_replace('{answers_text}', $answer_text, $rez); + } + $comment = $k2->ins_comp('k2comment','make'); + $rez = str_replace('{commentform}', $comment->commentForm($resultid), $rez); + $rez = str_replace('{comments}', $comment->getComments($resultid), $rez); + $course_arr = $courses->getCourse($lesson_arr[0]['courseid']); + $k2->site->pathway->addarr( + [ + '?adm=k2courses_courses&mode=admin' => 'Мои курсы', + '?adm=k2courses_courses&mode=admin&course='.$lesson_arr[0]['courseid'] => $course_arr[0]['course_name'], + '?adm=k2courses_courses&mode=admin&lesson='.$lesson_arr[0]['lessonid'] => $lesson_arr[0]['lesson_name'], + '' => $task_arr[0]['task_name'], + ] + ); + + return $rez; + } + + + function doTask(){ + global $k2; + + if ($k2->post('result_status')){ + $rez = ['Задание засчитано!!!', 1]; + } + + $r = $k2->sql->upd( + "UPDATE k2course_results + SET + result_status=:result_status + WHERE taskid =:taskid AND studentid =:studentid ", + ['taskid'=>$k2->post('task'), 'studentid'=>$k2->post('studentid'), 'result_status'=>$k2->post('result_status')] + ); + if($r['err']!==''){ + $k2->log->err('Error Update User: '.$r['err']); + $rez = $r['err']; + + } + + $rez = json_encode($rez); + return $rez; + } + + + /** + * Роутинг кабинета + * @global type $k2 + * @return type + */ + function showCabinet(){ + global $k2; + + if ($k2->get('task') !== '') { + $rez = $this->showTaskDetail($k2->get('task')); + } elseif ($k2->get('lesson') !== '') { + $rez = $this->showTasks($k2->get('lesson')); + } elseif ($k2->get('course') !== '') { + $rez = $this->showLessons($k2->get('course')); + } else { + $rez = $this->showCourses(); + } + $not = $k2->ins_comp('k2notification'); + $rez .= $not->content(); + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + $event = $k2->get('event'); + switch ($event) + { + case "dotask": + $rez = $this->doTask(); + break; + default: + $rez = $this->showCabinet(); + } + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/k2courses_route.php b/k2shop/k2shop/app/app/k2/k2courses/k2courses_route.php new file mode 100644 index 0000000..6e76b7d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/k2courses_route.php @@ -0,0 +1,227 @@ +ins_comp2('k2phpgrid', $this); + $route = $k2->get('r'); + + if($route == 'k2courses'){ + $rez .= $this->showCourseTree(); + } elseif ($route == 'k2course_groups') { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr2 = $this->loadResYML('k2course_students'); + $rez .= $grid->simpleTable($arr2); + } elseif ($route == 'k2course_teachers') { + + $rez .= $this->showSplitter(); + } else { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + } + //$this->searchInfoFile(); + return $rez; + } + + + function showTable($route) + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + +// $grid->events = [ +// 'after_ins'=> +// [ +// [ +// 'obj'=>$this, +// 'func'=>'changeSertProt', +// 'params'=>[] +// ], +// +// ], +// 'after_upd'=> +// [ +// [ +// 'obj'=>$this, +// 'func'=>'changeSertProt', +// 'params'=>[] +// ], +// +// ] +// ]; + + return $rez; + } + + function changeSertProt($arg) + { + global $k2; + $rez = ['rez'=>'', 'err'=>'']; + $zajavkid = $arg['params']['params']['zajavkid']; + $typedocid = $arg['params']['params']['typedocid']; + $prot_num = $arg['params']['params']['prot_num']; + $sert_num = $arg['params']['params']['sert_num']; + $datedocout = $arg['params']['params']['datedocout']; + + + return $rez; + } + + + // Вывод таблиц + function showSplitter(){ + global $k2; + + $rez = $this::renderJS().$this::Splitter(); + + return $rez; + } + + // Выводит простейший сплиттер + function Splitter(){ + global $k2; + + $k2course_teachers = $this->showTable('k2course_teachers'); + $k2course_groups = $this->showTable('k2course_groups'); + $k2course_students = $this->showTable('k2course_students'); + + $splitter1 = $k2->ins_comp('k2splitter')->Splitter([ + + 'orient'=>'hor','width'=>'1400', + 'height'=>'1450','panel_size'=>'300','panel_size'=>'300', + 'panel1'=>$k2course_groups, 'panel2'=>$k2course_students + ]); + $rez = $k2->ins_comp('k2splitter')->Splitter([ + + 'orient'=>'vert', 'width'=>'1400', + 'height'=>'600', 'panel_size'=>'1200', 'panel_size'=>'350', + 'panel1'=>$k2course_teachers, 'panel2'=>$splitter1 + ]); + + + + + return $rez; + } + + + function showCourseTree() + { + global $k2; + + $arr_tree = $this->loadResYML('k2courses'); + + $report_data .= $this->showTable('k2course_tasks'); + + //$report_data .= $this->showTable('k2course_files'); + $report_data .= " + + + + + + "; + + + $report_data .= $this->showTable('k2course_results'); +// $report_data .= " +// "; + $params=[ + 'name'=>'SysTree', + + 'tree'=>[ + 'select' => 'SELECT courseid, parent_courseid, course_name, (select count(*) from k2courses pc where pc.parent_courseid = c.courseid) as ccount FROM k2courses c where (1=1) ', + 'id' => 'courseid', + 'name' => 'course_name', + 'parentid' => 'parent_courseid', + 'tablename' => 'k2courses', + 'caption' => 'Курсы', + 'sortname' => 'course_name', + //'divtable' => 'updSys1', + 'sortorder' => 'asc', + 'detile' => 'k2course_lessons,k2course_teachers', + 'fields' => $arr_tree['fields'], + ], + + + 'table' => $this->loadResYML('k2course_lessons'), + 'bootom_buttons'=>$report_data, + ]; + $report = $k2->ins_comp('k2tree_frame'); + + $rez = $report->getTreeTable($params); + + return $rez; + } + + + + // Возвращаем контент + function content(){ + global $k2; + + + + $event = $k2->get('event'); + + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/k2courses_secur.php b/k2shop/k2shop/app/app/k2/k2courses/k2courses_secur.php new file mode 100644 index 0000000..81a3fe0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/k2courses_secur.php @@ -0,0 +1,471 @@ +$courseid]; + $r = $k2->sql->sel("SELECT c.courseid, c.course_name, c.teacherid + FROM k2courses c + + + WHERE (1=1) AND c.courseid=:courseid ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $userid + * @return type + */ + public function getCourses($userid = '') { + global $k2; + + $par = ['id'=>$userid]; + $r = $k2->sql->sel("SELECT c.courseid, c.course_name, c.teacherid, u.name as teacher_name, t.user_id, par_c.course_name as parent_course + FROM k2courses c + + LEFT JOIN k2course_groups g + ON g.courseid = c.courseid + + LEFT JOIN k2course_students s + ON s.groupid = g.groupid + + LEFT JOIN k2course_teachers t + ON c.teacherid = t.teacherid + + LEFT JOIN k2users u + ON u.user_id = t.user_id + + LEFT JOIN k2courses par_c + ON par_c.courseid = c.parent_courseid + + WHERE (1=1) AND s.user_id=:id ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $courseid + * @param type $lessonid + * @return type + */ + public function getLessons($courseid = '', $lessonid = '') { + global $k2; + + $par = ['courseid'=>$courseid]; + $where = ' courseid=:courseid '; + if ($lessonid !== ''){ + $par = ['lessonid'=>$lessonid]; + $where = ' lessonid=:lessonid '; + } + $r = $k2->sql->sel("SELECT + lessonid, lesson_name, lesson_order, lesson_num, lesson_text, lesson_file, lesson_desc, lesson_time, data_link, courseid + FROM k2course_lessons + WHERE $where ORDER by lesson_order", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $lessonid + * @return type + */ + public function getFiles($lessonid = '') { + global $k2; + $r = $k2->sql->sel("SELECT + fileid, lessonid, file_name, file_link + FROM k2course_files + WHERE lessonid=:lessonid ", + ['lessonid'=>$lessonid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $lessonid + * @return type + */ + public function getLinks($lessonid = '') { + global $k2; + $r = $k2->sql->sel("SELECT + linkid, lessonid, link_name, link_link + FROM k2course_links + WHERE lessonid=:lessonid ", + ['lessonid'=>$lessonid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $lessonid + * @param type $taskid + * @return type + */ + public function getTasks($lessonid = '', $taskid = '') { + global $k2; + $r = $k2->sql->sel("SELECT + taskid, task_name, lessonid, task_order, task_desc, task_comments, task_file, task_video, status + FROM k2course_tasks + WHERE lessonid=:lessonid ORDER by task_order", + ['lessonid'=>$lessonid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $taskid + * @return type + */ + public function getTaskDetail($taskid) { + global $k2; + $r = $k2->sql->sel("SELECT + taskid, task_name, lessonid, task_order, task_desc, task_comments, task_file, task_video, status + FROM k2course_tasks + WHERE taskid=:taskid ", + ['taskid'=>$taskid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $taskid + * @param type $studentid + * @return type + */ + public function getTaskResult($taskid = '', $studentid = '') { + global $k2; + $r = $k2->sql->sel("SELECT + t.taskid, t.task_name, t.lessonid, t.task_order, t.task_desc, t.task_comments, t.task_file, t.task_video, t.status, + r.resultid, r.taskid as res_task, r.studentid, r.result_comments, r.result_file, r.result_status, r.dateupdate, r.file, + a.answer_text, a.answer_file + FROM k2course_tasks t + + LEFT JOIN k2course_results r + ON r.taskid = t.taskid + + LEFT JOIN k2course_answers a + ON r.resultid = a.resultid + + WHERE t.taskid=:taskid AND r.studentid=:studentid", + ['taskid'=>$taskid,'studentid'=>$studentid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $user_id + * @return type + */ + public function getStudentid($user_id) { + global $k2; + $r = $k2->sql->sel("SELECT + studentid + FROM k2course_students + WHERE user_id=:user_id", + ['user_id'=>$user_id]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data'][0]['studentid']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $resultid + * @return type + */ + public function getAnswers($resultid) { + global $k2; + $r = $k2->sql->sel("SELECT + answer_text, dateupdate, answer_file + FROM k2course_answers + WHERE resultid=:resultid ORDER BY dateupdate desc", + ['resultid'=>$resultid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $rez = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $lessonid + * @param type $studentid + * @return int + */ + public function checkLesson($lessonid, $studentid) { + global $k2; + + $r = $k2->sql->sel("SELECT + taskid + FROM k2course_tasks + WHERE lessonid=:lessonid ", + ['lessonid'=>$lessonid] + ); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + return; + } + $cnt_tasks = count($r['data']); + + $task_rez = 0; + foreach ($r['data'] as $key => $value) { + $rezult = $this->getTaskResult($value['taskid'], $studentid); + if ($rezult[0]['result_status']) { + $task_rez++; + } + } + $rez = 0; + if ($cnt_tasks == $task_rez && $cnt_tasks) { + $rez = 1; + } + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $taskid + * @param type $studentid + * @param type $result_file + * @return type + */ + public function doAnswer($taskid = '', $studentid = '', $result_file) { + global $k2; + + $is_rez = $this->getTaskResult($taskid, $studentid); + + if ($_FILES["answer_file"]["size"] > 1024 * 3 * 1024) { + echo("Размер файла превышает три мегабайта"); + exit; + } + $filename = $_FILES["answer_file"]["name"]; + $addpath = $k2->sys->generateUploadDir($datecreate).'/'; + $path = 'public/answer/'.$studentid.$addpath; + $k2->sys->forceDir($path); + $answer_file = null; + // Проверяем загружен ли файл + if (is_uploaded_file($_FILES["answer_file"]["tmp_name"])) { + $uploadComplete = move_uploaded_file($_FILES["answer_file"]["tmp_name"], $path.$filename); + if ($uploadComplete) { + $answer_file = $path.$filename; + } + } + if (count($is_rez) < 1){ + $resultid = $this->insTaskRez($taskid, $studentid, $result_file, $answer_file); + $rez = 'ins'; + } else { + $rez = $this->updTaskRez($taskid, $studentid, $result_file, $answer_file); + $resultid = $is_rez[0]['resultid']; + } + $insansw = $this->insAnswer($resultid, $result_file, $answer_file); + return $rez; + } + + /** + * + * @global type $k2 + * @param type $resultid + * @param type $result_file + * @return type + */ + public function insAnswer($resultid = '', $result_file, $answer_file = '') { + global $k2; + + $rez = ['rez'=>'', 'err'=>'']; + + $answerid = $this->getID(); + $r = $k2->sql->ins_arr( + ['table' => 'k2course_answers', + 'fields' => [ + 'resultid' => $resultid, + 'answerid' => $answerid, + 'answer_text' => $result_file, + 'answer_file' => $answer_file + ] + ] + ); + if($r['err']!==''){ + $rez['err'] = $r['err']; + $k2->log->err('Ошибка '.$r['err']); + } + $rez = $resultid; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $taskid + * @param type $studentid + * @param type $result_file + * @return type + */ + public function insTaskRez($taskid = '', $studentid = '', $result_file, $answer_file = '') { + global $k2; + + $rez = ['rez'=>'', 'err'=>'']; + + $resultid = $this->getID(); + $r = $k2->sql->ins_arr( + ['table' => 'k2course_results', + 'fields' => [ + 'resultid' => $resultid, + 'taskid' => $taskid, + 'studentid' => $studentid, + 'result_file' => $result_file, + 'file' => $answer_file + ] + ] + ); + if($r['err']!==''){ + $rez['err'] = $r['err']; + $k2->log->err('Ошибка '.$r['err']); + } + $rez = $resultid; + return $rez; + } + + /** + * + * @global type $k2 + * @param type $taskid + * @param type $studentid + * @param type $result_file + * @return type + */ + public function updTaskRez($taskid = '', $studentid = '', $result_file, $answer_file = '') { + global $k2; + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->upd( + "UPDATE k2course_results + SET + result_file=:result_file, + file=:file + WHERE taskid=:taskid AND studentid=:studentid", + [ + 'taskid' => $taskid, + 'studentid' => $studentid, + 'result_file' => $result_file, + 'file' => $answer_file + ] + ); + if($r['err']!==''){ + $k2->log->err('Ошибка '.$r['err']); + $rez['err'] = $r['err']; + } + return $rez; + } + + +} + + function init_courses(){ + global $k2; + + if (!isset($courses)){ + $courses = new k2courses_secur(); + $GLOBALS['courses'] = $courses; + } + } + +// Инициализация +init_courses(); \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/info.yml b/k2shop/k2shop/app/app/k2/k2courses/res/info.yml new file mode 100644 index 0000000..56b87d9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2courses" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_answers.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_answers.yml new file mode 100644 index 0000000..e108d5e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_answers.yml @@ -0,0 +1,51 @@ +select: + SELECT answerid, resultid, answer_text, dateupdate + + FROM k2course_answers + +where: "where (resultid='{masterid}')" +getmaster: true +masterid: resultid +table: k2course_answers +height: 250 +rows: 10 +sortname: answerid +sortorder: asc +caption: Ответы +readonly_form: + 0: answer_text + +fields: + answerid: + field: answerid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + resultid: + field: resultid + caption: Результат + width: 250 + readonly: true + hidden: true + align: left + answer_text: + field: answer_text + caption: Ответ + width: 250 + readonly: false + hidden: true + align: left + type_field: wysiwyg + dateupdate: + field: dateupdate + caption: Изменено + width: 75 + readonly: false + hidden: false + align: left + type_field: datetime + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_files.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_files.yml new file mode 100644 index 0000000..627abc2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_files.yml @@ -0,0 +1,39 @@ +select: SELECT fileid, lessonid, file_name, file_link FROM k2course_files +where: "where (lessonid='{masterid}')" +getmaster: true +masterid: lessonid +table: k2course_files +height: 250 +is_export: false +rows: 10 +sortname: fileid +sortorder: asc +caption: Файлы уроков +fields: + fileid: + field: fileid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + file_name: + field: file_name + caption: Название + width: 250 + readonly: false + hidden: false + align: left + + file_link: + field: file_link + caption: Файл + width: 250 + readonly: false + align: left + type_field: file + params: + height: 100 + upload_dir: 'public/img' \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_groups.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_groups.yml new file mode 100644 index 0000000..445155a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_groups.yml @@ -0,0 +1,53 @@ +select: + SELECT g.groupid, g.group_name, g.courseid, g.teacherid FROM k2course_groups g +where: "where (g.teacherid='{masterid}')" +getmaster: true +masterid: teacherid +table: k2course_groups +height: 220 +rows: 10 +sortname: group_name +sortorder: asc +detile: k2course_students +caption: Групы +sum: + group_name: count +fields: + compnameid: + field: groupid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + group_name: + field: group_name + caption: Название группы + width: 250 + readonly: false + hidden: false + align: left + form_width: 300 +# formoptions: +# colpos: 2 +# colspan: 4 + + courseid: + field: courseid + caption: Курс + width: 350 + readonly: false + hidden: false + align: left + type_field: DropDown + multy: false + sql: + SELECT c1.courseid as k, CONCAT(c3.course_name,'/',c2.course_name,'/',c1.course_name) as v + FROM k2courses c1 + LEFT JOIN k2courses c2 + ON c2.courseid = c1.parent_courseid + LEFT JOIN k2courses c3 + ON c3.courseid = c2.parent_courseid + ORDER BY c3.course_name DESC \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_lessons.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_lessons.yml new file mode 100644 index 0000000..1afa8d3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_lessons.yml @@ -0,0 +1,193 @@ +select: SELECT lessonid, lesson_order, lesson_num, lesson_name, lesson_text, lesson_file, lesson_time, courseid, data_link, datecreate, dateupdate, usercreate, userupdate, active FROM k2course_lessons +table: k2course_lessons +where: "where (courseid='{masterid}')" +getmaster: true +masterid: courseid +height: 220 +rows: 10 +form_width: 1400 +sortname: lesson_order +detile: k2course_tasks,k2course_files,k2course_links +sortorder: desc +caption: Уроки +rowactions: false +is_show: false +sum: + lesson_time: sum +readonly_form: + 0: lesson_text +footer: true +fields: + lessonid: + field: lessonid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + show_file: + field: show_file + caption: П + width: 100 + hidden: false + readonly: true + sortable: false + search: false + align: center + type_field: condition + cond: + class: anone + exp: (false) + url2: '/?adm=k2courses_courses&mode=admin&lesson={lessonid}' + target2: _blank + caption2: '' + lesson_num: + field: lesson_num + caption: № + width: 50 + readonly: false + hidden: false + align: right + + lesson_order: + field: lesson_order + caption: Порядок + width: 75 + readonly: false + hidden: false + align: right + + lesson_name: + field: lesson_name + caption: Название + width: 150 + readonly: false + hidden: false + align: left + + # lesson_desc: + # field: lesson_desc + # caption: Описание + # width: 250 + # readonly: false + # hidden: false + # align: left + + lesson_text: + field: lesson_text + caption: Текст урока + width: 250 + readonly: false + hidden: true + align: left + type_field: wysiwyg + +# lesson_file: +# field: lesson_file +# caption: Файл урока +# width: 150 +# readonly: false +# align: left +# type_field: file +# params: +# height: 100 +# upload_dir: 'public/img' + translate: + field: translate + caption: Файлы урока + width: 100 + readonly: true + align: center + type_field: condition + cond: + exp: '(false)' + target2: _self + caption2: "" + + translate2: + field: translate2 + caption: Ссылка на материалы + width: 140 + readonly: true + align: center + type_field: condition + cond: + exp: '(false)' + target2: _self + caption2: "" + + lesson_time: + field: lesson_time + caption: Время урока
    мин + width: 130 + readonly: false + align: right + hidden: false + + # data_link: + # field: data_link + # caption: Ссылка на материалы + # width: 230 + # readonly: false + # align: right + # hidden: false + +# usercreate: +# field: usercreate +# caption: Создал +# width: 130 +# readonly: false +# align: right +# hidden: false +# +# userupdate: +# field: userupdate +# caption: Изменил +# width: 130 +# readonly: false +# align: right +# hidden: false + + courseid: + field: courseid + caption: Цена + width: 130 + readonly: true + align: right + hidden: true + active: + field: active + caption: Акт + width: 60 + readonly: false + hidden: false + align: center + type_field: checkbox +# datecreate: +# field: datecreate +# alias: datecreate +# caption: Дата создания +# width: 75 +# readonly: false +# align: center +# type_field: datetime +# # Записывать данных для событий: ins - вставка, upd - изменение +# op: ins +# def_value: <%Now%> +# width_form: 120 +# disabled: true +# +# dateupdate: +# field: dateupdate +# alias: datecreate +# caption: Дата изменения +# width: 75 +# readonly: false +# align: center +# type_field: datetime +# # Записывать данных для событий: ins - вставка, upd - изменение +# op: ins +# def_value: <%Now%> +# width_form: 120 +# disabled: true \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_level.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_level.yml new file mode 100644 index 0000000..088d400 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_level.yml @@ -0,0 +1,57 @@ +select: SELECT sysid, filename, comment, datecreate, dateupdate, is_del, versionid, compverid FROM updFiles +where: +table: updFiles +height: 250 +sortname: sysid +sortorder: asc +caption: Файлы обновления +fields: + sysid: + field: sysid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + filename: + field: filename + caption: Название + width: 250 + readonly: false + hidden: false + align: left + + comment: + field: comment + caption: Комментарий + width: 250 + readonly: false + hidden: false + align: left + + datecreate: + field: datecreate + caption: Дата создания + width: 130 + readonly: true + align: center + daf_value: date("d.m.Y") + type_field: datetime + + dateupdate: + field: dateupdate + caption: Дата обновления + width: 130 + readonly: true + align: center + type_field: datetime + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_links.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_links.yml new file mode 100644 index 0000000..98c2417 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_links.yml @@ -0,0 +1,36 @@ +select: SELECT linkid, lessonid, link_name, link_link FROM k2course_links +where: "where (lessonid='{masterid}')" +getmaster: true +masterid: lessonid +table: k2course_links +height: 250 +is_export: false +rows: 10 +sortname: linkid +sortorder: asc +caption: Ссылки уроков +fields: + linkid: + field: linkid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + link_name: + field: link_name + caption: Название + width: 250 + readonly: false + hidden: false + align: left + + link_link: + field: link_link + caption: Ссылка + width: 250 + readonly: false + align: left + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_results.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_results.yml new file mode 100644 index 0000000..cbd7842 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_results.yml @@ -0,0 +1,136 @@ +select: + SELECT r.resultid, r.taskid, r.studentid, r.result_comments, r.result_file, r.result_status, r.dateupdate + + FROM k2course_results r + + LEFT JOIN k2course_tasks t + ON t.taskid = r.taskid + + LEFT JOIN k2course_lessons l + ON l.lessonid = t.lessonid + + LEFT JOIN k2course_groups g + ON l.courseid = g.courseid + +# LEFT JOIN k2course_students s +# ON s.groupid = g.groupid + +where: "where (r.taskid='{masterid}')" +getmaster: true +masterid: taskid +table: k2course_results +height: 250 +rows: 10 +sortname: taskid +detile: k2course_answers +sortorder: asc +caption: Результаты +grid_onload: 'setColors("result_status", "0", true)' +fields: + resultid: + field: resultid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + show_file: + field: show_file + caption: П + width: 150 + hidden: false + readonly: true + sortable: false + search: false + align: center + type_field: condition + cond: + class: anone + exp: (false) + url2: '/?adm=k2courses_courses&mode=admin&task={taskid}&&studentid={studentid}' + target2: _blank + caption2: '' + + taskid: + field: taskid + caption: Задание + width: 250 + readonly: true + hidden: false + align: left + type_field: DropDown + multy: false + sql: + + SELECT taskid as k, task_name as v + FROM k2course_tasks + + studentid: + field: studentid + caption: Студент + width: 250 + readonly: false + hidden: false + align: left + type_field: DropDown + multy: false + sql: + + SELECT s.studentid as k, CONCAT(u.name,' | ',g.group_name) as v + FROM k2course_students s + + LEFT JOIN k2users u + ON u.user_id = s.user_id + + LEFT JOIN k2course_groups g + ON s.groupid = g.groupid + + where u.roleid = "cb0548d236e28b0c5e656df100613507" + +# result_comments: +# field: result_comments +# caption: Комментарий +# width: 250 +# readonly: false +# hidden: false +# align: left +# +# result_file: +# field: result_file +# caption: Ответ +# width: 250 +# readonly: false +# hidden: true +# align: left +# type_field: wysiwyg +# translate: +# field: translate +# caption: Ответы +# width: 100 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: '(false)' +# target2: _self +# caption2: "" + + result_status: + field: result_status + caption: Статус + width: 75 + readonly: false + hidden: false + align: center + type_field: checkbox + dateupdate: + field: dateupdate + caption: Изменено + width: 125 + readonly: false + hidden: false + align: center + type_field: datetime + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_students.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_students.yml new file mode 100644 index 0000000..138093e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_students.yml @@ -0,0 +1,32 @@ +select: SELECT studentid, user_id, groupid FROM k2course_students +where: "where (groupid='{masterid}')" +getmaster: true +masterid: groupid +table: k2course_students +height: 250 +rows: 10 +sortname: studentid +sortorder: asc +caption: Студенты +fields: + versionid: + field: studentid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + user_id: + field: user_id + caption: User + width: 250 + readonly: false + hidden: false + align: left + type_field: DropDown + multy: false + sql: + SELECT user_id as k, login as v + FROM k2users \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_tasks.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_tasks.yml new file mode 100644 index 0000000..9b62971 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_tasks.yml @@ -0,0 +1,78 @@ +select: SELECT taskid, task_name, lessonid, task_order, task_desc, task_comments, task_file, task_video, status, active FROM k2course_tasks +where: "where (lessonid='{masterid}')" +getmaster: true +masterid: lessonid +table: k2course_tasks +height: 100 +rows: 10 +form_width: 1400 +detile: k2course_results +sortname: task_order +sortorder: asc +caption: Задания к урокам +readonly_form: + 0: task_file +fields: + taskid: + field: taskid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + task_order: + field: task_order + caption: № + width: 50 + readonly: false + hidden: false + align: right + task_name: + field: task_name + caption: Название + width: 300 + readonly: false + hidden: false + align: left + + # task_desc: + # field: task_desc + # caption: Описание + # width: 250 + # readonly: false + # hidden: false + # align: left + # type_field: textarea + + lessonid: + field: lessonid + caption: Урок + width: 150 + readonly: true + hidden: true + align: left + + task_file: + field: task_file + caption: Тект задания + width: 250 + readonly: false + hidden: true + type_field: wysiwyg + active: + field: active + caption: Акт + width: 60 + readonly: false + hidden: false + align: center + type_field: checkbox +# status: +# field: status +# caption: Статус +# width: 75 +# readonly: false +# hidden: false +# align: left +# type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_teachers.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_teachers.yml new file mode 100644 index 0000000..a4303e7 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_teachers.yml @@ -0,0 +1,31 @@ +select: SELECT teacherid, user_id FROM k2course_teachers +where: +table: k2course_teachers +height: 250 +sortname: user_id +detile: k2course_groups +sortorder: asc +caption: Кураторы +fields: + teacherid: + field: teacherid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + user_id: + field: user_id + caption: User + width: 250 + readonly: false + hidden: false + align: left + type_field: DropDown + multy: false + sql: + SELECT user_id as k, login as v + FROM k2users + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2course_teachers1.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_teachers1.yml new file mode 100644 index 0000000..080094e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2course_teachers1.yml @@ -0,0 +1,32 @@ +select: SELECT teacherid, courseid, user_id FROM k2course_teachers +where: "where (courseid='{masterid}')" +getmaster: true +masterid: courseid +table: k2course_teachers +height: 250 +sortname: user_id +sortorder: asc +caption: Кураторы +fields: + teacherid: + field: teacherid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + user_id: + field: user_id + caption: User + width: 250 + readonly: false + hidden: false + align: left + type_field: DropDown + multy: false + sql: + SELECT user_id as k, login as v + FROM k2users + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/k2courses.yml b/k2shop/k2shop/app/app/k2/k2courses/res/k2courses.yml new file mode 100644 index 0000000..c71fab6 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/k2courses.yml @@ -0,0 +1,69 @@ +select: SELECT courseid, parent_courseid, course_name, active FROM k2courses +where: +table: k2courses +height: 250 +sortname: sysid +detile: k2course_lessons,k2course_teachers +sortorder: asc +caption: Системы +fields: + courseid: + field: courseid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + parent_courseid: + field: parent_courseid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + setteacher: + field: setteacher + caption: Куратор + width: 150 + readonly: true + align: center + type_field: condition + cond: + exp: '(false)' + target2: _self + caption2: "" + + active: + field: active + caption: Акт + width: 60 + readonly: false + hidden: false + align: center + type_field: checkbox + +# teacherid: +# field: teacherid +# caption: Куратор +# width: 250 +# readonly: false +# hidden: false +# align: left +# type_field: DropDown +# multy: false +# sql: +# SELECT null AS k, '_' AS v +# +# UNION +# +# SELECT t.teacherid as k, u.name as v +# FROM k2users u +# +# LEFT JOIN k2course_teachers t +# ON t.user_id = u.user_id + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/menu.yml b/k2shop/k2shop/app/app/k2/k2courses/res/menu.yml new file mode 100644 index 0000000..544c03e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/menu.yml @@ -0,0 +1,63 @@ +0: + category: + parent: root + name: k2courses + caption: Курсы + iconclass: fa fa-database + + elements: + k2courses: + name: k2courses + caption: Курсы + url: "?adm=k2courses_route&r=k2courses" + command: + iconclass: fa fa-database + + k2course_teachers: + name: k2course_teachers + caption: Кураторы + url: "?adm=k2courses_route&r=k2course_teachers" + command: + iconclass: fa fa-database + +# k2course_students: +# name: k2course_students +# caption: Студенты +# url: "?adm=k2courses_route&r=k2course_students" +# command: +# iconclass: fa fa-database + +# k2course_groups: +# name: k2course_groups +# caption: Группы +# url: "?adm=k2courses_route&r=k2course_groups" +# command: +# iconclass: fa fa-database + +# k2course_level: +# name: k2course_level +# caption: Уровни +# url: "?adm=k2courses_route&r=k2course_level" +# command: +# iconclass: fa fa-database + +# k2course_lessons: +# name: k2course_lessons +# caption: Уроки +# url: "?adm=k2courses_route&r=k2course_lessons" +# command: +# iconclass: fa fa-database +# +# k2course_tasks: +# name: k2course_tasks +# caption: Задания +# url: "?adm=k2courses_route&r=k2course_tasks" +# command: +# iconclass: fa fa-database +# +# k2course_results: +# name: k2course_results +# caption: Результаты +# url: "?adm=k2courses_route&r=k2course_results" +# command: +# iconclass: fa fa-database diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/menu_student.yml b/k2shop/k2shop/app/app/k2/k2courses/res/menu_student.yml new file mode 100644 index 0000000..d4d44c6 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/menu_student.yml @@ -0,0 +1,14 @@ +0: + category: + parent: root + name: k2courses + caption: Мои тренинги + iconclass: fa fa-database + url: "?adm=k2courses_courses&mode=admin" +#1: +# category: +# parent: root +# name: k2courses2 +# caption: Сообщения +# iconclass: fa fa-database +# url: "?adm=k2courses_courses&mode=admin" diff --git a/k2shop/k2shop/app/app/k2/k2courses/res/menu_teacher.yml b/k2shop/k2shop/app/app/k2/k2courses/res/menu_teacher.yml new file mode 100644 index 0000000..05b3aa7 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/res/menu_teacher.yml @@ -0,0 +1,20 @@ +0: + category: + parent: root + name: k2courses + caption: Курсы + iconclass: fa fa-database + url: "?adm=k2courses_route&r=k2courses&mode=admin" + command: + +1: + category: + parent: root + name: k2courses + caption: Мои тренинги + iconclass: fa fa-database + url: "?adm=k2courses_courses&mode=admin" + + + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2courses/ver.yml b/k2shop/k2shop/app/app/k2/k2courses/ver.yml new file mode 100644 index 0000000..582c55f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2courses/ver.yml @@ -0,0 +1,2 @@ +comp_name: "k2updates" +version: 1.1.1.1 diff --git a/k2shop/k2shop/app/app/k2/k2customoffice/k2customoffice.php b/k2shop/k2shop/app/app/k2/k2customoffice/k2customoffice.php new file mode 100644 index 0000000..2c79ad1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2customoffice/k2customoffice.php @@ -0,0 +1,58 @@ +ins_comp('k2auth','regform'); + echo $rez=$authform->change(); + + }elseif (trim($comm)=='bonus_acc'){ + + echo $this->Translate("{lnBonusAccount}")."...."; + $rez=true; + + }elseif (trim($comm)=='mymoney'){ + + echo $this->Translate("{lnMyPurses}")."..."; + $rez=true; + + }elseif (trim($comm)=='myhistory'){ + + echo $this->Translate("{lnOperationsHistory}")."..."; + $rez=true; + + }elseif (trim($comm)=='myticket'){ + + echo $this->Translate("{lnMyTickets}")."..."; + $rez=true; + + } + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/en.csv b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/en.csv new file mode 100644 index 0000000..b73fbb5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/en.csv @@ -0,0 +1,5 @@ +name| value +lnBonusAccount| Bonus account +lnMyPurses| My purses +lnOperationsHistory| Operations history +lnMyTickets| My tickets \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/fr.csv b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/fr.csv new file mode 100644 index 0000000..da31af2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/fr.csv @@ -0,0 +1,5 @@ +name| value +lnBonusAccount| Compte Bonus +lnMyPurses| Mes sacs à main +lnOperationsHistory| Historique des transactions +lnMyTickets| Mes billets \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/ru.csv b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/ru.csv new file mode 100644 index 0000000..bccd707 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/ru.csv @@ -0,0 +1,5 @@ +name|value +lnBonusAccount| Бонусный счет +lnMyPurses| Мои кошельки +lnOperationsHistory| История операций +lnMyTickets| Мои тикеты \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/ua.csv b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/ua.csv new file mode 100644 index 0000000..f67c891 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2customoffice/lng/k2customoffice/ua.csv @@ -0,0 +1,5 @@ +name| value +lnBonusAccount| Бонусний рахунок +lnMyPurses| Мої гаманці +lnOperationsHistory| Історія операцій +lnMyTickets| Мої тікети \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2install/bg.png b/k2shop/k2shop/app/app/k2/k2install/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..e64a8c79824fbd345a4422777fb9238d3018bf35 GIT binary patch literal 8212 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.'/k2shop/k2shop/app/licenz.txt'; + $lic = file_get_contents($filename); + + + $return = ' +
    + + +

    +   + * +
    + +

    +
    ' ; + + return $return ; + } + + function echoResult( $result ) { + $str = split( ".::." ,$result); + $return = ' +
    +
    + Настройка завершена ! +
    +
    +
    + Информация о Вашем аккаунте:

    +
      +
    • + Логин: '.$str[0].' +
      + Email: '.$str[1].' +
    • +
    +
    +
    + Ваши настройки:

    +
      +
    • +  Обновления продукта +
      +  Предложения +
      +  Новости о системе +
      +
    • +
    +



    + К Вам придет электронное сообщение по электронной почте с ссылкой на активацию аккаунта. + +
    +
    ' ; + + return $return ; + } + + + + // Создание администратора + function createAdmin(){ + + global $k2; + + require_once $k2->kool->KoolControlsFolderAbs."/KoolSlideMenu/koolslidemenu.php"; + require_once $k2->kool->KoolControlsFolderAbs."/KoolAjax/koolajax.php"; + + if ($koolajax->isCallback) { + sleep(1); + } + + + $ksm = new KoolSlideMenu("ksm"); + + $ksm->scriptFolder = $k2->kool->KoolControlsFolder."/KoolSlideMenu"; + $ksm->styleFolder = $k2->kool->KoolControlsFolder."KoolSlideMenu/styles/darkgray"; + + $ksm_expand = $ksm->addParent("root","step1","Шаг 1: Информация о администраторе"); + $ksm->addPanel( "step1", "Pstep1" , $this->echoStep1() ) ; + $ksm_expand->expand = true ; + + $ksm->addParent("root","step2","Шаг 2: Информация о подключении, настройки сайта "); + $ksm->addPanel( "step2", "Pstep2" , $this->echoStep2() ) ; + + $ksm->addParent("root","step3","Шаг 3: Лицензионное соглашение "); + $ksm->addPanel( "step3", "Pstep3" , $this->echoStep3() ) ; + + $ksm->singleExpand = true; + $ksm->width="800px"; + + $regisForm = new UpdatePanel( "regisForm" ) ; + $regisForm->setLoading($k2->kool->KoolControlsFolder."/koolajax/loading/1.gif" , "white" , 50 ); + $stepDone = ( $k2->post("task")<>'' && $k2->post("task") == "done" ) ? true : false ; + + if( $stepDone ) { + $return = '
    +
    Установка системы

    +
    '; + + $return .= $this->echoResult($k2->post("data" )) ; + + $return .= '
    '; + }else{ + $return = ' +
    +
    Установка системы Корпорация 2 (К2®)

    +
    '. $ksm->Render(). + '
    + + + +
    '; + } + + $regisForm->cssclass = "cssRegisForm" ; + $regisForm->content= $return ; + + ?> + + Render();?> + Render();?> + + + + + + createAdmin(); + + + return $rez; + } + + function show(){ + echo $this->content(); + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2install/k2regfunc.js b/k2shop/k2shop/app/app/k2/k2install/k2regfunc.js new file mode 100644 index 0000000..1ee2331 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2install/k2regfunc.js @@ -0,0 +1,80 @@ + + +function OnBeforeExpand_handle(sender,arg) +{ + if ( arg.ItemId == 'step2' ){ + if( step1ok.indexOf( "0" ) > -1 ){ + alert( "You must finish step 1 before continuousing with step 2" ); + return false; + }else{ + document.getElementById( "wstep2" ).className = "showw" ; + return true; + } + }else if ( arg.ItemId == 'step3' ){ + if( !step2ok ){ + alert( "You must finish step 2 before continuousing with step 3" ); + return false; + }else{ + document.getElementById( "wstep3" ).className = "showw" ; + return true; + } + }else if ( arg.ItemId == 'step1' ){ + return true; + } +} +function checkAccName() +{ + txtname = document.getElementById( "txtName" ).value ; + checkArr = step1ok.split( "" ); + if ( txtname.length > 4 ){ + document.getElementById( "accNoteWord" ).innerHTML = "" ; + checkArr[0] = "1" ; + }else{ + document.getElementById( "accNoteWord" ).innerHTML = "Account Name must more than 4 characters." ; + checkArr[0] = "0" ; + } + step1ok = checkArr[0] + checkArr[1] + checkArr[2] + checkArr[3] ; +} + +function checkAccPass() +{ + txtpass = document.getElementById( "txtPass" ).value ; + checkArr = step1ok.split( "" ); + if ( txtpass.length > 4 ){ + document.getElementById( "passNoteWord" ).innerHTML = "" ; + checkArr[1] = "1" ; + }else{ + document.getElementById( "passNoteWord" ).innerHTML = "Password must more than 4 characters." ; + checkArr[1] = "0" ; + } + step1ok = checkArr[0] + checkArr[1] + checkArr[2] + checkArr[3] ; +} +function checkAccCfmPass() +{ + txtcfmpass = document.getElementById( "txtRepass" ).value ; + txtpass = document.getElementById( "txtPass" ).value ; + checkArr = step1ok.split( "" ); + if ( txtcfmpass == txtpass ){ + document.getElementById( "repassNoteWord" ).innerHTML = "" ; + checkArr[2] = "1" ; + }else{ + document.getElementById( "repassNoteWord" ).innerHTML = "Password and confirm pass does not match." ; + checkArr[2] = "0" ; + } + step1ok = checkArr[0] + checkArr[1] + checkArr[2] + checkArr[3] ; +} +function checkEmail() +{ + txtmail = document.getElementById( "txtMail" ).value ; + checkArr = step1ok.split( "" ); + checkMail = false ; + var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i; + if ( txtmail.search(emailRegEx) == -1 ){ + }else{ + checkMail = true ; + } + document.getElementById( "mailNoteWord" ).innerHTML = ( checkMail ) ? "" : "Email is not valid." ; + checkArr[3] = ( checkMail ) ? "1" : "0" ; + step1ok = checkArr[0] + checkArr[1] + checkArr[2] + checkArr[3] ; +} + diff --git a/k2shop/k2shop/app/app/k2/k2news/k2news.php b/k2shop/k2shop/app/app/k2/k2news/k2news.php new file mode 100644 index 0000000..2235167 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2news/k2news.php @@ -0,0 +1,235 @@ +{title}
    {short_description}
    '; // Шаблон новостей + public $content=''; // Контент + + public $save; // Компонента сохранения данных + + + // Выдет внешний вид кнопки + function editLinks(){ + + global $k2; + + $p=$k2->get('p'); + + + $addico=$k2->ico->add_news(); + $editico=$k2->ico->edit_news(); + $delico=$k2->ico->del_news(); + + $rez=''; + + if (($k2->auth->isAdmin()) and ($k2->auth->isDesignMode())){ + $rez.="Добавить
    "; + + // &type=sub + } + + /* + + + ."Редактировать   " + ."Удалить    + + + */ + + + + return $rez; + + } + + + // Кнопки для администрирования + 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 editLinksNews(){ + + global $k2; + + $p=$k2->get('p'); + + + $addico=$k2->ico->add_news(); + $editico=$k2->ico->edit_news(); + $delico=$k2->ico->del_news(); + + $rez=''; + + if (($k2->auth->isAdmin()) and ($k2->auth->isDesignMode())){ + $rez.="Редактировать   " + ."Удалить   "; + } + + + return $rez; + + } + + + // Вывод списка новостей + // $p - ParentContent + function showNews($p){ + + global $k2; + + //$rez="Выводим список новостей..."; + + + $sql = "SELECT contentid, title, descript, keywords, content, h1, short_description FROM k2content WHERE (parentcontent='$p')"; + + $rez=''; + + // Выводим строки + foreach ($k2->db->query($sql) as $row) { + + $s=$this->template_news; + + $s=str_replace('{title}', $row['title'], $s); + $s=str_replace('{descript}', $row['descript'], $s); + $s=str_replace('{short_description}', $row['short_description'], $s); + $s=str_replace('{h1}', $row['h1'], $s); + $s=str_replace('{keywords}', $row['keywords'], $s); + $s=str_replace('{content_news}', $row['content'], $s); + + + // Кнопки редактирования + $s=str_replace('{content_news}', $row['content'], $s); + + + // Кнопки редактирования + $s=str_replace('{edit_news}', $this->editLinksNews(), $s); + + + $rez.=$s; + + break; + } + + + + return $rez; + } + + + + + + + + // Редактирование + function edit(){ + + return "Редактирование будет..."; + + } + + + // Добавление + function add(){ + + return "Вставка будет..."; + + } + + + // Удаление + function del(){ + + return "Удаление будет..."; + + } + + + + + + + // Выполнение операции с контентом + function oper(){ + + global $k2; + + $rez=''; + $c=$k2->get('c'); + + if ($c=='edititem'){ // Редактировать элемент + + $rez=$this->edit(); + + }elseif ($c=='additem'){ // Добавить элемент + + $rez=$this->add(); + + }elseif ($c=='delitem'){ // Удалить элемент + + $rez=$this->del(); + + } + + + return $rez; + } + + + + + function content(){ + + global $k2; + + $cont=''; + $rez=''; + $c=$k2->get('c'); + + if (trim($c)==''){ + + $rez=str_replace('{content}', $cont, $this->template); + + $this->admButtons($rez); + + + $rez.=$this->showNews($k2->get('p')); + + }else{ + + $rez=$this->oper(); + + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2news/res/info.yml b/k2shop/k2shop/app/app/k2/k2news/res/info.yml new file mode 100644 index 0000000..5f4e506 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2news/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2news" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2package/k2package.php b/k2shop/k2shop/app/app/k2/k2package/k2package.php new file mode 100644 index 0000000..a438162 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/k2package.php @@ -0,0 +1,50 @@ +auth->isSuperAdmin()){ + $arr = []; + }else{ + $arr = $this->loadResYML('menu'); + } + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2package'){ + return; + } + + $comp = $k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/k2package_route.php b/k2shop/k2shop/app/app/k2/k2package/k2package_route.php new file mode 100644 index 0000000..0e67128 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/k2package_route.php @@ -0,0 +1,76 @@ + 'board_connection']; + protected $frame_comp; + protected $data_comp; + + public $arr_comppath = [ + 'k2shop/k2shop/app/app/k2/', + 'k2shop/k2shop/app/app/' + ]; + + + + + function showUpdateTables() + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $grid->db=$this->db; + $route = $k2->get('t'); + + if ($route == 'k2package') { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr2 = $this->loadResYML('k2services_package'); + $rez .= $grid->simpleTable($arr2); + } elseif ($route == 'k2packs'){ + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr3 = $this->loadResYML('k2packs_ads'); + $rez .= $grid->simpleTable($arr3); + $arr2 = $this->loadResYML('k2services_packs'); + $rez .= $grid->simpleTable($arr2); + + } elseif ($route == 'k2pack_user'){ + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + + //print_r($arr); + //$arr2 = $this->loadResYML('k2services_package'); + //$rez .= $grid->simpleTable($arr2); + } else { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + } + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + + $event = $k2->get('event'); + + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/k2package_show.php b/k2shop/k2shop/app/app/k2/k2package/k2package_show.php new file mode 100644 index 0000000..94ef9ba --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/k2package_show.php @@ -0,0 +1,814 @@ + + .actives{ + border: 1px solid #f96d10!important; + box-shadow: 0 0 10px rgba(0,0,0,0.5); + } + .totalsum{ + font-size: 24px; + color: #f96d10; + } + .totaltext{ + font-size: 24px; + float: left + } + .paybtn{ + float: right; + font-size: 22px; + } + +

    Выберите пакет услуг


    +
    +
    + {onepackage} +
    +
    +

    Всего к оплате: грн.

    + + +
    + '; + + public $onepackage_tpl = ' + +
    +
    +
    + +

    {package_name}

    +
    + + +
    + +
    '; + + public $services_tpl = ' +
  • + {service_name} - {cnt} дней +
  • + '; + + public $packs_tpl = ' +

    Выберите месячный пакет на размещение объявлений.


    +
    +
    + {onepackage} +
    +
    +

    Всего к оплате: грн.

    + + +
    + '; + + public $onepacks_tpl = ' + +
    +
    +
    + +

    {pack_name}

    + +
    + + +
    + +
    '; + public $service_tpl = ' +
  • + {service_name} - {cnt} дней +
  • + '; + + public $colads_tpl =''; + public $step2_tpl = ' +
    +
    +
    +

    1. Пакет - {package_name}. Цена - {price}грн.

    + + + изменить выбор + +
    +

    +
    +

    Виберите способ оплаты.



    + {paysys} +
    +
    + '; + public $step2pack_tpl = ' +
    +
    +
    +

    1. Пакет - {package_name}. Цена - {price}грн.

    + + + изменить выбор + +
    +

    +
    +

    Виберите способ оплаты.



    + {paysys} +
    +
    + '; + public $paysys_tpl = ' + +
    +
    +
    + +

    {pay_systemname}

    +
    +
    + {pays} +
    + +
    + +
    + '; + + public $packs_info_tpl = '

    Оформлен пакет: {pack_name}. Осталось возможность разместить {cnt_ads} объявлений .

    '; + public $nopacks_tpl = '

    У Вас нет оформленных пакетов. Вы не можете размещать объявления. Выбрать пакет

    '; + + /** + * получение рекламных компаний + * @global type $k2 + * @return type + */ + function getPackages($packageid = ''){ + global $k2; + $par = []; + + $and = ''; + if ($packageid !== '') { + $and = ' and p.packageid = "'.$packageid.'" '; + } + $r = $k2->sql->sel("SELECT p.packageid, p.package_name, p.image, p.price, p.descript, p.active, s.service_name, sp.cnt + FROM k2package p + + LEFT JOIN k2services_package sp + ON sp.packageid = p.packageid + + LEFT JOIN k2services s + ON sp.serviceid = s.serviceid + + WHERE (1=1) AND p.active = 1 $and ORDER BY p.ord", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + $check_arr = []; + $pack_arr = []; + + foreach ($r['data'] as $value) { + $add_arr = [ + 'packageid'=>$value['packageid'], + 'package_name'=>$value['package_name'], + 'image'=>$value['image'], + 'price'=>$value['price'], + 'descript'=>$value['descript'], + 'service_name'=>$value['service_name'], + 'cnt'=>$value['cnt'] + ]; + if (!in_array($value['packageid'], $check_arr)) { + array_push($check_arr, $value['packageid']); + $pack_arr[$value['packageid']] = [ + $add_arr + ]; + } else { + array_push($pack_arr[$value['packageid']], $add_arr); + } + } + //print_r($check_arr); + //print_r($pack_arr); + + $rez = $pack_arr; + return $rez; + } + + function addUserAds(){ + global $k2; + $userid = $k2->auth->userid; + $r = $k2->sql->upd("UPDATE k2pack_user SET act_ads=act_ads+1 WHERE user_id=:user_id and active=1", ['user_id'=>$userid]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + } + } + + function isUserPacks(){ + global $k2; + $userid = $k2->auth->userid; + + $findpack = $k2->sql->sel('SELECT pu.cnt, pu.act_ads FROM k2pack_user pu WHERE pu.user_id=:user_id AND pu.active=1', ['user_id'=>$userid]); + if ($findpack['data'] == []) { + $rez = 0; + } else { + $rez = 0; + if($findpack['data'][0]['cnt'] > $findpack['data'][0]['act_ads']){ + $rez = 1; + } + } + if(!$this->is_pack){ + $rez = 0; + } + return $rez; + } + + function packsInfo(){ + global $k2; + $userid = $k2->auth->userid; + + $findpack = $k2->sql->sel('SELECT pu.cnt, pu.act_ads, p.pack_name + FROM k2pack_user pu + LEFT JOIN k2packs_ads pa + ON pa.packadsid = pu.packadsid + + LEFT JOIN k2packs p + ON p.packid = pa.packid + + WHERE pu.user_id=:user_id AND pu.active=1', ['user_id'=>$userid]); + //print_r($findpack['data']); + if (!$this->is_pack) { + $rez = ''; + } else { + if ($findpack['data'] == []) { + $rez = $this->nopacks_tpl; + } else { + $rez = $this->packs_info_tpl; + $rez = $this->replArrMask($rez, $findpack['data'][0]); + $rez = str_replace('{cnt_ads}', $findpack['data'][0]['cnt']-$findpack['data'][0]['act_ads'], $rez); + if($findpack['data'][0]['cnt'] <= $findpack['data'][0]['act_ads']){ + $rez = $this->nopacks_tpl; + } + } + } + return $rez; + } + function getPacks($packid = '', $packadsid = ''){ + global $k2; + $par = []; + + $and = ''; + if ($packid !== '') { + $and = ' and p.packid = "'.$packid.'" and ad.packadsid = "'.$packadsid.'" '; + } + $r = $k2->sql->sel("SELECT p.packid, p.pack_name, p.ord, p.descript, p.image, p.active, + sp.cnt, sp.services_packsid, s.serviceid, s.service_name, + ad.packadsid, ad.price, ad.cnt as colad + FROM k2packs p + + LEFT JOIN k2packs_ads ad + ON ad.packid = p.packid + + LEFT JOIN k2services_packs sp + ON sp.packid = p.packid + + LEFT JOIN k2services s + ON sp.serviceid = s.serviceid + + WHERE (1=1) AND p.active = 1 $and ORDER BY p.ord, ad.price", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return; + } + + $check_arr = []; + $checkads_arr = []; + $checkserv_arr = []; + + $pack_arr = []; + $ads_arr = []; + $serv_arr = []; + //print_r($r['data']); + foreach ($r['data'] as $value) { + if (!in_array($value['packid'], $check_arr)) { + $ads_arr = []; + $serv_arr = []; + } + $addads_arr = [ + 'packadsid'=>$value['packadsid'], + 'price'=>$value['price'], + 'colad'=>$value['colad'], + ]; + $ads_arr[$value['packadsid']] = [ + $addads_arr, + ]; + //array_push($ads_arr, $addads_arr); + $addserv_arr = [ + 'serviceid'=>$value['serviceid'], + 'service_name'=>$value['service_name'], + 'cnt'=>$value['cnt'], + ]; + $serv_arr[$value['serviceid']] = [ + $addserv_arr + ]; + //array_push($serv_arr, $addserv_arr); + + if (!in_array($value['packid'], $check_arr)) { + array_push($check_arr, $value['packid']); + } else { + array_push($addpack_arr['serv_arr'], $addserv_arr); + array_push($addpack_arr['ads_arr'], $ads_arr); + } + $addpack_arr = [ + 'packid'=>$value['packid'], + 'pack_name'=>$value['pack_name'], + 'ord'=>$value['ord'], + 'image'=>$value['image'], + 'descript'=>$value['descript'], + 'serv_arr'=>$serv_arr, + 'ads_arr'=>$ads_arr + ]; + + $pack_arr[$value['packid']] = [ + $addpack_arr + ]; + } + //print_r($ads_arr); + //print_r($check_arr); + //print_r($pack_arr); + + $rez = $pack_arr; + return $rez; + } + + function paySystem(){ + global $k2; + $res = ''; + $rez = $k2->sql->sel("SELECT paysysid, pay_systemname, active, command, icon FROM k2pay_system Where active=1"); + $rez = $rez['data']; + return $rez; + } + + /** + * вывод пакетов + * @global type $k2 + * @return type + */ + function showPackages(){ + global $k2; + $arr_package = $this->getPackages(); + $package = $this->package_tpl; + $j = 1; + + foreach ($arr_package as $key => $value) { + $onepackage .= $this->onepackage_tpl; + if ($j == 1) { + $onepackage = str_replace('{actives}', 'actives', $onepackage); + $onepackage = str_replace('{actprice}', 'actprice', $onepackage); + } else { + $onepackage = str_replace('{actives}', '', $onepackage); + $onepackage = str_replace('{actprice}', '', $onepackage); + } + $onepackage = str_replace('{packageid}', $value[0]['packageid'], $onepackage); + $onepackage = str_replace('{package_name}', $value[0]['package_name'], $onepackage); + $onepackage = str_replace('{price}', $value[0]['price'], $onepackage); + $onepackage = str_replace('{image}', $value[0]['image'], $onepackage); + $onepackage = str_replace('{descript}', $value[0]['descript'], $onepackage); + //print_r($value); + $services = ''; + foreach ($value as $key => $val) { + $services .= $this->services_tpl; + $services = str_replace('{service_name}', $val['service_name'], $services); + $services = str_replace('{cnt}', $val['cnt'], $services); + //print_r($val); + } + $onepackage = str_replace('{services}', $services, $onepackage); + $j++; + } + $package = str_replace('{onepackage}', $onepackage, $package); + $package = str_replace('{urls}', $k2->get('message_id'), $package); + + + + $rez = $package; + + return $rez; + } + + function showPacks(){ + global $k2; + $arr_pack = $this->getPacks(); + + //print_r(expression); + + $package = $this->packs_tpl; + $j = 1; + + foreach ($arr_pack as $key => $value) { + $onepack .= $this->onepacks_tpl; + if ($j == 1) { + $onepack = str_replace('{actives}', 'actives', $onepack); + $onepack = str_replace('{actprice}', 'actprice', $onepack); + } else { + $onepack = str_replace('{actives}', '', $onepack); + $onepack = str_replace('{actprice}', '', $onepack); + } + $onepack = str_replace('{packid}', $value[0]['packid'], $onepack); + $onepack = str_replace('{pack_name}', $value[0]['pack_name'], $onepack); + + $onepack = str_replace('{image}', $value[0]['image'], $onepack); + $onepack = str_replace('{descript}', $value[0]['descript'], $onepack); + //print_r($value[0]); + $colads = ''; + $n = 1; + foreach ($value[0]['ads_arr'] as $key => $val) { + $onepack = str_replace('{price}', $val[0]['price'], $onepack); + + $colads .= $this->colads_tpl; + $colads = str_replace('{price}', $val[0]['price'], $colads); + $colads = str_replace('{colad}', $val[0]['colad'], $colads); + $colads = str_replace('{packadsid}', $val[0]['packadsid'], $colads); + if ($n == 1) { + $packadsid = $val[0]['packadsid']; + } + $n++; + } + $onepack = str_replace('{packadsid}', $packadsid, $onepack); + $onepack = str_replace('{colads}', $colads, $onepack); + $services = ''; + foreach ($value[0]['serv_arr'] as $key => $val) { + $services .= $this->service_tpl; + $services = str_replace('{service_name}', $val[0]['service_name'], $services); + $services = str_replace('{cnt}', $val[0]['cnt'], $services); + //print_r($val); + } + $onepack = str_replace('{services}', $services, $onepack); + $j++; + } + $package = str_replace('{onepackage}', $onepack, $package); + $package = str_replace('{urls}', $k2->get('message_id'), $package); + + + + $rez = $package; + + return $rez; + } + + function maxDocNum($docnum) + { + global $k2; + $arr = []; + $userid = $k2->auth->userid; + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->sel("SELECT MAX($docnum) as docnum + FROM k2docs WHERE firmid = $userid", + []); + + $rez = $r['data'][0]['docnum']; + + + return $rez; + } + + function createOrders($mid, $docsum) + { + global $k2; + $rez = []; + $docNum = $this->maxDocNum('docid') + 1; + + $userid = $k2->auth->userid; + $username = $k2->auth->username; + $r = $k2->sql->ins_arr( + ['table' => 'k2docs', + 'fields' => [ + 'docdate'=> date("Y-m-d"), + 'docnum'=>$docNum, + 'firmid'=>$userid, + 'username'=>$username, + 'datecreate'=>date("Y-m-d H:i:s"), + 'specific_num'=>$mid, + 'typedocid'=>2, + 'is_payed'=>0, + 'docsum'=>$docsum, + ] + ] + ); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + } + + $rez = $docNum; + return $rez; + + } + + function createOrderServ($invdata) + { + global $k2; + $rez = []; + $docid = $this->maxDocNum('docid'); + $r = $k2->sql->ins_arr( + ['table' => 'k2dvig', + 'fields' => [ + 'docid'=> $docid, + 'tovid'=>$invdata['tovid'], + 'edizmid'=>1, + 'kol'=>$invdata['kol'], + 'cena'=>$invdata['cena'], + 'summa'=>$invdata['summa'], + 'message_id'=>$invdata['message_id'], + 'packageid'=>$invdata['packageid'], + 'packid'=>$invdata['packid'], + 'packadsid'=>$invdata['packadsid'] + ] + ] + ); + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + } + //$this->addPackUser($invdata); + return $rez; + } + + /*Добавление данных о купленных пакетах*/ + function addPackUser($data){ + global $k2; + $rez = []; + + $packuserid = $k2->sys->getGUID(); + + $datestart = date("Y-m-d"); + $datefinish = date("Y-m-d",time() + 2592000); + $r = $k2->sql->ins_arr( + ['table' => 'k2pack_user', + 'fields' => [ + 'packuserid'=>$packuserid, + 'user_id' =>$data['user_id'], + 'packadsid' =>$data['packadsid'], + 'datestart' =>$datestart, + 'datefinish'=>$datefinish, + 'act_ads' =>0, + 'active' =>1 + ] + ] + ); + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + } + + return $rez; + } + + function showChosePays(){ + global $k2; + //$rez = 1; + $rez = $this->step2_tpl; + $message_id = $k2->get('message_id'); + $packageid = $k2->get('packageid'); + + $arr_package = $this->getPackages($packageid); + + //print_r($arr_package[$packageid][0]); + + $rez = str_replace('{package_name}', $arr_package[$packageid][0]['package_name'], $rez); + $rez = str_replace('{price}', $arr_package[$packageid][0]['price'], $rez); + $rez = str_replace('{message_id}', $message_id, $rez); + + $sum = $arr_package[$packageid][0]['price']; + $docid = $this->createOrders(0,$sum); + $descr = 'Покупка пакета - '.$arr_package[$packageid][0]['package_name']; + $invdata = [ + 'tovid'=>5, + 'kol'=>$sum, + 'cena'=>1, + 'summa'=>$sum, + 'message_id'=>$message_id, + 'packageid'=>$packageid + ]; + + + // //вставка услуг в заказ + $this->createOrderServ($invdata); + // //обновление суммы заказа + //$this->updateOrder(); + + $paysystem = $this->paySystem(); + + $server_url = '/?comp=k2board&c=payhandler'; + + foreach ($paysystem as $item){ + $paysys .= $this->paysys_tpl; + //$rez .= "

    ".$item['pay_systemname']."

    "; + $paysys = str_replace('{pay_systemname}', $item['pay_systemname'], $paysys); + $liqpay=$k2->ins_comp('k2pay', $item['command']); + //$rez.= $liqpay->payZakaz($docid, $sum, $descr, $server_url); + $paysys = str_replace('{pays}', $liqpay->payZakaz($docid, $sum, $descr, $server_url), $paysys); + } + + $rez = str_replace('{paysys}', $paysys, $rez); + return $rez; + } + + + + function showChosePaysPack(){ + global $k2; + //$rez = 1; + $rez = $this->step2pack_tpl; + $packadsid = $k2->get('packadsid'); + $packid = $k2->get('packid'); + + $arr_package = $this->getPacks($packid, $packadsid); + + //print_r($arr_package[$packid][0]['ads_arr']); + + $rez = str_replace('{package_name}', $arr_package[$packid][0]['pack_name'], $rez); + $rez = str_replace('{price}', $arr_package[$packid][0]['ads_arr'][$packadsid][0]['price'], $rez); + + + $sum = $arr_package[$packid][0]['ads_arr'][$packadsid][0]['price']; + $docid = $this->createOrders(0,$sum); + $descr = 'Покупка пакета - '.$arr_package[$packid][0]['pack_name']; + $invdata = [ + 'tovid'=>7, + 'kol'=>1, + 'cena'=>$sum, + 'summa'=>$sum, + 'message_id'=>'', + 'packid'=>$packid, + 'packadsid'=>$packadsid, + 'user_id'=>$k2->auth->userid, + ]; + + + // // //вставка услуг в заказ + $this->createOrderServ($invdata); + // // //обновление суммы заказа + // //$this->updateOrder(); + + $paysystem = $this->paySystem(); + + $server_url = '/?comp=k2board&c=payhandler'; + + foreach ($paysystem as $item){ + $paysys .= $this->paysys_tpl; + //$rez .= "

    ".$item['pay_systemname']."

    "; + $paysys = str_replace('{pay_systemname}', $item['pay_systemname'], $paysys); + $liqpay=$k2->ins_comp('k2pay', $item['command']); + //$rez.= $liqpay->payZakaz($docid, $sum, $descr, $server_url); + $paysys = str_replace('{pays}', $liqpay->payZakaz($docid, $sum, $descr, $server_url), $paysys); + } + + $rez = str_replace('{paysys}', $paysys, $rez); + + + + + + return $rez; + } + + function routePackage(){ + global $k2; + if ($k2->get('packageid')) { + $rez = $this->showChosePays(); + } elseif ($k2->get('packid')) { + $rez = $this->showChosePaysPack(); + } elseif ($k2->get('cat') == 'packs') { + $rez = $this->showPacks(); + } else { + $rez = $this->showPackages(); + } + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + $rez = $this->routePackage(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2pack_user.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2pack_user.yml new file mode 100644 index 0000000..6da08c8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2pack_user.yml @@ -0,0 +1,77 @@ +select: SELECT packuserid, user_id, packadsid, datestart, datefinish, cnt, act_ads, active FROM k2pack_user +where: +table: k2pack_user +height: 500 +rows: 20 +autowidth: true +sortname: packuserid +sortorder: desc +caption: Пакеты клиентов +fields: + packuserid: + field: packuserid + alias: packuserid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + user_id: + field: user_id + alias: id + caption: Пользователь + width: 100 + align: center + readonly: false + # type_field: DropDown + # multy: false + # sql: select id as k, pass as v from eboard_users + + packadsid: + field: packadsid + caption: Пакет + width: 150 + align: left + readonly: false + type_field: DropDown + multy: false + sql: select a.packadsid as k, p.pack_name as v from k2packs_ads a + left join k2packs p + on p.packid = a.packid + cnt: + field: cnt + caption: Разрешено
    объявлений + width: 75 + readonly: false + align: right + act_ads: + field: act_ads + caption: Активных
    объявлений + width: 75 + readonly: false + align: right + + datestart: + field: datestart + caption: Старт пакета + width: 100 + readonly: false + align: right + type_field: date + + datefinish: + field: datefinish + caption: Конец пакета + width: 100 + readonly: false + align: right + type_field: date + + active: + field: active + caption: Акт. + width: 50 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2package.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2package.yml new file mode 100644 index 0000000..d9be645 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2package.yml @@ -0,0 +1,76 @@ +select: SELECT packageid, package_name, image, price, descript, ord, active + FROM k2package +table: k2package +# typeid: 2 +height: 300 +rows: 20 +autowidth: true +detile: k2services_package +sortname: package_name +sortorder: desc +caption: Пакеты +# form_width: 725 +# form_height: 420 +fields: + packageid: + field: packageid + alias: packageid + caption: ID + width: 50 + hidden: true + readonly: true + align: right + + package_name: + field: package_name + alias: package_name + caption: Название + width: 250 + readonly: false + align: left + + image: + field: image + caption: Иконка + width: 150 + readonly: false + type_field: file + params: + height: 40 + upload_dir: 'public/img/letknow' + align: left + + price: + field: price + alias: price + caption: Цена. + width: 75 + readonly: false + align: right + + descript: + field: descript + alias: descript + caption: Описание + width: 275 + readonly: false + align: left + type_field: textarea + + ord: + field: ord + alias: ord + caption: Сорт. + width: 50 + readonly: false + align: center + + active: + field: active + alias: active + caption: Акт. + width: 50 + # width_form: 0 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2packages.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2packages.yml new file mode 100644 index 0000000..d9be645 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2packages.yml @@ -0,0 +1,76 @@ +select: SELECT packageid, package_name, image, price, descript, ord, active + FROM k2package +table: k2package +# typeid: 2 +height: 300 +rows: 20 +autowidth: true +detile: k2services_package +sortname: package_name +sortorder: desc +caption: Пакеты +# form_width: 725 +# form_height: 420 +fields: + packageid: + field: packageid + alias: packageid + caption: ID + width: 50 + hidden: true + readonly: true + align: right + + package_name: + field: package_name + alias: package_name + caption: Название + width: 250 + readonly: false + align: left + + image: + field: image + caption: Иконка + width: 150 + readonly: false + type_field: file + params: + height: 40 + upload_dir: 'public/img/letknow' + align: left + + price: + field: price + alias: price + caption: Цена. + width: 75 + readonly: false + align: right + + descript: + field: descript + alias: descript + caption: Описание + width: 275 + readonly: false + align: left + type_field: textarea + + ord: + field: ord + alias: ord + caption: Сорт. + width: 50 + readonly: false + align: center + + active: + field: active + alias: active + caption: Акт. + width: 50 + # width_form: 0 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2packs.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2packs.yml new file mode 100644 index 0000000..64c88f5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2packs.yml @@ -0,0 +1,61 @@ +select: SELECT packid, pack_name, image, descript, ord, active FROM k2packs +where: +table: k2packs +height: 250 +rows: 20 +detile: k2packs_ads,k2services_packs +autowidth: true +sortname: pack_name +sortorder: desc +caption: Пакеты +fields: + packid: + field: packid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + pack_name: + field: pack_name + caption: Название + width: 250 + readonly: false + align: left + image: + field: image + caption: Иконка + width: 150 + readonly: false + type_field: file + params: + height: 40 + upload_dir: 'public/img/letknow' + align: left + + descript: + field: descript + alias: descript + caption: Описание + width: 275 + readonly: false + align: left + type_field: textarea + ord: + field: ord + alias: ord + caption: Сорт. + width: 50 + readonly: false + align: center + + active: + field: active + alias: active + caption: Акт. + width: 50 + # width_form: 0 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2packs_ads.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2packs_ads.yml new file mode 100644 index 0000000..f98f13f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2packs_ads.yml @@ -0,0 +1,42 @@ +select: SELECT packadsid, packid, cnt, price FROM k2packs_ads +where: " where packid='{masterid}' " +table: k2packs_ads +height: 200 +rows: 20 +autowidth: true +getmaster: true +sortname: cnt +sortorder: desc +caption: Цена пакетов +fields: + packadsid: + field: packadsid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + packid: + field: packid + caption: Пакет + width: 150 + readonly: false + align: left + type_field: DropDown + multy: false + sql: select packid as k, pack_name as v from k2packs + + cnt: + field: cnt + caption: Кол-во объявлений + width: 150 + readonly: false + align: right + + price: + field: price + caption: Цена + width: 150 + readonly: false + align: right \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2packs_advantage.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2packs_advantage.yml new file mode 100644 index 0000000..efef61c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2packs_advantage.yml @@ -0,0 +1,26 @@ +select: SELECT advantageid, advantage_name, packid FROM k2packs_advantage +where: " where packid='{masterid}' " +table: k2packs_advantage +height: 200 +rows: 20 +autowidth: true +getmaster: true +masterid: packid +sortname: packid +sortorder: desc +caption: Преимущества +fields: + advantageid: + field: advantageid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + advantage_name: + field: advantage_name + caption: Название + width: 250 + readonly: false + align: left \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2services.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2services.yml new file mode 100644 index 0000000..33ce350 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2services.yml @@ -0,0 +1,39 @@ +select: SELECT serviceid, service_name, price, active FROM k2services +where: +table: k2services +height: 500 +rows: 20 +autowidth: true +sortname: service_name +sortorder: desc +caption: Услуги +fields: + serviceid: + field: serviceid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + service_name: + field: service_name + caption: Название + width: 250 + readonly: false + align: left + + # price: + # field: price + # caption: Цена, грн + # width: 100 + # readonly: false + # align: right + + active: + field: active + caption: Акт. + width: 50 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2services_package.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2services_package.yml new file mode 100644 index 0000000..743f46e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2services_package.yml @@ -0,0 +1,43 @@ +select: SELECT services_packageid, packageid, serviceid, cnt + FROM k2services_package +table: k2services_package +# typeid: 2 +height: 500 +rows: 20 +autowidth: true +where: " where packageid='{masterid}' " +getmaster: true +masterid: packageid +sortname: packageid +sortorder: desc +caption: Услуги в пакете +form_width: 725 +form_height: 420 +fields: + services_packageid: + field: services_packageid + alias: services_packageid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + serviceid: + field: serviceid + alias: serviceid + caption: Акт. + width: 150 + align: left + readonly: false + type_field: DropDown + multy: false + sql: select serviceid as k, service_name as v from k2services + + cnt: + field: cnt + alias: cnt + caption: Кол-во + width: 100 + readonly: false + align: center \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2package/res/k2services_packs.yml b/k2shop/k2shop/app/app/k2/k2package/res/k2services_packs.yml new file mode 100644 index 0000000..bc09ca8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/k2services_packs.yml @@ -0,0 +1,43 @@ +select: SELECT services_packsid, packid, serviceid, cnt FROM k2services_packs +table: k2services_packs +# typeid: 2 +height: 500 +rows: 20 +autowidth: true +where: " where packid='{masterid}' " +getmaster: true +masterid: packid +sortname: packid +sortorder: desc +caption: Услуги в пакете +form_width: 725 +form_height: 420 +fields: + services_packsid: + field: services_packsid + alias: services_packsid + caption: ID + width: 50 + readonly: true + align: right + hidden: true + + serviceid: + field: serviceid + alias: serviceid + caption: Акт. + width: 150 + align: left + readonly: false + type_field: DropDown + multy: false + sql: select serviceid as k, service_name as v from k2services + + cnt: + field: cnt + alias: cnt + caption: Кол-во + width: 100 + readonly: false + align: center + diff --git a/k2shop/k2shop/app/app/k2/k2package/res/menu.yml b/k2shop/k2shop/app/app/k2/k2package/res/menu.yml new file mode 100644 index 0000000..ad3cf3f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2package/res/menu.yml @@ -0,0 +1,44 @@ +# k2package: +# category: +# parent: root +# name: k2package +# caption: Управление рекламными
    пакетами +# iconclass: fa fa-get-pocket +# elements: +# k2package: +# name: k2package +# caption: Пакеты +# url: ?adm=k2package_route&t=k2packages +# command: +# # iconclass: fa fa-money +# k2services: +# name: k2services +# caption: Услуги +# url: ?adm=k2package_route&t=k2services +# command: +# iconclass: fa fa-money +k2packs: + category: + parent: root + name: k2packs + caption: Управление месячными
    пакетами + iconclass: fa fa-get-pocket + elements: + k2package: + name: k2packs + caption: Пакеты + url: ?adm=k2package_route&t=k2packs + command: +# iconclass: fa fa-money + k2pack_user: + name: k2pack_user + caption: Заказанные пакеты + url: ?adm=k2package_route&t=k2pack_user + command: +# iconclass: fa fa-money + k2services: + name: k2services + caption: Услуги + url: ?adm=k2package_route&t=k2services + command: + # iconclass: fa fa-money \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyAPI.php b/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyAPI.php new file mode 100644 index 0000000..94d77b5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyAPI.php @@ -0,0 +1,483 @@ +api_key = $api_key; + $this->api_secret = $api_secret; + $this->api_base_url = $api_base_url !== null ? $api_base_url : self::API_DEFAULT_BASE_URL; + } + + /** + * Returns an array of your Coinify invoices. + * + * @link https://www.coinify.com/docs/api/#list-all-invoices + * + * @param int $limit Maximum number of invoices to retrieve. Maximum is 200. + * @param int $offset How many invoices to skip. + * @param bool $include_expired If set to true, expired invoices are included in the result. Default is not to + * include expired invoices. + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains a list of your invoices. + */ + public function invoicesList($limit = null, $offset = null, $include_expired = null) + { + $query_params = []; + + if ($limit !== null) { + $query_params['limit'] = $limit; + } + if ($offset !== null) { + $query_params['offset'] = $offset; + } + if ($include_expired !== null) { + $query_params['include_expired'] = $include_expired; + } + + return $this->callApiAuthenticated('/v3/invoices', 'GET', [], $query_params); + } + + /** + * Create a new invoice. + * + * @link https://www.coinify.com/docs/api/#create-an-invoice + * + * @param float $amount Fiat price of the invoice + * @param string $currency 3 letter ISO 4217 currency code denominating amount + * @param string $plugin_name The name of the plugin used to call this API + * @param string $plugin_version The version of the above plugin + * @param string|null $description Your custom text for this invoice. + * @param array|null $custom Your custom data for this invoice + * @param string|null $callback_url A URL that Coinify calls when the invoice state changes. + * @param string|null $callback_email An email address to send a mail to when the invoice state changes + * @param string|null $return_url We redirect your customer to this URL to when the invoice has been paid + * @param string|null $cancel_url We redirect your customer to this URL if they cancel the invoice (not + * yet in use) + * @param string|null $input_currency Input currency that the invoice should be paid in, if not BTC. + * See {@see inputCurrenciesGet()} for a list of supported input currencies. + * @param string|null $input_return_address The address (belonging to the $input_currency) that the money should be + * returned to in case of an error. Mandatory if $input_currency is not + * "BTC" or null - otherwise unused. + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the new invoice. + */ + public function invoiceCreate( + $amount, + $currency, + $plugin_name, + $plugin_version, + $description = null, + $custom = null, + $callback_url = null, + $callback_email = null, + $return_url = null, + $cancel_url = null, + $input_currency = null, + $input_return_address = null + ) { + $params = [ + 'amount' => $amount, + 'currency' => $currency, + 'plugin_name' => $plugin_name, + 'plugin_version' => $plugin_version, + ]; + + if ($description !== null) { + $params['description'] = $description; + } + if ($custom !== null) { + $params['custom'] = $custom; + } + if ($callback_url !== null) { + $params['callback_url'] = $callback_url; + } + if ($callback_email !== null) { + $params['callback_email'] = $callback_email; + } + if ($return_url !== null) { + $params['return_url'] = $return_url; + } + if ($cancel_url !== null) { + $params['cancel_url'] = $cancel_url; + } + if ($input_currency !== null) { + $params['input_currency'] = $input_currency; + } + if ($input_return_address !== null) { + $params['input_return_address'] = $input_return_address; + } + + return $this->callApiAuthenticated('/v3/invoices', 'POST', $params); + } + + /** + * Get a specific invoice + * + * @link https://www.coinify.com/docs/api/#get-a-specific-invoice + * + * @param int $invoice_id The ID of the invoice you want to retrieve + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the requested invoice. + */ + public function invoiceGet($invoice_id) + { + return $this->callApiAuthenticated("/v3/invoices/{$invoice_id}"); + } + + /** + * Update the description and custom data of an invoice + * + * @link https://www.coinify.com/docs/api/#update-an-invoice + * + * @param int $invoice_id The ID of the invoice you want to update + * @param string $description Your custom text for this invoice. + * @param array $custom Your custom data for this invoice + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the updated invoice. + */ + public function invoiceUpdate($invoice_id, $description = null, $custom = null) + { + $params = []; + + if ($description !== null) { + $params['description'] = $description; + } + if ($custom !== null) { + $params['custom'] = $custom; + } + + return $this->callApiAuthenticated("/v3/invoices/{$invoice_id}", "PUT", $params); + } + + /** + * Request for an invoice to be paid with another input currency. + * + * @link https://www.coinify.com/docs/api/#pay-with-another-input-currency + * + * @param int $invoice_id The ID of the invoice you want to pay with another input currency + * @param string $currency Input currency that the invoice should be paid in. + * See {@see inputCurrenciesGet()} for a list of supported input currencies. + * @param string $return_address The address (belonging to the $input_currency) that the money should be returned + * to in case of an error. + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the invoice with an extra entry in the 'inputs' list. + */ + public function invoiceInputCreate($invoice_id, $currency, $return_address) + { + $params = [ + 'currency' => $currency, + 'return_address' => $return_address + ]; + + return $this->callApiAuthenticated("/v3/invoices/{$invoice_id}/inputs", "POST", $params); + } + + /** + * Returns an array of your Coinify buy orders + * + * @link https://www.coinify.com/docs/api/#list-all-buy-orders + * + * @param int $limit Maximum number of buy orders to retrieve. Maximum is 200. + * @param int $offset How many buy orders to skip. + * @param bool $include_cancelled If set to true, cancelled buy orders are included in the result. Default is not + * to include cancelled buy orders. + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains a list of your buy orders. + */ + public function buyOrdersList($limit = null, $offset = null, $include_cancelled = null) + { + $query_params = []; + + if ($limit !== null) { + $query_params['limit'] = $limit; + } + if ($offset !== null) { + $query_params['offset'] = $offset; + } + if ($include_cancelled !== null) { + $query_params['include_cancelled'] = $include_cancelled; + } + + return $this->callApiAuthenticated('/v3/buys', 'GET', [], $query_params); + } + + /** + * Create a new buy order + * + * @param float $amount Amount that you want to buy BTC for - denominated in currency + * @param string $currency 3 letter ISO 4217 currency code denominating amount. Must be either BTC or your + * merchant account currency. + * @param string $btc_address The bitcoin address to send the bitcoins to. + * @param bool $instant_order Should this be an instant order or not? + * @param string $callback_url A URL that Coinify calls when the buy order state changes. + * @param string $callback_email An email address to send a mail to when the buy order state changes + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the new buy order. + */ + public function buyOrderCreate( + $amount, + $currency, + $btc_address, + $instant_order = null, + $callback_url = null, + $callback_email = null + ) { + $params = [ + 'amount' => $amount, + 'currency' => $currency, + 'btc_address' => $btc_address, + ]; + + if ($instant_order !== null) { + $params['instant_order'] = boolval($instant_order); + } + if ($callback_url !== null) { + $params['callback_url'] = $callback_url; + } + if ($callback_email !== null) { + $params['callback_email'] = $callback_email; + } + + return $this->callApiAuthenticated("/v3/buys", "POST", $params); + } + + /** + * Confirm a buy order + * + * @link https://www.coinify.com/docs/api/#buy-order-confirm + * + * @param int $buy_order_id + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the requested buy order. + */ + public function buyOrderConfirm($buy_order_id) + { + return $this->callApiAuthenticated("/v3/buys/{$buy_order_id}/actions/confirm", "PUT"); + } + + /** + * Get a specific buy order + * + * @link https://www.coinify.com/docs/api/#get-a-specific-buy-order + * + * @param int $buy_order_id + * + * @return array A PHP array as described in https://www.coinify.com/docs/api/#response-format. If success, + * then the 'data' value contains the requested buy order. + */ + public function buyOrderGet($buy_order_id) + { + return $this->callApiAuthenticated("/v3/buys/{$buy_order_id}"); + } + + /** + * Get the balance of a merchant + * + * @return array|false A PHP array as described in https://www.coinify.com/docs/api/#check-account-balance . If success, + * then the 'data' value contains the balance in BTC and fiat currency and also the base currency + * of the merchant that requests it. + */ + public function balanceGet() + { + return $this->callApiAuthenticated("/v3/balance"); + } + + /** + * Return buy and sell rates for all available currencies or for the specified currency. + * + * @link https://www.coinify.com/docs/api/#rates + * + * @param string|null $currency A 3-char currency code + * + * @return array|false A PHP array as described in https://www.coinify.com/docs/api/#rates . If success, + * then the 'data' value contains buy and sell rates for all supported by us currencies + * or for a specified currency. + */ + public function ratesGet($currency = null) + { + $url = $currency === null ? "/v3/rates" : "/v3/rates/{$currency}"; + + return $this->callApi($url); + } + + /** + * Receive a list of supported input currencies + * + * @link https://www.coinify.com/docs/api/#supported-input-currencies + * + * @return array|false A PHP array as described in https://www.coinify.com/docs/api/#supported-input-currencies . + * If success, then the 'data' value contains contains a list of currency objects. + */ + public function inputCurrenciesList() + { + return $this->callApi('/v3/input-currencies'); + } + + /** + * Perform an authenticated API call, using the + * API key and secret provided in the constructor. + * + * @param string $path The API path, WITH leading slash, e.g. '/v3/invoices' + * @param string $method The HTTP method to use. + * @param array $params Associative array of parameters to the body of the API call. Ignored for GET calls. + * @param array $query_params Associative array of parameters to put in the query string of the URL + * + * @return array|false A PHP array as described in https://www.coinify.com/docs/api/#response-format, + * or false if the HTTP call couldn't be performed correctly. + * If false, use the $last_curl_error and $last_curl_errno properties to + * get the error. + */ + private function callApiAuthenticated($path, $method = 'GET', $params = [], $query_params = []) + { + $headers = [$this->generateAuthorizationHeader()]; + + return $this->callApi($path, $method, $params, $query_params, $headers); + } + + /** + * Perform an API call. + * + * @param string $path The API path, WITH leading slash, e.g. '/v3/invoices' + * @param string $method The HTTP method to use. + * @param array $params Associative array of parameters to the body of the API call. Ignored for GET calls. + * @param array $query_params Associative array of parameters to put in the query string of the URL + * @param string[] $headers List of headers to send along with the HTTP request + * + * @return array|false A PHP array as described in https://www.coinify.com/docs/api/#response-format, + * or false if the HTTP call couldn't be performed correctly. + * If false, use the $last_curl_error and $last_curl_errno properties to + * get the error. + */ + private function callApi($path, $method = 'GET', $params = [], $query_params = [], $headers = []) + { + $url = $this->api_base_url . $path; + + if (count($query_params) > 0) { + $url .= '?' . http_build_query($query_params); + } + + $ch = curl_init($url); + if ($headers) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + } + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + if ($method != 'GET') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); + } + + $json_response = curl_exec($ch); + + if ($json_response === false) { + /* + * If an error occurred, remember the error + * and return false. + */ + $this->last_curl_error = curl_error($ch); + $this->last_curl_errno = curl_errno($ch); + + // Remember to close the cURL object + curl_close($ch); + + return false; + } + + /* + * No error, just decode the JSON response, and return it. + */ + $response = json_decode($json_response, true); + + // Remember to close the cURL object + curl_close($ch); + + return $response; + } + + /** + * Generate a nonce and a signature for an API call and wrap those in a HTTP header + * + * @return string A string with a full HTTP header like the following: + * 'Authorization: Coinify apikey="", nonce="", signature=""' + */ + private function generateAuthorizationHeader() + { + // Generate a nonce, based on the current time + $mt = explode(' ', microtime()); + $nonce = $mt[1] . substr($mt[0], 2, 6); + + $apikey = $this->api_key; + + // Concatenate the nonce and the API key + $message = $nonce . $apikey; + // Compute the signature and convert it to lowercase + $signature = strtolower(hash_hmac('sha256', $message, $this->api_secret, false)); + + // Construct the HTTP Authorization header. + $auth_header = "Authorization: Coinify apikey=\"$apikey\", nonce=\"$nonce\", signature=\"$signature\""; + + return $auth_header; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyCallback.php b/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyCallback.php new file mode 100644 index 0000000..ae64256 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyCallback.php @@ -0,0 +1,49 @@ +ipn_secret = $ipn_secret; + } + + /** + * Validates a callback and it's signature based on the IPN secret given in the constructor. + * + * @param string $callback_raw The raw JSON POST data sent with the callback (before JSON decoding) + * @param null|string $signature The signature as extracted from the 'X-Coinify-Callback-Signature' HTTP header. + * Must be a 64-byte hexadecimal string. If $signature is set to null, fetch it automatically from + * $_SERVER['HTTP_X_COINIFY_CALLBACK_SIGNATURE'] + * + * @return bool Whether the callback was valid or not + */ + public function validateCallback( $callback_raw, $signature=null ) { + if ( $signature == null && isset( $_SERVER['HTTP_X_COINIFY_CALLBACK_SIGNATURE'] ) ) { + $signature = $_SERVER['HTTP_X_COINIFY_CALLBACK_SIGNATURE']; + } + + // Calculate the signature using the callback data and your IPN secret + $expected_signature = strtolower( hash_hmac('sha256', $callback_raw, $this->ipn_secret, false) ); + + // Check that the signatures match + if ( strtolower( $signature ) != $expected_signature ) { + // Invalid signature, disregard this callback + return false; + } + + // Valid signature + return true; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/callback_example.php b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/callback_example.php new file mode 100644 index 0000000..2906eeb --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/callback_example.php @@ -0,0 +1,26 @@ + array( + 'merchant_id' => '3720000', + 'gateway_key' => './ecom-demo_gateway.pem', + 'merchant_key' => './ecom-demo_merchant.pem', + 'key_index' => 1 + ), +); + +$ecom = new Ecommerce($configs['ecom-demo']); +$form = new EcommerceFORM($ecom); +$xml = $form->getResponse($_POST); +$array = (array) $xml; + +$payment_arr = (array) $array['Payment']; +$order_arr = (array) $array['Order']; +$card_arr = (array) $array['Order']; + + +//$xml = simplexml_load_string($_POST); +print_r( $card_arr); +//var_dump($form->getResponse($_POST)); diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_gateway.pem b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_gateway.pem new file mode 100644 index 0000000..90a6cbf --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_gateway.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqijbAiGU/r22p+Ggw975nacW8 +6NF9p6MhDnHUAo+Fz2dk40vYv3RmVpPoM4gR8TEmT0hErsl9M0cbWNbNiTWR1wKM +iGiSq6XTEp+9FQ48zJOp66c8UY4iEyK65q0hJs815rXLEqWXc03pX+saoGc7+0V7 +7SnegmA1/eIbtq28+wIDAQAB +-----END PUBLIC KEY----- diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_merchant.pem b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_merchant.pem new file mode 100644 index 0000000..a30ea2a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_merchant.pem @@ -0,0 +1,21 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDArSk2pkAcYsikJdY95X99ScpQLRJOfOfEMiPF/TYGHJzu290M +g/p9w5vl4aFxHVm3M5sUHkV6xe2ZUI60omgAvRwY12ni94ghfrUR5j5eQQ9HlE9n +Nw7mmieUEAFdobZRug7GNr238AkUNoMG+Ia2gFVk9Rbzf01WLTNMHgwdAwIDAQAB +AoGAIiCJpDxeLqjwkOKCyAPWSQLA6uKQ04YcJwwaef8Xio2W3lfjF0xpGc2D13vX +dImWUnS5ix6xf8V/CCDUpfn+IZSq+y5187ueDbHrLsBmyh6+NK5ncSzOAzHJkKB3 +DIRVs6aUG7M2DJ5UJNqBa/XZzydCnPpg3ev+78H/cyjxAEECQQDjRcRH/sVEy/ty +B7QcShrPdQP9u7Bs+wE4VLLuxeIPO2zRUKtNHS2Kz0lgh3ScgSOlCGk829sIsnYm +CZ3ld/ZFAkEA2QfpFSCdOPV1nr3vnhPJ8BiDLYKcDgVtxFfau8rPem/HhwFzftkt +rE9sTJTsWtYA7OeedFpRKqIGpUL5BMr+pwJAejerbPgBx5RWPKUN42SqdEO+CLXl +E0YMCunpa2P4xC41v349EHQPaKU+FW3idMMxku8qALNOX6fwx1XGln7jbQJATBH8 +vZ4H3Z4TkwdqBJNVFaXR3NLJ1hRLDCXrEiWdIYIqgoScsdp3qszP3evZCGG4Q1FP +9eJuTq4p/CUEWYy5QwJBANAPzUe6CuCzUJgqKLmWDfSrmjQtRlmyLKAtxpV7bJvW +rRRSHrDdmcy4+wMh9YXTDzB0AEpzqT4MIkBNHAQjo8s= +-----END RSA PRIVATE KEY----- +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDArSk2pkAcYsikJdY95X99ScpQ +LRJOfOfEMiPF/TYGHJzu290Mg/p9w5vl4aFxHVm3M5sUHkV6xe2ZUI60omgAvRwY +12ni94ghfrUR5j5eQQ9HlE9nNw7mmieUEAFdobZRug7GNr238AkUNoMG+Ia2gFVk +9Rbzf01WLTNMHgwdAwIDAQAB +-----END PUBLIC KEY----- diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecommerce.php b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecommerce.php new file mode 100644 index 0000000..0bd6fcb --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecommerce.php @@ -0,0 +1,206 @@ +config = $config; + $this->loadKeys(); + } + + public function __call($name, $arguments) { + return $this->exec($name, $arguments[0]); + } + + public function prepare($array_data, $additional_fields=array()) { + + $clean_data = $this->arrayToXml(new SimpleXMLElement(''), $array_data)->asXML(); + + $sign = $this->sign($clean_data); + $tmp = $this->encrypt($clean_data); + + /* Base64 encode everything */ + $sign = base64_encode($sign); + $key = base64_encode($tmp['key']); + $data = base64_encode($tmp['data']); + + /* Form request */ + $request = new StdClass(); + $request->INTERFACE = $this->config['merchant_id']; + $request->KEY_INDEX = $this->config['key_index']; + $request->KEY = $key; + $request->DATA = $data; + $request->SIGNATURE = $sign; + + return $request; + + } + + public function parse($response) { + + $sign = base64_decode($response->SIGNATURE); + $key = base64_decode($response->KEY); + $data = base64_decode($response->DATA); + + $data = $this->decrypt($data, $key); + + if (!$this->checkSignature($data, $sign)) { + throw new Exception('Decryption failed, invalid signature!'); + } + + return simplexml_load_string($data); + + } + + private function sign($clean_data) { + $merchantkeyid = openssl_get_privatekey($this->_merchantkey); + if (!openssl_sign($clean_data, $sign, $merchantkeyid)) { + throw new Exception('Signing failed: ' . openssl_error_string()); + } + openssl_free_key($merchantkeyid); + + return $sign; + } + + private function checkSignature($data, $sign) { + $systemkeyid = openssl_get_publickey($this->_systemkey); + $res = (openssl_verify($data, $sign, $systemkeyid) == 1); + openssl_free_key($systemkeyid); + + return $res; + } + + private function encrypt($cleardata) { + $systemkeyid = openssl_get_publickey($this->_systemkey); + if (openssl_seal($cleardata, $data, $ekeys, array($systemkeyid))) { + $key = $ekeys[0]; + } else { + throw new Exception('Encryption failed: ' . openssl_error_string()); + } + openssl_free_key($systemkeyid); + + return array( + 'data' => $data, + 'key' => $key, + ); + } + + private function decrypt($data, $key) { + $merchantkeyid = openssl_get_privatekey($this->_merchantkey); + if (!openssl_open($data, $cleardata, $key, $merchantkeyid)) { + throw new Exception('Decryption failed: ' . openssl_error_string()); + }; + openssl_free_key($merchantkeyid); + + return $cleardata; + } + + public function loadKeys() { + + $m_keyfile = fopen($this->config['merchant_key'], 'r'); + $this->_merchantkey = fread($m_keyfile, filesize($this->config['merchant_key'])); + fclose($m_keyfile); + + $s_keyfile = fopen($this->config['gateway_key'], 'r'); + $this->_systemkey = fread($s_keyfile, filesize($this->config['gateway_key'])); + fclose($s_keyfile); + + unset($m_keyfile); + unset($s_keyfile); + } + + private function arrayToXml($xml, array $children) { + foreach ($children as $name => $value) { + (is_array($value)) ? $this->arrayToXml($xml->addChild($name), $value) : $xml->addChild($name, $value); + } + + return $xml; + } + +} + +class EcommerceSOAP { + + private $_ecom, + $_soap; + + public function __construct(Ecommerce $ecom) { + $this->_ecom = $ecom; + $this->_soap = new SoapClient($ecom->config['wsdl'], array('exceptions' => true)); + } + + public function __call($method, $arguments) { + $request = $this->_ecom->prepare($arguments[0]); + try { + $response = $this->_soap->{$method}($request); + } + catch (SoapFault $e) { + throw $e; + } + return $this->_ecom->parse($response); + } + +} + +class EcommerceFORM { + + private static $required = array('INTERFACE', 'KEY_INDEX', 'KEY', 'DATA', 'SIGNATURE'); + + private static $allowed_additional_fields = array( + 'Callback' => 'CALLBACK', + 'ErrorCallback' => 'ERROR_CALLBACK', + ); + + private $_ecom; + + public function __construct(Ecommerce $ecom) { + $this->_ecom = $ecom; + } + + /** + * Returns array which should be POST'ed to FORMs URL + * May throw Exception + */ + public function getRequest($data, $additional) { + + $request = $this->_ecom->prepare($data); + + /* Copy additional fields to request */ + foreach (array_keys(self::$allowed_additional_fields) as $key) { + if (array_key_exists($key, $additional)) { + $realKey = self::$allowed_additional_fields[$key]; + $request->$realKey = $additional[$key]; + } + } + + return (array) $request; + + } + + /** + * Takes POST array as an argument + * May throw Exception + */ + public function getResponse($response) { + + if (count(array_diff(self::$required, array_keys($response))) > 0) { + throw new Exception('Some of required POST params are not included!'); + } + + // Convert array to object + $responseObj = new stdClass(); + foreach ($response as $key => $value) { + $responseObj->$key = $value; + } + + return $this->_ecom->parse($responseObj); + + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/error_example.php b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/error_example.php new file mode 100644 index 0000000..f590222 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/error_example.php @@ -0,0 +1,3 @@ + array( + 'merchant_id' => '3720000', + 'gateway_key' => 'k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_gateway.pem', + 'merchant_key' => 'k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_merchant.pem', + 'key_index' => 1 + ), +); + +$ecom = new Ecommerce($configs['ecom-demo']); +$form = new EcommerceFORM($ecom); + +$fields = $form->getRequest(array( + 'AutoDeposit' => 'true', // PHP serializes boolean values incorrectly, so send this as string + 'Payment' => array( + 'Mode' => 5 + ), + 'Order' => array( + 'ID' => 'aa_h_' . microtime(), + 'Amount' => 100, // In minor units, thus 100 equals 1.00 EUR + 'Currency' => 'EUR', + 'Description' => 'Test transaction' + ), + 'Notification' => 'I\'m a teapot!' +), array( + 'Callback' => 'https://clicktransfert.com/k2shop/k2shop/app/app/k2/k2pay/k2medoro/callback_example.php', + 'ErrorCallback' => 'https://clicktransfert.com/k2shop/k2shop/app/app/k2/k2pay/k2medoro/error_example.php' +)); + +$action = 'https://demo.ipsp.lv/form/v2/'; + +//var_dump($fields); + +?> + +
    + $value) { ?> + + + +
    Submitting request to: +
    diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/soap_example.php b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/soap_example.php new file mode 100644 index 0000000..d6b06b0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/soap_example.php @@ -0,0 +1,60 @@ + array( + 'wsdl' => 'http://demo.ipsp.lv/api/v2/soap?wsdl', + 'merchant_id' => '3720000', + 'gateway_key' => './ecom-demo_gateway.pem', + 'merchant_key' => './ecom-demo_merchant.pem', + 'key_index' => 1 + ), + 'ecom-prod' => array( + 'wsdl' => 'http://ipsp.lv/api/v2/soap?wsdl', + 'merchant_id' => '3720000', + 'gateway_key' => './ecom-prod_gateway.pem', + 'merchant_key' => './ecom-prod_merchant.pem', + 'key_index' => 1 + ), +); + +$ecom = new Ecommerce($configs['ecom-demo']); +$soap = new EcommerceSOAP($ecom); + +try { + + // Create new payment + $data = $soap->Payment(array( + 'AutoDeposit' => 'true', // PHP serializes boolean values incorrectly, so send this as string + 'Payment' => array( + 'Mode' => 4 + ), + 'Order' => array( + 'ID' => 'aa_h_' . microtime(), + 'Amount' => 100, // In minor units, thus 100 equals 1.00 EUR + 'Currency' => 'EUR', + 'Description' => 'Test transaction' + ), + 'Card' => array( + 'Number' =>'4012001038443335', // 13-19 digit number + 'Name' => 'test', // Under 50 utf8 chars + 'Expiry' => '1703', // First year, then month + 'CSC' => '999' // Exactly 3 digits + ), + 'RemoteAddress' => '89.111.15.218' // This MUST be cardholders IP + )); + + echo "Created new payment:\t\t" . $data->asXML() . PHP_EOL; + + // Get payments status + echo "Got status by payments id:\t" . $soap->GetPayment(array( + 'Payment' => array( + 'ID' => $data->Payment->ID + ) + ))->asXML() . PHP_EOL; + +} +catch (SoapFault $e) { + echo 'SOAP EXCEPTION: ' . $e->faultcode . ' - ' . $e->faultstring . PHP_EOL; +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/text.txt b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/text.txt new file mode 100644 index 0000000..5ded67d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/text.txt @@ -0,0 +1 @@ +qwerr \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2medoro/token_example.php b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/token_example.php new file mode 100644 index 0000000..a2e3b4c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2medoro/token_example.php @@ -0,0 +1,38 @@ + array( + 'merchant_id' => '3720000', + 'gateway_key' => './ecom-demo_gateway.pem', + 'merchant_key' => './ecom-demo_merchant.pem', + 'key_index' => 1 + ), +); + +$ecom = new Ecommerce($configs['ecom-demo']); +$form = new EcommerceFORM($ecom); + +$fields = $form->getRequest(array( + 'Card' => array( + 'Token' => 'token' . microtime(), + ) +), array( + 'Callback' => 'https://clicktransfert.com/k2shop/k2shop/app/app/k2/k2pay/k2medoro/callback_example.php', + 'ErrorCallback' => 'https://clicktransfert.com/k2shop/k2shop/app/app/k2/k2pay/k2medoro/error_example.php' +)); + +$action = 'https://demo.ipsp.lv/form/v2/token/'; + +var_dump($fields); + +?> + +
    + $value) { ?> + + + +
    Submitting request to: +
    diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay.php new file mode 100644 index 0000000..cdb69f4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay.php @@ -0,0 +1,47 @@ +get('comp'); + $c=$k2->get('c'); + + $s=$k2->getComp($comm); + if ($s[0]<>'k2pay'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>''){ + $rez.=$comp->content(); + + return $rez; + } + } + + + + // Возвращаем контент + function content(){ + $rez=$this->oper(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_advcash.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_advcash.php new file mode 100644 index 0000000..aface44 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_advcash.php @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->ac_email=$this->getPayParam('ac_email'); + $this->ac_name=$this->getPayParam('ac_name'); + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Advcash

    "; + // $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $arHash = array( + $this->ac_email, + $this->ac_name, + $sum, + $this->currency, + $this->ac_password, + $zakazid + ); + $sign=hash('sha256', implode(':', $arHash)); + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{ac_email}', $this->ac_email, $rez); + $rez = str_replace('{ac_name}', $this->ac_name, $rez); + $rez = str_replace('{statusUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{successUrl}', 'http://'.$k2->domain().$this->successUrl, $rez); + $rez = str_replace('{failUrl}', 'http://'.$k2->domain().$this->failUrl, $rez); + $rez = str_replace('{currency}', $this->currency, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{sign}', $sign, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + $rez = str_replace('{login}', $k2->auth->login, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + /** + * Обработка callback от advcash + * @global type $k2 + */ + function getCallBAck(){ + global $k2; + $arHash = array( + $k2-post('ac_transfer'), + $k2-post('ac_start_date'), + $k2-post('ac_sci_name'), + $k2-post('ac_src_wallet'), + $k2-post('ac_dest_wallet'), + $k2-post('ac_order_id'), + $k2-post('ac_amount'), + $k2-post('ac_merchant_currency'), + $this->ac_password, + ); + $myHash=hash('sha256', implode(':', $arHash)); + if($myHash==$k2->post('ac_hash')){ + $k2->addLog(" Advcash true ", 'pay.log'); + $login=$k2-post('login'); + + $firmid=$this->getFirmid($login); + $sumpay=$k2-post('ac_amount'); + + $this->doPayment($firmid, $sumpay); + }else { + $k2->addLog(" Advcash false ", 'pay.log'); + } + + return $rez; + } + + + function content(){ + global $k2; + $rez=''; + $rez.=$this->getCallBAck(); + $rez.=$this->result; + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_coinify.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_coinify.php new file mode 100644 index 0000000..c4a97d6 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_coinify.php @@ -0,0 +1,230 @@ + + + + + + + "; + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Coinify

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', '//'.$k2->domain().$this->payUrl, $rez); + $rez = str_replace('{desc}', $k2->auth->login, $rez); + //$rez = str_replace('{currency}', $this->currency, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * Получает настройки из базы данных + * @global type $k2 + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->apikey=$this->getPayParam('coinify_apikey'); + $this->apisecret=$this->getPayParam('coinify_apisecret'); + $this->ipn_secret=$this->getPayParam('coinify_ipn_secret'); + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + /** + * Отправка данных платежной системе + * @global type $k2 + */ + function getPay(){ + global $k2; + + + require_once($k2->rootdir."/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyAPI.php"); + + // Provide your API key and secret +// $apikey = "4zRpirgD0FLVtOwO9EMOnZomogdzkapAR16SVCaweN4F77FQa4T3Lh9prQbqklJ8"; +// $apisecret = "Lxygkrqs2Q072uG7tQox1g5k3/xFv1n5UpxIs+Kc7x4hdKqOMnbd95smdc2jpXaW"; + $this->getSettings(); + + $apikey=$this->apikey; + + $apisecret=$this->apisecret; + + $amount = number_format($_POST['coinify_order_amount'], 2, '.', ''); + + $currency = 'USD'; + + $plugin_name = 'K2R'; + + $plugin_version = '1.2'; + + $description = 'Оплата по счету К2:'; + + $custom = array('id' => $k2->post('coinify_order_description')); + + $api = new CoinifyAPI( $apikey, $apisecret ); + + $result = $api->invoiceCreate( $amount, $currency, $plugin_name, + + $plugin_version, $description, $custom ); + + $k2->addLog("$plugin_name $description", 'startpay.csv'); + + header ("Location:".$result['data']['payment_url']); + } + + /** + * Обработка платежа + * @global type $k2 + */ + function getCallBackPay(){ + global $k2; + + + header('HTTP/1.1 200 OK'); + + //$ipn_secret = 'bb4edee983d48738e201b56945eef04c'; + $this->getSettings(); + $ipn_secret = $this->ipn_secret; + + require_once($k2->rootdir."/k2shop/k2shop/app/app/k2/k2pay/k2coinifyAPI/CoinifyCallback.php"); + + $callback_validator = new CoinifyCallback($ipn_secret); + + $postdata_raw = file_get_contents('php://input'); + + $is_valid = $callback_validator->validateCallback($postdata_raw); + + $decodate = json_decode($postdata_raw, true); + + $sumpay = $decodate['data']['transfer']['amount']; + + $firmid = $this->getFirmid($k2->auth->login); + + $k2->addLog("Платеж совершен $firmid ", 'callback1.csv'); + + if ($decodate['data']['state']=="paid") { + + $k2->addLog("Платеж совершен $firmid $postdata_raw ", 'pay.log'); + + $this->doPayment($firmid, $sumpay); + } + + } + + // Возвращаем контент + function content(){ + global $k2; + + $rez=""; + + if($k2->post('pay')){ + $this->getPay(); + }else{ + $this->getCallBackPay(); + } + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_fail.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_fail.php new file mode 100644 index 0000000..fa7acc1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_fail.php @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->interkassa_merchid=$this->getPayParam('interkassa_merchid'); + $this->interkassa_secretkey=$this->getPayParam('interkassa_secretkey'); + + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Interkassa

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{interkassa_merchid}', $this->interkassa_merchid, $rez); + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{customdate}', $k2->auth->login, $rez); + $rez = str_replace('{currency}', $this->currency, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + $my=$k2->post('ik_sign'); + + $k2->addLog("Interkassa sign $my", 'pay.log'); + return $rez; + } + + function content(){ + global $k2; + + $rez=''; + + + + if ($k2->post('ik_sign')){ + $rez.=$this->getPayment(); + }elseif($k2->post('ik_desc')){ + $my=$k2->post('ik_desc'); + }elseif($k2->post('ik_inv_st')==='success'){ + $my=$k2->post('ik_inv_st'); + $k2->addLog(" Interkassa $my", 'pay.log'); + $rez.=$this->result; + }else{ + $rez.=$this->fail_result; + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_liqpay.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_liqpay.php new file mode 100644 index 0000000..033bf7c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_liqpay.php @@ -0,0 +1,374 @@ +Благодарим за оплату! + "; + + public $fail_result=" +

    К сожалению, оплата не состоялась.

    + + "; + + + + // Получает константу настроек платежных систем + function getPayParam($paramname){ + global $k2; + + $rez=''; + $k2->sql->db = $this->db; + $r = $k2->sql->sel("select p.payvalue from k2payparam p where p.payident='$paramname'", []); + foreach ($r['data'] as $row) { + $rez=$row["payvalue"]; + } + +// $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; +// +// foreach ($k2->db->query($sql) as $row) { +// $rez=$row["payvalue"]; +// } + + return $rez; + } + + + + // Получает настройки из базы данных + function getSettings(){ + $rez=''; + + $this->merchant_id=$this->getPayParam('liqpay_merchid'); + $this->signature=$this->getPayParam('liqpay_signature'); + $this->currency=$this->getPayParam('liqpay_val'); + $this->sandbox=$this->getPayParam('liqpay_sandbox'); + $this->result_url=$this->getPayParam('result_url'); + + $rez.=$this->go_tpl; + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + + // Вывод формы для оплаты + function getForm($order_id="", $price="100", $description='', $currency="EUR", $server_url = ''){ + global $k2; + + require_once($k2->rootdir."/k2shop/k2shop/libs/sign/privatbank/api/LiqPay.php"); //Все уже придумано за нас ... + + // $micro = sprintf("%06d",(microtime(true) - floor(microtime(true))) * 1000000); // Ну раз что-то нужно добавить для полной уникализации то .. + // $number = date("YmdHis"); //Все вместе будет первой частью номера ордера + // $order_id = $number.$micro; //Будем формировать номер ордера таким образом... + + $merchant_id=$this->merchant_id; //Вписывайте сюда свой мерчант + $signature=$this->signature; //Сюда вносите public_key + if ($server_url == '') { + $server_url = $this->server_url; + } + + + //$desc = $_GET['desc']; //Можно так принять назначение платежа + //$order_id = $_GET['order_id']; //Можно так принять назначение платежа + //$price = $k2->get('price'); //Все что нужно скрипту - передать в него сумму (вы можете передавать все, вплоть до ордера и описания ...) + + $liqpay = new LiqPay($merchant_id, $signature); + $html = $liqpay->cnb_form(array( + 'action'=>'pay', + 'version'=>'3', + 'amount'=>$price, + 'currency'=>$this->currency, //Можно менять 'EUR','UAH','USD','RUB','RUR' + 'order_id'=>$order_id, + 'description'=>/*$this->desc*/$description.' '.$order_id, + 'sandbox'=>$this->sandbox, + 'server_url'=>$k2->proto.'://'.$k2->domain().$server_url, + 'result_url'=>$k2->proto.'://'.$k2->domain().$this->result_url, + 'sender_first_name'=>$k2->auth->login + )); + $k2->addLog(" Liqpay true".$k2->proto.'://'.$k2->domain().$server_url, 'pay.log'); + return $html; + } + + + + + // Оплата за заказ + function payZakaz($zakazid, $sum, $desc, $server_url = ''){ + global $k2; + $rez=''; + // Получаем настройки + $rez .= $this->getSettings(); + + $currency = ''; + $rez .= $this->getForm($zakazid, $sum, $desc, $currency, $server_url); +// +// $liqpay = $k2->ins_comp('k2pay','secur'); +// +// $rez .= $liqpay->insertPayment($this->paysysid, $zakazid, $sum); + + //$this->insertPayment($zakazid, $sum); + + + return $rez; + } + + /** + * Обработка callback от liqpay + * @global type $k2 + */ + function getCallBAck(){ + global $k2; + $rez = ''; + $raw_post_data = file_get_contents('php://input'); + //$k2->addLog(" Liqpay true $raw_post_data", 'pay.log'); + //Разбиваем полученную строку на данные платежа и подпись + $raw_post_array = explode('&', $raw_post_data); + + //Отделяем данные платежа от названия и проводим первое декодирование + $date = explode('=', $raw_post_array[1]); + //$dates = $date[1]; + $dates = strval(urldecode($date[1])); + //Декодируем данные платежа + $dates64_decode = base64_decode($dates); + //$k2->addLog(" Liqpay true $dates64_decode", 'pay.log'); + //Трансформируем данные платежа в массив + $decodate = json_decode($dates64_decode, true); + + + //Отделяем содержимое подписи от названия и декодируем строку + $sign = explode('=', $raw_post_array[0]); + $sign1 = strval(urldecode($sign[1])); + + //Получаем вторую подпись для сверки с первой подписью + $rez.=$this->getSettings(); + $mysign = $this->signature; + $sign2 = strval(base64_encode( sha1( $mysign . $dates . $mysign, 1 ) )); + + + + //Получаем $info для вывода в логе + $info = $decodate['action']." ".$decodate['amount']." ".$decodate['currency']." ".$decodate['sender_first_name']; + + + //пример ответа платежной системы + //"action":"pay", + //"payment_id":283937851, - Id платежа в системе LiqPay + //"status":"sandbox", - Статус платежа. + //"version":3, - Версия API. Текущее значение - 3 + //"type":"buy", - Тип платежа. + //"paytype":"card", + //"public_key":"i13872925750", + //"acq_id":414963, - ID еквайера + //"order_id":"20161114102545971237", - Order_id платежа + //"liqpay_order_id":"NDO6FZWU1479111972403560", - Order_id платежа в системе Liqpay + //"description":"Тест", - Комментарий к платежу + //"sender_first_name":"player7", - Имя(login) плательщика + //"sender_card_mask2":"516874*38", + //"sender_card_bank":"pb", - Банк отправителя + //"sender_card_type":"mc", + //"sender_card_country":804, + //"ip":"213.169.73.185", + //"amount":3.0, - Сумма платежа + //"currency":"EUR", - Валюта платежа + //"sender_commission":0.0, - Комиссия с отправителя в валюте платежа + //"receiver_commission":0.08, - Комиссия с получателя в валюте платежа + //"agent_commission":0.0,- Комиссия агента в валюте платежа + //"amount_debit":86.96, - Сумма транзакции debit в валюте currency_debit + //"amount_credit":86.96, - Сумма транзакции credit в валюте currency_credit + //"commission_debit":0.0, - Комиссия с отправителя в валюте currency_debit + //"commission_credit":2.39, - Комиссия с получателя в валюте currency_credit + //"currency_debit":"UAH", - Валюта транзакции debit + //"currency_credit":"UAH", - Валюта транзакции credit + //"sender_bonus":0.0, + //"amount_bonus":0.0, + //"mpi_eci":"7", + //"is_3ds":false, + //"create_date":1479111972452, + //"end_date":1479111972452, + //"transaction_id":283937851 + + $status = $decodate['status']; + + $desc = $decodate['description']; + + $desc_arr = explode('|||', $desc); + + $email = $desc_arr[0]; + + $descr = $desc_arr[1]; + + //сравнение секретной подписи + $compare=strcmp($sign1, $sign2); + + $docid=$decodate['order_id']; + $sumpay=$decodate['amount']; + $liqpay = $k2->ins_comp('k2pay','secur'); + + $paycreate = $liqpay->insertPayment(3, $docid, $sumpay); + + if(($compare===0)&&(($status=='sandbox')||($status=='success'))){ + + $login = $decodate['sender_first_name']; + + + $TransactionId = $decodate['payment_id']; + + + $descr = $decodate['description']; + + $k2->addLog(" Liqpay true $info", 'pay.log'); + + //$k2->mail->sendMail($email, 'Сообщение из сайта', $descr); + //$liqpay = $k2->ins_comp('k2pay','secur'); + $pay_comments = "ip: ".$decodate['ip']."; status: ".$decodate['status']."; type: ".$decodate['type']."; + currency: ".$decodate['currency']."; + sender_commission: ".$decodate['sender_commission']."; receiver_commission: ".$decodate['receiver_commission']."; + sender_first_name: ".$decodate['sender_first_name']."; sender_card_mask2: ".$decodate['sender_card_mask2']."; + "; + $liqpay->doPayment($docid, $sumpay, $TransactionId, $descr, $pay_comments); + //$this->doPayment($docid, $sumpay, $TransactionId); + $rez = 1; + }else{ + $k2->addLog(" Liqpay false $info", 'pay.log'); + $rez = 0; + }//header ('Location: /?comp=k2transferzakaz&c=payresult&docid='.$docid); + + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT user_id as id FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['id']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($zakazid, $sum){ + global $k2; + + $login = $k2->auth->login; + + $username = $k2->auth->username; + //$userid=$this->getFirmid($login); + + $datepay = date("Y-m-d H:i:s"); + + $userid = $k2->auth->userid; + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay, user, paydate) + VALUES ($this->paysysid, '$userid', '$zakazid', '$sum', '$username', '$datepay')"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка вставки платежа: $sql\n"; + echo $e->getMessage(); + } + } + + + //В случае успешного платежа + function doPayment($docid, $sumpay, $TransactionId){ + global $k2; + $k2->addLog(" Liqpay true ", 'pay.log'); + $sql = "UPDATE k2pays SET sumpay='$sumpay', paydate=now(), success='1', docnum = '$TransactionId' + WHERE docid='$docid'"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка обновления платежа: $sql\n"; + echo $e->getMessage(); + } + + } + + + //Переадресация на файл дальнейших действий после записи платежа в таблицу k2pays и вывода информации об успешности платежа + function result(){ + global $k2; + + $rez='212'; + + //$rez.=header("Location://".$k2->domain().$this->result_url); + + return $rez; + + } + + + + // Возвращаем контент + function content(){ + global $k2; + $rez=''; + $raw_post_data = file_get_contents('php://input'); + if($raw_post_data){ + $rez.=$this->getCallBAck(); + + }else{ + + $rez.=$this->result(); + + } + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_medoro.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_medoro.php new file mode 100644 index 0000000..4ca6d6d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_medoro.php @@ -0,0 +1,339 @@ + 'board_connection']; + public $merchant_id=""; + public $signature=""; + public $currency=""; + public $paysysid=3; + + // public $desc="Тест"; + public $go_tpl = '

    Переход к оплате Liqpay

    '; + + //указываем наш обработчик callbak от liqpay + public $server_url='/?comp=k2pay&c=liqpay'; + public $result_url=''; + //указываем страницу возврата после проплаты + // public $result_url='/?comp=k2pay&c=liqpay'; + // public $result_url='/?comp=k2transferzakaz&c=payresult'; + + //тестовый режим -'1', рабочий режим - '0' + public $sandbox=''; + + public $result=" +

    Благодарим за оплату!

    + "; + + public $fail_result=" +

    К сожалению, оплата не состоялась.

    + + "; + + + + // Получает константу настроек платежных систем + function getPayParam($paramname){ + global $k2; + + $rez=''; + $k2->sql->db = $this->db; + $r = $k2->sql->sel("select p.payvalue from k2payparam p where p.payident='$paramname'", []); + foreach ($r['data'] as $row) { + $rez=$row["payvalue"]; + } + +// $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; +// +// foreach ($k2->db->query($sql) as $row) { +// $rez=$row["payvalue"]; +// } + + return $rez; + } + + + + // Получает настройки из базы данных + function getSettings(){ + $rez=''; + + $this->merchant_id=$this->getPayParam('liqpay_merchid'); + $this->signature=$this->getPayParam('liqpay_signature'); + $this->currency=$this->getPayParam('liqpay_val'); + $this->sandbox=$this->getPayParam('liqpay_sandbox'); + $this->result_url=$this->getPayParam('result_url'); + + $rez.=$this->go_tpl; + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + + // Вывод формы для оплаты + function getForm($order_id="", $price="100", $description='', $currency="EUR", $server_url = ''){ + global $k2; + + //require_once('k2medoro/pf_example.php'); //Все уже придумано за нас ... + + require('k2medoro/ecommerce.php'); + + $configs = array( + 'ecom-demo' => array( + 'merchant_id' => '3720000', + 'gateway_key' => 'k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_gateway.pem', + 'merchant_key' => 'k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_merchant.pem', + 'key_index' => 1 + ), + ); + + $ecom = new Ecommerce($configs['ecom-demo']); + $form = new EcommerceFORM($ecom); + + $fields = $form->getRequest(array( + 'AutoDeposit' => 'true', // PHP serializes boolean values incorrectly, so send this as string + 'Payment' => array( + 'Mode' => 5, + ), + 'Order' => array( + 'ID' => 'aa_h_' . microtime() .'-'. $order_id, + 'Amount' => $price*100, // In minor units, thus 100 equals 1.00 EUR + 'Currency' => 'EUR', + 'Description' => $description + ), + 'Notification' => $k2->auth->userid + ), array( + //'Callback' => 'https://clicktransfert.com/k2shop/k2shop/app/app/k2/k2pay/k2medoro/callback_example.php', + 'Callback' => 'https://clicktransfert.com/comp/k2pay/c/medoro', + 'ErrorCallback' => 'http://clicktransfert.corp2.net/comp/k2transferpub/c/main' + )); + + $action = 'https://demo.ipsp.lv/form/v2/'; + + $rez = '
    '; + + foreach ($fields as $key => $value) { + $rez .= ''; + } + $rez .= ' + +
    '; + + return $rez; + } + + + + + // Оплата за заказ + function payZakaz($zakazid, $sum, $desc){ + global $k2; + $rez=''; + //echo $zakazid; + // Получаем настройки + //$rez .= $this->getSettings(); + + $currency = ''; + $rez .= $this->getForm($zakazid, $sum, $desc, $currency, $server_url); +// +// $liqpay = $k2->ins_comp('k2pay','secur'); +// +// $rez .= $liqpay->insertPayment($this->paysysid, $zakazid, $sum); + + //$this->insertPayment($zakazid, $sum); + + + return $rez; + } + + /** + * Обработка callback от liqpay + * @global type $k2 + */ + function getCallBAck(){ + global $k2; + $rez = ''; + + require('k2medoro/ecommerce.php'); + + $configs = array( + 'ecom-demo' => array( + 'merchant_id' => '3720000', + 'gateway_key' => 'k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_gateway.pem', + 'merchant_key' => 'k2shop/k2shop/app/app/k2/k2pay/k2medoro/ecom-demo_merchant.pem', + 'key_index' => 1 + ), + ); + + $ecom = new Ecommerce($configs['ecom-demo']); + $form = new EcommerceFORM($ecom); + $xml = $form->getResponse($_POST); + $array = (array) $xml; + //var_dump($array); + $payment_arr = (array) $array['Payment']; + $order_arr = (array) $array['Order']; + $card_arr = (array) $array['Order']; + //$notif = (array) $array['Notification']; + + + + $sumpay = $order_arr['Amount']/100; + $arr_id = explode('-', $order_arr['ID']); + $docid = $arr_id[1]; + $userid = $array['Notification']; + //$lpb = $k2->ins_comp('k2pay','secur'); + + //$paycreate = $lpb->insertPayment(11, $docid, $sumpay); + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay) + VALUES (11, '$userid', '$docid', '$sumpay')"; + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка вставки платежа: $sql\n"; + echo $e->getMessage(); + } + if($array['AutoDeposit'] == true){ + + $descr = $order_arr['Description']; + $TransactionId = $payment_arr['ID']; + $pay_comments = $array['Notification']; + + $sql = "UPDATE k2pays SET sumpay='$sumpay', paydate=now(), + success='1', transactionId='$TransactionId', + comment='$descr', pay_comments='' + WHERE docid='$docid'"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка обновления платежа: $sql\n"; + echo $e->getMessage(); + } + //$this->doPayment($docid, $sumpay, $TransactionId); + $rez = 1; + }else{ + $k2->addLog(" LPB false $info", 'pay.log'); + $rez = 0; + } + header ('Location: /?comp=k2transferzakaz&c=payresult&docid='.$docid); + //echo $rez; + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT user_id as id FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['id']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($zakazid, $sum){ + global $k2; + + $login = $k2->auth->login; + + $username = $k2->auth->username; + //$userid=$this->getFirmid($login); + + $datepay = date("Y-m-d H:i:s"); + + $userid = $k2->auth->userid; + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay, user, paydate) + VALUES ($this->paysysid, '$userid', '$zakazid', '$sum', '$username', '$datepay')"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка вставки платежа: $sql\n"; + echo $e->getMessage(); + } + } + + + //В случае успешного платежа + function doPayment($docid, $sumpay, $TransactionId){ + global $k2; + $k2->addLog(" Liqpay true ", 'pay.log'); + $sql = "UPDATE k2pays SET sumpay='$sumpay', paydate=now(), success='1', docnum = '$TransactionId' + WHERE docid='$docid'"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка обновления платежа: $sql\n"; + echo $e->getMessage(); + } + + } + + + //Переадресация на файл дальнейших действий после записи платежа в таблицу k2pays и вывода информации об успешности платежа + function result(){ + global $k2; + + $rez=$this->getForm(); + + //$rez.=header("Location://".$k2->domain().$this->result_url); + + return $rez; + + } + + + + // Возвращаем контент + function content(){ + global $k2; + $rez=''; + + if($_POST){ + $rez.=$this->getCallBAck(); + + }else{ + + $rez.=$this->result(); + + } + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_payeer.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payeer.php new file mode 100644 index 0000000..1363616 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payeer.php @@ -0,0 +1,260 @@ + '/?comp=k2pay&c=success', + 'fail_url' => '/?comp=k2pay&c=fail', + 'status_url' => '/?comp=k2pay&c=payeer', + ); + + + public $pay_form = " +
    + + + + + + + + + +
    + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->m_shop=$this->getPayParam('m_shop'); + + $this->m_key=$this->getPayParam('m_key'); + + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Payeer

    "; + $rez.=$this->getSettings(); + + //$m_desc = base64_encode($this->m_desc); + $arHash = array( + $this->m_shop, + $zakazid, + $sum, + $this->m_curr, + $k2->auth->login, + $this->m_key + ); + $sign = strtoupper(hash('sha256', implode(":", $arHash))); + + $arParams = array( + 'success_url' => 'http://'.$k2->domain().$this->arParams['success_url'], + 'fail_url' => 'http://'.$k2->domain().$this->arParams['fail_url'], + 'status_url' => 'http://'.$k2->domain().$this->arParams['status_url'], + 'reference' => array( + 'var1' => '1', + //'var2' => '2', + //'var3' => '3', + //'var4' => '4', + //'var5' => '5', + ), + ); + + $key = md5('Ключ для шифрования дополнительных параметров'.$zakazid); + $m_params = urlencode(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, json_encode($arParams), MCRYPT_MODE_ECB))); + $arHash[] = $m_params; + $arHash[] = $this->m_key; + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{m_shop}', $this->m_shop, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + $rez = str_replace('{currency}', $this->m_curr, $rez); + $rez = str_replace('{desc}', $k2->auth->login, $rez); + $rez = str_replace('{sign}', $sign, $rez); + $rez = str_replace('{params}', $m_params, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + if (isset($_POST['m_operation_id']) && isset($_POST['m_sign'])) + { + $arHash = array( + $_POST['m_operation_id'], + $_POST['m_operation_ps'], + $_POST['m_operation_date'], + $_POST['m_operation_pay_date'], + $_POST['m_shop'], + $_POST['m_orderid'], + $_POST['m_amount'], + $_POST['m_curr'], + $_POST['m_desc'], + $_POST['m_status'] + ); + + if (isset($_POST['m_params'])) + { + $arHash[] = $_POST['m_params']; + } + + $arHash[] = $this->m_key; + + $sign_hash = strtoupper(hash('sha256', implode(':', $arHash))); + + if ($_POST['m_sign'] == $sign_hash && $_POST['m_status'] == 'success') + { + $k2->addLog(" Payeer true", 'pay.log'); + $login=$_POST['m_desc']; + + $firmid=$this->getFirmid($login); + $sumpay=$_POST['m_amount']; + + $this->doPayment($firmid, $sumpay); + echo $_POST['m_orderid'].'|success'; + exit; + } + + echo $_POST['m_orderid'].'|error'; + } + + + return $rez; + } + + function content(){ + global $k2; + $rez=''; + $rez.=$this->getPayment(); + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_payhandler.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payhandler.php new file mode 100644 index 0000000..96f781c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payhandler.php @@ -0,0 +1,56 @@ +get('t'); + $k2->addLog($paysys." handler true", 'pay.log'); + $pay = $k2->ins_comp('k2pay',$paysys); + $rez = $pay->getCallBAck(); + $k2->addLog($paysys." handler true ", 'pay.log'); + } + + + function successPay() + { + $rez = 'Оплата прошла успешно'; + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + if ($k2->get('t')) { + $rez = $this->getHandler(); + } else { + $rez = $this->successPay(); + } + + return $rez; + } + +} diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_payonline.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payonline.php new file mode 100644 index 0000000..2670f82 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payonline.php @@ -0,0 +1,244 @@ +Благодарим за оплату! + "; + + public $fail_result=" +

    К сожалению, оплата не состоялась.

    + + "; + public $paysysid=8; + + + // Получает константу настроек платежных систем + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + // Получает настройки из базы данных + function getSettings(){ + $rez=''; + + $this->MerchantId=$this->getPayParam('MerchantId'); + $this->PrivateSecurityKey=$this->getPayParam('PrivateSecurityKey'); + + + $rez.='

    Переход к оплате PayOnline

    '; + + return $rez; + } + + + // Вывод формы для оплаты + function getForm($OrderId="", $Amount="100", $OrderDescription='', $Currency="EUR"){ + global $k2; + + require_once($k2->rootdir."/k2shop/k2shop/app/app/k2/k2pay/k2payonlineAPI/payment.class.php"); + + $rez = ''; + //Указываем локализацию (доступно ru | en | fr) + $Language = $this->Language; + // Указываем идентификатор мерчанта + $MerchantId = $this->MerchantId; + //Указываем приватный ключ (см. в ЛК PayOnline в разделе Сайты -> настройка -> Параметры интеграции) + $PrivateSecurityKey = $this->PrivateSecurityKey; + //Номер заказа (Строка, макс.50 символов) + // $OrderId = $this->MerchantId; + //Валюта (доступны следующие валюты | USD, EUR, RUB) + $Currency = $this->Currency; + //Сумма к оплате (формат: 2 знака после запятой, разделитель ".") + //$Amount=2; + //Описание заказа (не более 100 символов, запрещено использовать: адреса сайтов, email-ов и др.) необязательный параметр + //$OrderDescription="Оплата коммунальных услуг за Август 2013. Cумма 100,00 ФЛС 113"; + //Срок действия платежа (По UTC+0) необязательный параметр + //$ValidUntil="2013-10-10 12:45:00"; + //В случае неуспешной оплаты, плательщик будет переадресован, на данную страницу. + // $FailUrl='http://'.$k2->domain().$this->FailUrl; + // В случае успешной оплаты, плательщик будет переадресован, на данную страницу. + //$ReturnUrl='http://'.$k2->domain().$this->ReturnUrl; + + //Создаем класс + $pay = new GetPayment; + //Показываем ссылку на оплату + $result=$pay->GetPaymentURL( + $pay->Language=$Language, + $pay->MerchantId=$MerchantId, + $pay->PrivateSecurityKey=$PrivateSecurityKey, + $pay->OrderId=$OrderId, + $pay->Amount=number_format($Amount, 2, '.', ''), + $pay->Currency=$Currency, + $pay->OrderDescription=$OrderDescription); + //$pay->ValidUntil=$ValidUntil, + //$pay->ReturnUrl=$ReturnUrl, + //$pay->FailUrl=$FailUrl); + + // $rez .= $result; + //return $rez; + echo ""; + } + + + + + // Оплата за заказ + function payZakaz($zakazid, $sum, $desc){ + $rez=''; + // Получаем настройки + + + + $rez.=$this->getSettings(); + + $rez.=$this->getForm($zakazid, $sum, $desc); + + $this->insertPayment($zakazid, $sum); + + return $rez; + } + + /** + * Обработка callback от payonline + * @global type $k2 + */ + function getCallBAck(){ + global $k2; + $rez=''; + + if ($k2->get('check')=='true') { + $DateTime = $k2->get('DateTime'); + $docid = $k2->get('OrderId'); + $sumpay = $k2->get('PaymentAmount'); + $TransactionId = $k2->get('TransactionID'); + + // $num = $k2->post('OrderId'); + + //Получаем $info для вывода в логе + $info = $DateTime." ".$docid." ".$sumpay.$TransactionId; + + + $this->doPayment($docid, $sumpay, $TransactionId); + + $k2->addLog(" PayOnline true $info", 'pay.log'); + + } else{ + $k2->addLog(" PayOnline false ", 'pay.log'); + } + header ('Location: /?comp=k2transferzakaz&c=payresult&docid='.$docid); + + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT user_id as id FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['id']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($zakazid, $sum){ + global $k2; + + $login= $k2->auth->login; + $userid=$this->getFirmid($login); + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay) + VALUES ($this->paysysid, $userid, '$zakazid', $sum)"; + + + $k2->db->exec($sql); + } + + + //В случае успешного платежа + function doPayment($docid, $sumpay, $TransactionId){ + global $k2; + $sql = "UPDATE k2pays SET sumpay=$sumpay, paydate=now(), success='1', transactionId = $TransactionId + WHERE docid='$docid'"; + $k2->db->exec($sql); + } + + //Переадресация на файл дальнейших действий после записи платежа в таблицу k2pays и вывода информации об успешности платежа + function result(){ + global $k2; + + $rez=''; + + $rez.=header("Location:http://".$k2->domain().$this->result_url); + + return $rez; + } + + function content(){ + global $k2; + $rez=''; + + if($k2->get('TransactionID')){ + $rez .= $this->getCallBAck(); + + } + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_paypal.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_paypal.php new file mode 100644 index 0000000..155cf9e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_paypal.php @@ -0,0 +1,286 @@ +'' + ); + + public $pay_templ=" + + + + + "; + public $pay_form = " + +
    +
      +
    • + + + + + + + + + + + + +
    • +
      +
    • + +
    • +
    +
    + + "; + + public $result=" +

    Благодарим за оплату!

    + + "; + + protected function init_obj(){ + global $k2; + + $this->paypal_email=$this->getPayParam('paypal_email'); + $this->paypal_val=$this->getPayParam('paypal_val'); + $this->url_mode=$this->getPayParam('paypal_url'); + $this->customData['login']=$k2->auth->login; + $this->result_url=$this->getPayParam('result_url'); + } + + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum, $desc){ + global $k2; + + if ($this->url_mode=='test'){ + $this->payUrl=$this->testUrl; + } + else { + $this->payUrl=$this->workUrl; + } + + $rez=""; + $rez.="

    Переход к оплате PayPal

    "; + $rez .= "
    "; + $rez .= $this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{paypal_email}', $this->paypal_email, $rez); + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{customdate}', $this->customData['login'], $rez); + $rez = str_replace('{currency}', $this->paypal_val, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{desc}', $desc, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + //$this->insertPayment($zakazid, $sum); + + return $rez; + + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT user_id as id FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['id']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($zakazid, $sum){ + global $k2; + + $login= $k2->auth->login; + $userid=$this->getFirmid($login); + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay) + VALUES ($this->paysysid, $userid, '$zakazid', $sum)"; + + + $k2->db->exec($sql); + } + + + //В случае успешного платежа + function doPayment($docid, $sumpay){ + global $k2; + + $sql = "UPDATE k2pays SET sumpay=$sumpay, paydate=now(), success='1' + WHERE docid='$docid'"; + + + $k2->db->exec($sql); + + } + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + + require_once($k2->rootdir."/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/PaypalIPN.php"); + + // use PaypalIPN; + $ipn = new PayPalIPN(); + + // Use the sandbox endpoint during testing. + $ipn->useSandbox(); + + $verified = $ipn->verifyIPN(); + + + + if ($verified) { + + $raw_post_data = file_get_contents('php://input'); + $raw_post_array = explode('&', $raw_post_data); + $myPost = []; + + $k2->addLog("Платеж paypal $raw_post_data", 'pay.log'); + + foreach ($raw_post_array as $keyval) { + + $keyval = explode ('=', $keyval); + + if (count($keyval) == 2){ + $myPost[$keyval[0]] = urldecode($keyval[1]); + } + + } + + $info=$myPost['item_number'].' '.$myPost['custom'].' '.$myPost['mc_gross'].' '.$myPost['mc_currency']; + + $login=$myPost['custom']; + + // $userid=$this->getFirmid($login); + $sumpay=$myPost['mc_gross']; + $docid=$myPost['item_number']; + + $k2->addLog("Платеж paypal $info", 'pay.log'); + + $this->doPayment($docid, $sumpay); + + + } + + header("HTTP/1.1 200 OK"); + + } + + + //Переадресация на файл дальнейших действий после записи платежа в таблицу k2pays и вывода информации об успешности платежа + function result(){ + global $k2; + + $rez=''; + + $rez.=header("Location:http://".$k2->domain().$this->result_url); + + return $rez; + + } + + function content(){ + global $k2; + + $rez=''; + + + if (trim($k2->get('paysys'))<>''){ + $rez.=$this->payZakaz(); + }elseif(file_get_contents('php://input')){ + $rez.=$this->getPayment(); + }elseif(trim($k2->get('amt'))<>''){ + // $zakazid=trim($k2->get('item_number')); + $rez.=$this->result(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_payza.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payza.php new file mode 100644 index 0000000..dbbd2a3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_payza.php @@ -0,0 +1,185 @@ + + + + + + + + + + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + // $this->ap_merchant=$this->getPayParam('ap_merchid'); + + // $this->ap_secretkey=$this->getPayParam('ap_secretkey'); + + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Payza

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{ap_merchid}', $this->ap_merchant, $rez); + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + + $k2->addLog("Платеж ap $my", 'pay.log'); + return $rez; + } + + function content(){ + global $k2; + + $rez=''; + + + + + $rez.=$this->getPayment(); + + + + + $rez.=$this->result; + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_perfectmoney.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_perfectmoney.php new file mode 100644 index 0000000..5d585ab --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_perfectmoney.php @@ -0,0 +1,212 @@ + + + +
    + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->wmi_merchid=$this->getPayParam('wmi_merchid'); + + $this->wmi_secretkey=$this->getPayParam('wmi_secretkey'); + + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Interkassa

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{wmi_merchid}', $this->wmi_merchid, $rez); + + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + + + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + $rez = ''; + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES (5, ".$firmid.", ".$sumpay." )"; + + try { + $rez = $k2->db->$sql; + } catch (PDOException $e) { + echo "Ошибка"; + echo $e->getMessage(); + } + return $rez; + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + + $k2->addLog("Платеж wmi $my", 'pay.log'); + return $rez; + } + + function content(){ + global $k2; + + $rez=''; + + + + + $rez.=$this->getPayment(); + + + + + $rez.=$this->result; + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_portmone.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_portmone.php new file mode 100644 index 0000000..4bcdb96 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_portmone.php @@ -0,0 +1,345 @@ +Переход к оплате Liqpay'; + + //указываем наш обработчик callbak от liqpay + public $server_url='/?comp=k2pay&c=portmone'; + public $result_url=''; + //указываем страницу возврата после проплаты + // public $result_url='/?comp=k2pay&c=liqpay'; + // public $result_url='/?comp=k2transferzakaz&c=payresult'; + + //тестовый режим -'1', рабочий режим - '0' + public $sandbox=''; + + public $result=" +

    Благодарим за оплату!

    + "; + + public $fail_result=" +

    К сожалению, оплата не состоялась.

    + + "; + + + + // Получает константу настроек платежных систем + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + // Получает настройки из базы данных + function getSettings(){ + $rez=''; + + $this->merchant_id=$this->getPayParam('liqpay_merchid'); + $this->signature=$this->getPayParam('liqpay_signature'); + $this->currency=$this->getPayParam('liqpay_val'); + $this->sandbox=$this->getPayParam('liqpay_sandbox'); + $this->result_url=$this->getPayParam('result_url'); + + $rez.=$this->go_tpl; + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + + // Вывод формы для оплаты + function getForm($order_id="", $price="100", $description='', $currency="EUR"){ + global $k2; + + $html = ' +
    + + + + + + + + + +
    '; + + +// SHOPBILLID: 420651576 +// SHOPORDERNUMBER: 123456789qwe +// APPROVALCODE: TESTPM +// BILL_AMOUNT: 1 +// TOKEN: +// RESULT: 0 +// CARD_MASK: 444433******1111 +// ATTRIBUTE1: null +// ATTRIBUTE2: null +// ATTRIBUTE3: null +// ATTRIBUTE4: null +// RECEIPT_URL: https://www.portmone.com.ua/r3/services/receipts/get-receipts/shopbillid/353472d8de85c380d94e49e592050631486e357ebdcedf374ccd07c89682f31d181076bbd1f2d +// 920b4d00b3e11983dfb8777ccee0a19a9a00cd7cb5c1262c83c +// LANG: en +// DESCRIPTION: 999999 + + return $html; + } + + + + + // Оплата за заказ + function payZakaz($zakazid, $sum, $desc){ + $rez=''; + // Получаем настройки + $rez.=$this->getSettings(); + $rez.=$this->getForm($zakazid, $sum, $desc); +// + $this->insertPayment($zakazid, $sum); + + + return $rez; + } + + /** + * Обработка callback от liqpay + * @global type $k2 + */ + function getCallBAck(){ + global $k2; + $rez=''; + $raw_post_data = file_get_contents('php://input'); + $k2->addLog(" Liqpay true $raw_post_data", 'pay.log'); + //Разбиваем полученную строку на данные платежа и подпись + $raw_post_array = explode('&', $raw_post_data); + + //Отделяем данные платежа от названия и проводим первое декодирование + $date = explode('=', $raw_post_array[1]); + //$dates = $date[1]; + $dates = strval(urldecode($date[1])); + //Декодируем данные платежа + $dates64_decode = base64_decode($dates); + //$k2->addLog(" Liqpay true $dates64_decode", 'pay.log'); + //Трансформируем данные платежа в массив + $decodate = json_decode($dates64_decode, true); + + + //Отделяем содержимое подписи от названия и декодируем строку + $sign = explode('=', $raw_post_array[0]); + $sign1 = strval(urldecode($sign[1])); + + //Получаем вторую подпись для сверки с первой подписью + $rez.=$this->getSettings(); + $mysign=$this->signature; + $sign2 = strval(base64_encode( sha1( $mysign . $dates . $mysign, 1 ) )); + + + + //Получаем $info для вывода в логе + $info = $decodate['action']." ".$decodate['amount']." ".$decodate['currency']." ".$decodate['sender_first_name']; + + + //пример ответа платежной системы + //"action":"pay", + //"payment_id":283937851, - Id платежа в системе LiqPay + //"status":"sandbox", - Статус платежа. + //"version":3, - Версия API. Текущее значение - 3 + //"type":"buy", - Тип платежа. + //"paytype":"card", + //"public_key":"i13872925750", + //"acq_id":414963, - ID еквайера + //"order_id":"20161114102545971237", - Order_id платежа + //"liqpay_order_id":"NDO6FZWU1479111972403560", - Order_id платежа в системе Liqpay + //"description":"Тест", - Комментарий к платежу + //"sender_first_name":"player7", - Имя(login) плательщика + //"sender_card_mask2":"516874*38", + //"sender_card_bank":"pb", - Банк отправителя + //"sender_card_type":"mc", + //"sender_card_country":804, + //"ip":"213.169.73.185", + //"amount":3.0, - Сумма платежа + //"currency":"EUR", - Валюта платежа + //"sender_commission":0.0, - Комиссия с отправителя в валюте платежа + //"receiver_commission":0.08, - Комиссия с получателя в валюте платежа + //"agent_commission":0.0,- Комиссия агента в валюте платежа + //"amount_debit":86.96, - Сумма транзакции debit в валюте currency_debit + //"amount_credit":86.96, - Сумма транзакции credit в валюте currency_credit + //"commission_debit":0.0, - Комиссия с отправителя в валюте currency_debit + //"commission_credit":2.39, - Комиссия с получателя в валюте currency_credit + //"currency_debit":"UAH", - Валюта транзакции debit + //"currency_credit":"UAH", - Валюта транзакции credit + //"sender_bonus":0.0, + //"amount_bonus":0.0, + //"mpi_eci":"7", + //"is_3ds":false, + //"create_date":1479111972452, + //"end_date":1479111972452, + //"transaction_id":283937851 + + $status = $decodate['status']; + + $desc = $decodate['description']; + + $desc_arr = explode('|||', $desc); + + $email = $desc_arr[0]; + + $descr = $desc_arr[1]; + + //сравнение секретной подписи + $compare=strcmp($sign1, $sign2); + + if(($compare===0)&&(($status=='sandbox')||($status=='success'))){ + + $login=$decodate['sender_first_name']; + + + $TransactionId = $decodate['payment_id']; + $sumpay=$decodate['amount']; + + $docid=$decodate['order_id']; + + $k2->addLog(" Liqpay true $info", 'pay.log'); + + //$k2->mail->sendMail($email, 'Сообщение из сайта', $descr); + + $this->doPayment($docid, $sumpay, $TransactionId); + + }else{ + $k2->addLog(" Liqpay false $info", 'pay.log'); + }header ('Location: /?comp=k2transferzakaz&c=payresult&docid='.$docid); + + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT user_id as id FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['id']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($zakazid, $sum){ + global $k2; + + $login= $k2->auth->login; + + //$userid=$this->getFirmid($login); + + $userid = $k2->auth->userid; + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay) + VALUES ($this->paysysid, '$userid', '$zakazid', $sum)"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка вставки платежа: $sql\n"; + echo $e->getMessage(); + } + } + + + //В случае успешного платежа + function doPayment($docid, $sumpay, $TransactionId){ + global $k2; + $k2->addLog(" Liqpay true ", 'pay.log'); + $sql = "UPDATE k2pays SET sumpay='$sumpay', paydate=now(), success='1', docnum = '$TransactionId' + WHERE docid='$docid'"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка обновления платежа: $sql\n"; + echo $e->getMessage(); + } + + } + + + //Переадресация на файл дальнейших действий после записи платежа в таблицу k2pays и вывода информации об успешности платежа + function result(){ + global $k2; + + $rez='212'; + + //$rez.=header("Location://".$k2->domain().$this->result_url); + + return $rez; + + } + + + + // Возвращаем контент + function content(){ + global $k2; + $rez=''; + $raw_post_data = file_get_contents('php://input'); + if($raw_post_data){ + $rez.=$this->getCallBAck(); + + }else{ + + $rez.=$this->result(); + + } + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_privat24.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_privat24.php new file mode 100644 index 0000000..ab1309c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_privat24.php @@ -0,0 +1,259 @@ +Переход к оплате Liqpay'; + + //указываем наш обработчик callbak от liqpay + public $server_url='/?comp=k2pay&c=privat24'; + public $result_url=''; + //указываем страницу возврата после проплаты + // public $result_url='/?comp=k2pay&c=liqpay'; + // public $result_url='/?comp=k2transferzakaz&c=payresult'; + + //тестовый режим -'1', рабочий режим - '0' + public $sandbox=''; + + public $result=" +

    Благодарим за оплату!

    + "; + + public $fail_result=" +

    К сожалению, оплата не состоялась.

    + "; + + public $form_tpl = '
    + + + + + + + + + + +
    '; + + // Получает константу настроек платежных систем + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + // Получает настройки из базы данных + function getSettings(){ + $rez = ''; + + $this->merchant_id = $this->getPayParam('privat24_merchantid'); + $this->signature = $this->getPayParam('privat24_signature'); + + //$rez .= $this->go_tpl; + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + + // Вывод формы для оплаты + function getForm($order_id="", $price="100", $description='', $currency="EUR"){ + global $k2; + + + $merchant_id = $this->merchant_id; //Вписывайте сюда свой мерчант + $signature = $this->signature; //Сюда вносите public_key + + $html = $this->form_tpl; + + $html = str_replace('{merchantid}', 158981, $html); + $html = str_replace('{orderid}', $order_id, $html); + $html = str_replace('{desc}', $description, $html); + $html = str_replace('{price}', $price, $html); + + return $html; + } + + + + + // Оплата за заказ + function payZakaz($zakazid, $sum, $desc){ + $rez = ''; + // Получаем настройки + $rez .= $this->getSettings(); + $rez .= $this->getForm($zakazid, $sum, $desc); + //$this->insertPayment($zakazid, $sum); + return $rez; + } + + /** + * Обработка callback от liqpay + * @global type $k2 + */ + function getCallBAck(){ + global $k2; + $rez=''; + $str = file_get_contents('php://input'); + + $str = str_replace('%3D', '=', $str); + $str = str_replace('%26', '&', $str); + $k2->addLog(" обработка callback true1 ".$str, 'pay.log'); + //$raw_post_array = explode('|', $str); + $date = explode('payment=', $str); + $dates = strval(urldecode($date[1])); + $k2->addLog(" обработка callback true2 ".$dates, 'pay.log'); + parse_str($dates, $pay_array); + + + $liqpay = $k2->ins_comp('k2pay','secur'); + $k2->addLog(" обработка callback true ".$pay_array['order'].'|'.$pay_array['amt'], 'pay.log'); + $rez = $liqpay->insertPayment(1100000000, $pay_array['order'], $pay_array['amt']); + + $subj = 'Оплата улуг Let-Know'; + $headers = "Content-type: text/html; charset=utf-8 \r\n"; + $headers .= "From: Let-know\r\n"; + //$headers .= "Bcc: noreply@let-know.com\r\n"; + + $message = 'Пользователь совершил оплату на сумму '.$pay_array['amt'].'грн. Заказ №'.$pay_array['order'].'
    '; + $mailto = 'ae@corp2.net'; + $mailto2 = 'rs@corp2.net'; + $k2->mail->sendMail($mailto, $subj, $message, $headers); + $k2->mail->sendMail($mailto2, $subj, $message, $headers); + + $liqpay->doPayment($pay_array['order'], $pay_array['amt'], $pay_array['date']); + + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT user_id as id FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['id']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($zakazid, $sum){ + global $k2; + + $login = $k2->auth->login; + + //$userid=$this->getFirmid($login); + + $userid = $k2->auth->userid; + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay) + VALUES (1100000000, '$userid', '$zakazid', $sum)"; + $k2->addLog(" privat24 $sql ", 'pay.log'); + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка вставки платежа: $sql\n"; + $k2->addLog(" privat24".$e->getMessage()." ", 'pay.log'); + + echo $e->getMessage(); + } + } + + + //В случае успешного платежа + function doPayment($docid, $sumpay, $TransactionId){ + global $k2; + $k2->addLog(" Liqpay true ", 'pay.log'); + $sql = "UPDATE k2pays SET sumpay='$sumpay', paydate=now(), success='1', docnum = '$TransactionId' + WHERE docid='$docid'"; + + try { + $k2->db->exec($sql); + } catch (PDOException $e) { + echo "Ошибка обновления платежа: $sql\n"; + echo $e->getMessage(); + } + + } + + + //Переадресация на файл дальнейших действий после записи платежа в таблицу k2pays и вывода информации об успешности платежа + function result(){ + global $k2; + + $rez='212'; + + //$rez.=header("Location://".$k2->domain().$this->result_url); + + return $rez; + + } + + + + // Возвращаем контент + function content(){ + global $k2; + $rez=''; + $raw_post_data = file_get_contents('php://input'); + if($raw_post_data){ + $rez.=$this->getCallBAck(); + + }else{ + + $rez.=$this->result(); + + } + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_qiwi.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_qiwi.php new file mode 100644 index 0000000..42af1cd --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_qiwi.php @@ -0,0 +1,182 @@ + +
      +
    • + + + + + + + + +
    • +
      +
    • + +
    • +
    + + + "; + + + + // Получает настройки из базы данных + function getSettings(){ + $rez=''; + + $this->qiwi_merchid=$this->getPayParam('qiwi_merchid'); + $this->qiwi_apiid=$this->getPayParam('qiwi_apiid'); + $this->qiwi_passwd=$this->getPayParam('qiwi_passwd'); + $this->qiwi_shopname=$this->getPayParam('qiwi_shopname'); + $this->qiwi_passwd_mess=$this->getPayParam('qiwi_passwd_mess'); + + $rez.='

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью карточки

    '; + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + function payZakaz($zakazid, $sum){ + global $k2; + $rez=''; + $rez.="

    Нажатием данной кнопки Вы переходите к оплате за услуги с помощью сервиса QIWI

    "; + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{qiwi_merchid}', $this->qiwi_merchid, $rez); + $rez = str_replace('{successUrl}', 'http://'.$k2->domain().$this->success_url, $rez); + $rez = str_replace('{failUrl}', 'http://'.$k2->domain().$this->fail_url, $rez); + $rez = str_replace('{tel}', $this->tel, $rez); + $rez = str_replace('{currency}', $this->currency, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + return $rez; + + } + + /** + * + * @global type $k2 + * @param type $zakazid + * @param type $sum + * @return type + */ + function payZakaz2($zakazid, $sum){ + global $k2; + require_once $k2->rootdir."/k2shop/k2shop/app/app/k2/k2pay/k2qiwiAPI/qiwi.class.php"; + $Qiwi = new Qiwi(); // Создаем экземпляр класса + $rez=""; + $rez.=$this->getSettings(); + + $Qiwi->shop_id=$this->qiwi_merchid; + $Qiwi->rest_id=$this->qiwi_apiid; + $Qiwi->rest_pass=$this->qiwi_passwd; + $Qiwi->currency=$this->currency; + $Qiwi->prv_name=$this->qiwi_shopname; + + // CОЗДАНИЕ СЧЕТА + $bill_id = $zakazid; + $create_result = $Qiwi->create( + '79001234567', // телефон + $sum, // сумма + date('Y-m-d', strtotime(date('Y-m-d') . " + 1 DAY")) . "T00:00:00", // Дата в формате ISO 8601. Здесь генерируется дата на день позже, чем текущая + $bill_id, // ID платежа + 'Тестовая оплата' // комментарий + ); + if($create_result->result_code !== 0){ + echo 'Ошибка в создании счета'; + exit; + } + // ПЕРЕАДРЕСАЦИЯ НА СТРАНИЦУ ОПЛАТЫ + $Qiwi->redir( + $bill_id, // ID счета + 'http://' . $_SERVER['SERVER_NAME'] . '/success_url', // URL, на который пользователь будет переброшен в случае успешного проведения операции (не обязательно) + 'http://' . $_SERVER['SERVER_NAME'] . '/fail_url' // URL, на который пользователь будет переброшен в случае неудачного завершения операции (не обязательно) + ); + // ПОЛУЧЕНИЕ ИНФОРМАЦИИ О СЧЕТЕ + $info_result = $Qiwi->info($bill_id); + if($info_result->result_code !== 0) + echo 'Ошибка в получении информации о счете'; + else + echo 'Статус счета: ' . $info_result->bill->status; + // ОТМЕНА СЧЕТА (не должна вызываться после redir(), иначе счет отменяется до того, как появится возможность оплатить его. + // Отмена должна происходить на другой странице, например на тех, которые указываются в success или fail url) + $reject_result = $Qiwi->reject($bill_id); + if($reject_result->bill->status === 'rejected') + echo 'Не удалось отменить счет'; + else + echo 'Счет отменен'; + + return $rez; + + } + + + // Возвращаем контент + function content(){ + $rez=''; + $rez.=$this->payZakaz(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_robokassa.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_robokassa.php new file mode 100644 index 0000000..d9c4895 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_robokassa.php @@ -0,0 +1,222 @@ + + + + + + + + + + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->mrh_login=$this->getPayParam('mrh_login'); + $this->mrh_pass1=$this->getPayParam('mrh_pass1'); + $this->mrh_pass2=$this->getPayParam('mrh_pass2'); + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Robokassa

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $shp_art=$k2->auth->login; + $crc = md5("$this->mrh_login:$sum:$zakazid:$this->mrh_pass1:Shp_Art=$shp_art"); + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{mrh_login}', $this->mrh_login, $rez); + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{customdate}', $k2->auth->login, $rez); + $rez = str_replace('{currency}', $this->currency, $rez); + $rez = str_replace('{culture}', $this->culture, $rez); + $rez = str_replace('{desc}', $shp_art, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{crc}', $crc, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + $out_summ = $_POST["OutSum"]; + $inv_id = $_POST["InvId"]; + $shp_art = $_POST["Shp_Art"]; + $crc = $_POST["SignatureValue"]; + + $crc = strtoupper($crc); + $my_crc = strtoupper(md5("$out_summ:$inv_id:$pass:Shp_Art=$shp_art")); + + + $my=$shp_art."".$out_summ; + // проверка корректности подписи + // check signature + if ($my_crc !=$crc) + { + echo "bad sign\n"; + $k2->addLog("Robokassa false $my", 'pay.log'); + exit(); + } + + + $login=$shp_art; + + $firmid=$this->getFirmid($login); + $sumpay=$_POST["OutSum"]; + $this->doPayment($firmid, $sumpay); + $k2->addLog("Robokassa true $my", 'pay.log'); + // признак успешно проведенной операции + echo "OK$inv_id\n"; + + return $rez; + } + + function content(){ + global $k2; + + $rez=''; + + + + if($k2->post('SignatureValue')){ + $this->getPayment(); + $rez.=$this->result; + }else{ + $rez.=$this->fail_result; + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_secur.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_secur.php new file mode 100644 index 0000000..8f01bd5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_secur.php @@ -0,0 +1,143 @@ + 'board_connection']; +// function init_obj(){ +// global $k2; +// +// } + + function userOrder($docid) + { + global $k2; + $k2->sql->db = $this->db; + + $serv = $k2->sql->sel("SELECT firmid, username + FROM k2docs + WHERE docid = $docid "); + + $k2->addLog("SELECT firmid, username FROM k2docs WHERE docid = $docid ", 'pay.log'); + $rez = $serv['data'][0]; + foreach ($serv['data'] as $key => $value) { + $k2->addLog($key." privat24 from docs".$value, 'pay.log'); + } + return $rez; + } + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + //Вставка строки в таблицу при попытке оплаты + function insertPayment($paysysid, $zakazid, $sum){ + global $k2; + + + $userid = $this->userOrder($zakazid)['firmid']; + $username = $this->userOrder($zakazid)['username']; + //$login = $k2->auth->login; + + //$username = $k2->auth->username; + //$userid=$this->getFirmid($login); + + $datepay = date("Y-m-d H:i:s"); + $k2->addLog(" true ".$userid.'|'.$username.'|'.$datepay, 'pay.log'); + //$userid = $k2->auth->userid; + + $sql = "INSERT INTO k2pays (paysysid, userid, docid, sumpay, user, paydate) + VALUES ($paysysid, '$userid', '$zakazid', '$sum', '$username', '$datepay')"; + $rez = $k2->sql->ins_arr( + ['table' => 'k2pays', + 'fields' => [ + + 'paysysid'=>$paysysid, + 'userid'=>$userid, + 'docid'=>$zakazid, + 'sumpay'=>$sum, + 'user'=>$username, + 'paydate'=>$datepay + ] + ] + ); +// try { +// $k2->db->exec($sql); +// } catch (PDOException $e) { +// echo "Ошибка вставки платежа: $sql\n"; +// echo $e->getMessage(); +// } + $rez = 1; + return $rez; + } + function checkTransaction($docid){ + global $k2; + $findpay = $k2->sql->sel('SELECT docid FROM k2pays WHERE docid=:docid', ['docid'=>$docid]); + $k2->addLog('проверка докид '.$findpay['data'][0]['docid'], 'pay.log'); + $rez = 1; + if ($findpay['data'] == []){ + $rez = 0; + } + return $rez; + } + + //В случае успешного платежа + function doPayment($docid, $sumpay, $TransactionId, $descr='', $pay_comments=''){ + global $k2; + //$k2->addLog(" Liqpay true ", 'pay.log'); +// $sql = "UPDATE k2pays SET sumpay='$sumpay', paydate=now(), +// success='1', transactionId='$TransactionId', +// comment='$descr', pay_comments='$pay_comments' +// WHERE docid='$docid'"; +// +// try { +// $k2->db->exec($sql); +// } catch (PDOException $e) { +// echo "Ошибка обновления платежа: $sql\n"; +// echo $e->getMessage(); +// } + + $r = $k2->sql->upd( + "UPDATE k2pays + SET + sumpay='$sumpay', + success='1', + paydate=now(), + transactionId='$TransactionId', + comment='$descr', + pay_comments='$pay_comments' + + WHERE docid='$docid' ", + [ + ] + ); + + + if($r['err']!==''){ + $k2->log->err('Error Update User: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + } + + function content(){ + global $k2; + + $rez = $this->insertPayment(); + + return $rez; + } +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_walletone.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_walletone.php new file mode 100644 index 0000000..61a0d6b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_walletone.php @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->wmi_merchid=$this->getPayParam('wmi_merchid'); + + $this->wmi_secretkey=$this->getPayParam('wmi_secretkey'); + + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Interkassa

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{wmi_merchid}', $this->wmi_merchid, $rez); + + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + + + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + $rez = ''; + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES (5, ".$firmid.", ".$sumpay." )"; + + try { + $rez = $k2->db->$sql; + } catch (PDOException $e) { + echo "Ошибка"; + echo $e->getMessage(); + } + return $rez; + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + + $k2->addLog("Платеж wmi $my", 'pay.log'); + return $rez; + } + + function content(){ + global $k2; + $rez=''; + $rez.=$this->getPayment(); + $rez.=$this->result; + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_wayforpay.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_wayforpay.php new file mode 100644 index 0000000..b6a3980 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_wayforpay.php @@ -0,0 +1,232 @@ +account = $this->getPayParam('merchant_login'); + $this->secret = $this->getPayParam('secret_key'); + $this->service_url = $this->getPayParam('service_url'); + $this->return_url = $this->getPayParam('return_url'); + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($docid, $sum, $descr = '', $server_url = ''){ + global $k2; + + $this->getSettings(); + + // Use test credential or yours + //$credential = new AccountSecretTestCredential(); + $credential = new AccountSecretCredential('K2', $this->secret); + + $form = PurchaseWizard::get($credential) + ->setOrderReference(sha1(microtime(true))) + ->setAmount($sum) + ->setCurrency('UAH') + ->setOrderDate(new \DateTime()) + ->setOrderNo($docid) + ->setMerchantDomainName($k2->proto.'://'.$k2->domain()) + // ->setClient(new Client( + // 'John', + // 'Dou', + // 'john.dou@gmail.com', + // '+12025550152', + // 'USA' + // )) + ->setProducts(new ProductCollection(array( + new Product($descr,$sum, 1) + ))) + ->setReturnUrl($k2->proto.'://'.$k2->domain().$this->return_url) + ->setServiceUrl($k2->proto.'://'.$k2->domain().$this->service_url) + ->getForm() + ->getAsString('WayForPay'); + + $rez = '

    ' . $form . ''; + + return $rez; + } + + + function getCallBAck(){ + global $k2; + $rez=''; + + $json = file_get_contents('php://input'); + $obj = json_decode($json, TRUE); + $this->getSettings(); + //$credential = new AccountSecretTestCredential(); + + $credential = new AccountSecretCredential('let_know_com', $this->secret); + $k2->addLog($this->account, 'pay.log'); + //$k2->addLog($obj['orderNo'].' - Номер', 'pay.log'); + $k2->addLog($json, 'pay.log'); + try { + $handler = new ServiceUrlHandler($credential); + $response = $handler->parseRequestFromPostRaw(); + + $text = $handler->getSuccessResponse($response->getTransaction()); + $obj2 = json_decode($text, TRUE); + if ($obj2['status'] == 'accept') { + $liqpay = $k2->ins_comp('k2pay','secur'); + + $checkTr = $liqpay->checkTransaction(trim($obj['orderNo'])); + $k2->addLog($checkTr.'проверка транзакции', 'pay.log'); + if (!$checkTr) { + $rez = $liqpay->insertPayment(1100000001, $obj['orderNo'], $obj['amount']); + $liqpay->doPayment($obj['orderNo'], $obj['amount'], $obj['orderReference']); + + $subj = 'Оплата улуг Let-Know'; + $headers = "Content-type: text/html; charset=utf-8 \r\n"; + $headers .= "From: Let-know\r\n"; + //$headers .= "Bcc: noreply@let-know.com\r\n"; + $message = 'Пользователь: '.$obj['email'].' совершил оплату на сумму '.$obj['amount'].'грн. Заказ №'.$obj['orderNo'].'
    '; + $mailto = 'ae@corp2.net'; + $mailto2 = 'rs@corp2.net'; + //$k2->mail->sendMail($mailto, $subj, $message, $headers); + //$k2->mail->sendMail($mailto2, $subj, $message, $headers); + } else { + $k2->addLog('again come handler', 'pay.log'); + exit('end'); + } + } + + $k2->addLog($obj2['status'], 'pay.log'); + //echo $handler->getSuccessResponse($response->getTransaction()); + } catch (WayForPaySDKException $e) { + $text = "WayForPay SDK exception: " . $e->getMessage(); + $k2->addLog($text, 'pay.log'); + //echo "WayForPay SDK exception: " . $e->getMessage(); + } + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + $rez = ''; + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES (5, ".$firmid.", ".$sumpay." )"; + + try { + $rez = $k2->db->$sql; + } catch (PDOException $e) { + echo "Ошибка"; + echo $e->getMessage(); + } + return $rez; + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + + $k2->addLog("Платеж wmi $my", 'pay.log'); + return $rez; + } + + function content(){ + global $k2; + $rez=''; + $rez.=$this->getPayment(); + $rez.=$this->result; + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_webmoney.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_webmoney.php new file mode 100644 index 0000000..0539def --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_webmoney.php @@ -0,0 +1,236 @@ +'' + ); + + + public $pay_form = " +
    + + + + + + + + + + +
    + "; + + public $result=" +

    Благодарим за проплату!

    + "; + + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->webmoney_merchid=$this->getPayParam('webmoney_merchid'); + $this->webmoney_b=$this->getPayParam('webmoney_b'); + $this->webmoney_secretkey=$this->getPayParam('webmoney_secretkey'); + $this->customData['login']=$k2->auth->login; + $rez.='

    Нажатием данной кнопки Вы переходите к оплате за услуги с помощью сервиса Web Money

    '; + + + + return $rez; + } + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez = ""; + $rez .= $this->getSettings(); + $rez .= $this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + $rez = str_replace('{purse}', $this->webmoney_b, $rez); + $rez = str_replace('{desc}', $this->description, $rez); + $rez = str_replace('{returnUrl}', '//'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{customdate}', $this->customData['login'], $rez); + + return $rez; + + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + global $k2; + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES ($this->paysysid, ".$firmid.", ".$sumpay." )"; + + + $k2->db->exec($sql); + + + } + + + /** + * Предварительная обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez=''; + $rez.=$this->getSettings(); + + + if($_POST['LMI_PAYEE_PURSE'] == $this->webmoney_b) { + $k2->addLog("Webmoney true $my", 'pay.log'); + echo 'YES'; + exit(); + }else{ + $k2->addLog("Webmoney false $my", 'pay.log'); + exit(); + } + return $rez; + } + + /** + * Проверка платежа + * @global type $k2 + */ + function checkPay(){ + global $k2; + $rez=''; + $rez.=$this->getSettings(); + + $LMI_SECRET_KEY = $this->webmoney_secretkey; + + $str_hash = $this->webmoney_b. + $_POST['LMI_PAYMENT_AMOUNT']. + $_POST['LMI_PAYMENT_NO']. + $_POST['LMI_MODE']. + $_POST['LMI_SYS_INVS_NO']. + $_POST['LMI_SYS_TRANS_NO']. + $_POST['LMI_SYS_TRANS_DATE']. + $LMI_SECRET_KEY. + $_POST['LMI_PAYER_PURSE']. + $_POST['LMI_PAYER_WM']; + $str_hash = hash( 'sha256', $str_hash); + if($str_hash == $_POST['LMI_HASH']) { + $k2->addLog("Платеж Webmoney ", 'pay.log'); + $my = $_POST['LMI_HASH']; + $k2->addLog("Платеж Webmoney $my", 'pay.log'); + exit(); + } + else { + exit(); + } + + } + + function content(){ + global $k2; + + $rez=''; + + if( isset($_POST['LMI_PREREQUEST']) && $_POST['LMI_PREREQUEST'] == 1){ + $rez.=$this->getPayment(); + }elseif($_POST['LMI_SYS_TRANS_NO']==0){ + $rez.=$this->fail_result; + }else{ + $rez.=$this->result; + } + + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2pay_yandexmoney.php b/k2shop/k2shop/app/app/k2/k2pay/k2pay_yandexmoney.php new file mode 100644 index 0000000..7a87002 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2pay_yandexmoney.php @@ -0,0 +1,181 @@ + + + + + + + + + + + + "; + + public $result=" +

    Благодарим за проплату!

    + + "; + public $fail_result=" +

    Увы проплата не состоялась!

    + + "; + + + /** + * Получает настройки из базы данных + * @return string + */ + function getSettings(){ + global $k2; + $rez=''; + + $this->yandexmoney_merchid=$this->getPayParam('yandexmoney_merchid'); + $this->yandexmoney_scid=$this->getPayParam('yandexmoney_scid'); + $this->yandexmoney_secretkey=$this->getPayParam('yandexmoney_secretkey'); + + + + //$rez.='merchant_id='.$this->merchant_id.'
    '; + //$rez.='signature='.$this->signature.'
    '; + + return $rez; + } + + + /** + * Выводим форму + * @global type $k2 + * @return type + */ + function payZakaz($zakazid, $sum){ + global $k2; + + $rez=""; + + $rez.="

    Нажатием кнопки Оплатить Вы переходите к оплате за услуги с помощью сервиса Yandexmoney

    "; + $rez.=$this->getSettings(); + $rez.=$this->pay_form; + $rez = str_replace('{payUrl}', $this->payUrl, $rez); + $rez = str_replace('{yandexmoney_merchid}', $this->yandexmoney_merchid, $rez); + $rez = str_replace('{yandexmoney_scid}', $this->yandexmoney_scid, $rez); + $rez = str_replace('{returnUrl}', 'http://'.$k2->domain().$this->returnUrl, $rez); + $rez = str_replace('{login}', $k2->auth->login, $rez); + + $rez = str_replace('{sum}', $sum, $rez); + $rez = str_replace('{zakazid}', $zakazid, $rez); + + return $rez; + } + + /** + * Получает канстанту настроек платежных систем + * @global type $k2 + * @param type $paramname + * @return type + */ + function getPayParam($paramname){ + global $k2; + + $rez=''; + + $sql="select p.payvalue from k2payparam p where p.payident='$paramname'"; + + foreach ($k2->db->query($sql) as $row) { + $rez=$row["payvalue"]; + } + + return $rez; + } + + + + + /** + * + * @param type $login + * @return type + */ + function getFirmid($login){ + $rez=""; + $sql = "SELECT firmid FROM k2users WHERE login = '".$login."' LIMIT 1"; + + foreach ($k2->db->query($sql) as $row) { + $rez = $row['firmid']; + } + return $rez; + } + + /** + * + * @global type $k2 + * @param type $firmid + * @param type $sumpay + * @return type + */ + function doPayment($firmid, $sumpay){ + global $k2; + $rez = ''; + + $sql = "INSERT INTO k2pays (paysysid, firmid, sumpay) + VALUES (5, ".$firmid.", ".$sumpay." )"; + + try { + $rez = $k2->db->$sql; + } catch (PDOException $e) { + echo "Ошибка"; + echo $e->getMessage(); + } + return $rez; + } + + + + /** + * обработка платежа + * @global type $k2 + */ + function getPayment(){ + global $k2; + $rez = ''; + + + $k2->addLog("Платеж yandexmoney $my", 'pay.log'); + return $rez; + } + + function content(){ + global $k2; + $rez=''; + $rez.=$this->getPayment(); + $rez.=$this->result; + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2payonlineAPI/payment.class.php b/k2shop/k2shop/app/app/k2/k2pay/k2payonlineAPI/payment.class.php new file mode 100644 index 0000000..09683a8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2payonlineAPI/payment.class.php @@ -0,0 +1,496 @@ +Language=$Language; + $this->MerchantId=$MerchantId; + $this->PrivateSecurityKey=$PrivateSecurityKey; + $this->OrderId=$OrderId; + $this->Amount=$Amount; + $this->Currency=$Currency; + $this->OrderDescription=$OrderDescription; + $this->ValidUntil=$ValidUntil; + $this->ReturnUrl=$ReturnUrl; + $this->FailUrl=$FailUrl; + $this->IData=$IData; + $this->PNR=$PNR; + $this->Commission=$Commission; + $this->RebillAnchor=$RebillAnchor; + $this->TransactionId=$TransactionId; + $this->Ip=$Ip; + $this->Email=$Email; + $this->CardHolderName=$CardHolderName; + $this->CardNumber=$CardNumber; + $this->CardExpDate=$CardExpDate; + $this->CardCvv=$CardCvv; + $this->Country=$Country; + $this->City=$City; + $this->Address=$Address; + $this->Zip=$Zip; + $this->State=$State; + $this->Phone=$Phone; + $this->Issuer=$Issuer; + $this->ContentType=$ContentType; + $this->PD=$pd; + $this->PARes=$pares; + $this->TermUrl=$TermUrl; + } + // генерируем ссылку на оплату по схеме Standart + function GetPaymentURL() + { + $params = 'MerchantId='. $this->MerchantId; + $params .= '&OrderId='.$this->OrderId; + $params .= '&Amount='. $this->Amount; + $params .= '&Currency='. $this->Currency; + if ($this->ValidUntil) + { + $params .= '&ValidUntil=' . $this->ValidUntil; + } +//Авиа потом добавлю + if (strlen($this->OrderDescription)<101 AND strlen($this->OrderDescription)>1) + { + $params .= '&OrderDescription=' . $this->OrderDescription; + } + $params .= '&PrivateSecurityKey=' . $this->PrivateSecurityKey; + //echo $params; + $SecurityKey=md5($params); + $Paymenturl="https://secure.payonlinesystem.com/".$this->Language."/payment/"; + $url_query= "?MerchantId=".$this->MerchantId."&OrderId=".urlencode($this->OrderId)."&Amount=".$this->Amount."&Currency=".$this->Currency; + if ($this->ValidUntil) {$url_query.= "&ValidUntil=".urlencode($this->ValidUntil);} + if ($this->OrderDescription) {$url_query.= "&OrderDescription=".urlencode($this->OrderDescription);} + if ($this->ReturnUrl) {$url_query.= "&ReturnUrl=".urlencode($this->ReturnUrl);} + if ($this->FailUrl) {$url_query.= "&FailUrl=".urlencode($this->FailUrl);} + $url_query.="&SecurityKey=".$SecurityKey; + $url_full=$Paymenturl.$url_query; + + + return $url_full; + } + + //Метод Complete Real with curl + function PaymentComplete() + { + if ($this->TransactionId AND $this->Amount) + { + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + global $Result; + $url="https://secure.payonlinesystem.com/payment/transaction/complete/"; + $queryComplete="MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + $Result=$url."?MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="Complete: Неуказан один из параметров TransactionId или Amount"; + } + //CURL + $url = $Result; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $Result = curl_exec($ch); + curl_close($ch); + echo $Result ; + + return $Result; + } + +//Метод Complete получения ссылки + function GetPaymentCompleteURL() + { + if ($this->TransactionId AND $this->Amount) + { + $url="https://secure.payonlinesystem.com/payment/transaction/complete/"; + $queryComplete="MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + echo $Result=$url."?MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="COMPLETE: Неуказан один из параметров TransactionId или Amount"; + } + + return $Result; + } + +// Метод ребил получение ссылки + function GetPaymentRebillURL() + { + if ($this->Amount AND $this->RebillAnchor AND $this->Currency) + { + $url="https://secure.payonlinesystem.com/payment/transaction/rebill/"; + $queryComplete="MerchantId=".$this->MerchantId."&RebillAnchor=".$this->RebillAnchor."&OrderId=".$this->OrderId."&Amount=".$this->Amount."&Currency=".$this->Currency."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + $Result=$url."?MerchantId=".$this->MerchantId."&RebillAnchor=".urlencode($this->RebillAnchor)."&OrderId=".urlencode($this->OrderId)."&Amount=".$this->Amount."&Currency=".$this->Currency."&SecurityKey=".$SecurityKey; + } + else + { + $Result="REBILL: Неуказан один из параметров Amount, RebillAnchor или Currency"; + } + + return $Result; + } +//метод ребил с получением результатов + function PaymentRebill() + { + if ($this->Amount AND $this->RebillAnchor AND $this->Currency) + { + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + global $Result; + $url="https://secure.payonlinesystem.com/payment/transaction/rebill/"; + $queryComplete="MerchantId=".$this->MerchantId."&RebillAnchor=".$this->RebillAnchor."&OrderId=".$this->OrderId."&Amount=".$this->Amount."&Currency=".$this->Currency."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + $Result=$url."?MerchantId=".$this->MerchantId."&RebillAnchor=".urlencode($this->RebillAnchor)."&OrderId=".urlencode($this->OrderId)."&Amount=".$this->Amount."&Currency=".$this->Currency."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="REBILL: Неуказан один из параметров TransactionId,Amount или RebillAnchor"; + } + //CURL + $url = $Result; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $Result = curl_exec($ch); + curl_close($ch); + echo $Result ; + return $Result; + } + + + +// Метод void получение ссылки + function GetPaymentVoidURL() + { + if ($this->TransactionId) + { + + $url="https://secure.payonlinesystem.com/payment/transaction/void/"; + $queryComplete="MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + $Result=$url."?MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="VOID: Неуказан параметр TransactionId "; + } + + return $Result; + } +//метод ребил с получением результатов (CURL) + function PaymentVoid() + { + if ($this->TransactionId ) + { + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + global $Result; + $url="https://secure.payonlinesystem.com/payment/transaction/void/"; + $queryComplete="MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + $Result=$url."?MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="VOID: Неуказан параметр TransactionId "; + } + //CURL + $url = $Result; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $Result = curl_exec($ch); + curl_close($ch); + echo $Result ; + return $Result; + } + + + +// Метод refund получение ссылки + function GetPaymentRefundURL() + { + if ($this->TransactionId AND $this->Amount) + { + + $url="https://secure.payonlinesystem.com/payment/transaction/refund/"; + $queryComplete="MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + echo $Result=$url."?MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="Refund: Неуказан параметр TransactionId или Amount"; + } + + return $Result; + } +//метод Refund с получением результатов + function PaymentRefund() + { + if ($this->TransactionId AND $this->Amount) + { + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + global $Result; + $url="https://secure.payonlinesystem.com/payment/transaction/refund/"; + $queryComplete="MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&PrivateSecurityKey=".$this->PrivateSecurityKey; + $SecurityKey=md5($queryComplete); + $Result=$url."?MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&Amount=".$this->Amount."&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + } + else + { + $Result="Refund: Неуказан параметр TransactionId или Amount"; + } + //CURL + $url = $Result; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $Result = curl_exec($ch); + curl_close($ch); + echo $Result ; + return $Result; + } + + + + // Метод auth + function PaymentAuth() + { + if ($this->Ip AND $this->CardHolderName AND $this->CardNumber AND $this->CardExpDate AND $this->CardCvv AND $this->Issuer AND $this->OrderId AND $this->Amount AND $this->Currency) + { + $params = 'MerchantId='. $this->MerchantId; + $params .= '&OrderId='.$this->OrderId; + $params .= '&Amount='. $this->Amount; + $params .= '&Currency='. $this->Currency; + $params .= '&PrivateSecurityKey=' . $this->PrivateSecurityKey; + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + //узнаем ключ + global $Result; + $SecurityKey=md5($params); + $Paymenturl="https://secure.payonlinesystem.com/payment/transaction/auth/"; + $url_query= "MerchantId=".$this->MerchantId."&OrderId=".$this->OrderId."&Amount=".$this->Amount."&Currency=".$this->Currency."&Ip=".$this->Ip."&CardHolderName=".$this->CardHolderName."&CardNumber=".$this->CardNumber. + "&CardExpDate=".$this->CardExpDate."&CardCvv=".$this->CardCvv."&Issuer=".$this->Issuer."&Email=".$this->Email; + + if ($this->Country AND strlen($this->Country)==2) {$url_query.= "&Country=".$this->Country;} + if ($this->City) {$url_query.= "&City=".$this->City;} + if ($this->Address) {$url_query.= "&Address=".$this->Address;} + if ($this->Zip) {$url_query.= "&Zip=".$this->Zip;} + if ($this->State) {$url_query.= "&State=".$this->State;} + if ($this->Phone) {$url_query.= "&Phone=".$this->Phone;} + + $url_query.="&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $Paymenturl); + curl_setopt($ch, CURLOPT_VERBOSE, TRUE); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $url_query); + $Result = curl_exec($ch); + curl_close($ch); + echo $Result ; + + } + else {echo $Result="AUTH : Нет одного из обязательного параметра";} + + return $Result; + } + + + + // Метод 3DS + function Payment3DS() + { + if ($this->PD AND $this->PARes AND $this->TransactionId) + { + $params = 'MerchantId='. $this->MerchantId; + $params .= '&TransactionId='.$this->TransactionId; + $params .= '&PARes='. $this->PARes; + $params .= '&PD='. $this->PD; + $params .= '&PrivateSecurityKey=' . $this->PrivateSecurityKey; + //узнаем ключ + $SecurityKey=md5($params); + global $Result; + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + $Paymenturl="https://secure.payonlinesystem.com/payment/transaction/auth/3ds/"; + $url_query= "MerchantId=".$this->MerchantId."&TransactionId=".$this->TransactionId."&PARes=".$this->PARes."&PD=".$this->PD; + $url_query.="&SecurityKey=".$SecurityKey."&ContentType=".$this->ContentType; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $Paymenturl); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $url_query); + $Result = curl_exec($ch); + curl_close($ch); + echo $Result ; + + } + else {echo $Result="3DS: Нет одного из обязательного параметра";} + + return $Result; + } + + // Метод auth && 3DS + function PaymentAuth3DS() + { + + if ($this->Ip AND $this->CardHolderName AND $this->CardNumber AND $this->CardExpDate AND $this->CardCvv AND $this->Issuer AND $this->TermUrl) + { + $params = 'MerchantId='. $this->MerchantId; + $params .= '&OrderId='.$this->OrderId; + $params .= '&Amount='. $this->Amount; + $params .= '&Currency='. $this->Currency; + + $params .= '&PrivateSecurityKey=' . $this->PrivateSecurityKey; + //узнаем ключ + if (strtolower ($this->ContentType)=='xml' ) + { + header("Content-type: text/xml"); + } + $SecurityKey=md5($params); + $Paymenturl="https://secure.payonlinesystem.com/payment/transaction/auth/"; + $url_query= "MerchantId=".$this->MerchantId."&OrderId=".$this->OrderId."&Amount=".$this->Amount."&Currency=".$this->Currency."&Ip=".$this->Ip."&CardHolderName=".$this->CardHolderName."&CardNumber=".$this->CardNumber. + "&CardExpDate=".$this->CardExpDate."&CardCvv=".$this->CardCvv."&Issuer=".$this->Issuer."&Email=".$this->Email."&ContentType=".$this->ContentType; + if ($this->ValidUntil) {$url_query.= "&ValidUntil=".$this->ValidUntil;} + if ($this->OrderDescription) {$url_query.= "&OrderDescription=".$this->OrderDescription;} + if ($this->Country AND strlen($this->Country)==2) {$url_query.= "&Country=".$this->Country;} + if ($this->City) {$url_query.= "&City=".$this->City;} + if ($this->Address) {$url_query.= "&Address=".$this->Address;} + if ($this->Zip) {$url_query.= "&Zip=".$this->Zip;} + if ($this->State) {$url_query.= "&State=".$this->State;} + if ($this->Phone) {$url_query.= "&Phone=".$this->Phone;} + + $url_query.="&SecurityKey=".$SecurityKey; + + + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $Paymenturl); + //For Debugging + curl_setopt($ch, CURLOPT_VERBOSE, TRUE); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $url_query); + $Result = curl_exec($ch); + curl_close($ch); + + //для дебага + /*$f2=fopen("xml.txt", "a"); + fwrite($f2,$Result); + fclose($f2); + */ + //Парсим XML ответ + $xml = simplexml_load_string($Result); + $xml_array = unserialize(serialize(json_decode(json_encode((array) $xml), 1))); + //print_r($xml_array); + //Формируем данные для отправки на стр.банка эмитента + $pd=$xml_array['threedSecure']['pd']; + $site_banka=$xml_array['threedSecure']['acsurl']; + $pareq=$xml_array['threedSecure']['pareq']; + $MD=$xml_array['id'].";".$pd; + $termurl=$this->TermUrl; + + $data="PaReq=".$pareq."&MD=".$MD."&TermUrl=".$termurl; + + + + if (($pd!='' OR $site_banka!='') AND strlen($pd)>40) + { + header("Content-type: text/html"); + + echo $site=" + +
    + + + + +
    "; + + } else {echo $Result;} + + } + else {echo $Result="Auth3DS: Нет одного из обязательного параметра";} + + return $Result; + } + +} + + +?> \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/PaypalIPN.php b/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/PaypalIPN.php new file mode 100644 index 0000000..b7edc05 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/PaypalIPN.php @@ -0,0 +1,115 @@ +use_sandbox = true; + } + /** + * Determine endpoint to post the verification data to. + * @return string + */ + public function getPaypalUri() + { + if ($this->use_sandbox) { + return self::SANDBOX_VERIFY_URI; + } else { + return self::VERIFY_URI; + } + } + /** + * Verification Function + * Sends the incoming post data back to paypal using the cURL library. + * + * @return bool + * @throws Exception + */ + public function verifyIPN() + { + if ( ! count($_POST)) { + throw new Exception("Missing POST Data"); + } + $raw_post_data = file_get_contents('php://input'); + $raw_post_array = explode('&', $raw_post_data); + $myPost = []; + + foreach ($raw_post_array as $keyval) { + $keyval = explode('=', $keyval); + if (count($keyval) == 2) { + // Since we do not want the plus in the datetime string to be encoded to a space, we manually encode it. + if ($keyval[0] === 'payment_date') { + if (substr_count($keyval[1], '+') === 1) { + $keyval[1] = str_replace('+', '%2B', $keyval[1]); + } + } + $myPost[$keyval[0]] = urldecode($keyval[1]); + } + } + // Build the body of the verification post request, adding the _notify-validate command. + $req = 'cmd=_notify-validate'; + $get_magic_quotes_exists = false; + if (function_exists('get_magic_quotes_gpc')) { + $get_magic_quotes_exists = true; + } + foreach ($myPost as $key => $value) { + if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { + $value = urlencode(stripslashes($value)); + } else { + $value = urlencode($value); + } + $req .= "&$key=$value"; + } + // Post the data back to paypal, using curl. Throw exceptions if errors occur. + $ch = curl_init($this->getPaypalUri()); + curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $req); + curl_setopt($ch, CURLOPT_SSLVERSION, 6); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + // This is often required if the server is missing a global cert bundle, or is using an outdated one. + if ($this->use_local_certs) { + curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/cert/cacert.pem"); + } + curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Connection: Close']); + $res = curl_exec($ch); + $info = curl_getinfo($ch); + $http_code = $info['http_code']; + if ($http_code != 200) { + throw new Exception("PayPal responded with http code $http_code"); + } + if ( ! ($res)) { + $errno = curl_errno($ch); + $errstr = curl_error($ch); + curl_close($ch); + throw new Exception("cURL error: [$errno] $errstr"); + } + curl_close($ch); + // Check if paypal verfifes the IPN data, and if so, return true. + if ($res == self::VALID) { + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/cert/cacert.pem b/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/cert/cacert.pem new file mode 100644 index 0000000..a94c80a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/cert/cacert.pem @@ -0,0 +1,4051 @@ +Skip to content +Personal Open source Business Explore +Sign upSign inPricingBlogSupport +This repository +Search + Watch 52 Star 197 Fork 180 paypal/ipn-code-samples + Code Issues 3 Pull requests 4 Projects 0 Wiki Pulse Graphs +Branch: master Find file Copy pathipn-code-samples/php/cert/cacert.pem +ee2f94c 29 days ago +@overint overint add certs +1 contributor +RawBlameHistory +4037 lines (3878 sloc) 256 KB +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Wed Sep 14 03:12:05 2016 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.26. +## SHA256: 01bbf1ecdd693f554ff4dcbe15880b3e6c33188a956c15ff845d313ca69cfeb8 +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +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 +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Fotanusitvany +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +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 +66+KAQ== +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorite Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +China Internet Network Information Center EV Certificates Root +============================================================== +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D +aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg +Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG +A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM +PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl +cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y +jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV +98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H +klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 +KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC +7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD +glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 +0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM +7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 +5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= +-----END CERTIFICATE----- + +Swisscom Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +5OfNeOI5wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +Swisscom Root EV CA 2 +===================== +-----BEGIN CERTIFICATE----- +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 +l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +WoSign +====== +-----BEGIN CERTIFICATE----- +MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ +BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO +CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX +2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 +KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR ++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez +EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk +lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 +8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY +yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C +AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R +8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 +LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq +T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj +y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC +2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes +5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ +EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh +mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx +kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi +kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== +-----END CERTIFICATE----- + +WoSign China +============ +-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv +geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD +VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k +8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 +uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 +dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 +Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy +b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc +76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m ++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 +yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX +GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA +A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 +yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY +r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 +j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A +kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 +qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y +jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB +ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv +T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO +kI26oQ== +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +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 +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +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 +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +TURKTRUST Elektronik Sertifika Hizmet Saglay?c?s? H5 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +TURKTRUST Elektronik Sertifika Hizmet Saglay?c?s? H6 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 +MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL +BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf +aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm +aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a +2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED +wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb +HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV ++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT +9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R +fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy +o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW +hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 +O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +Certplus Root CA G1 +=================== +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV +BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe +Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD +ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN +r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx +Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj +BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv +LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 +z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc +4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd +4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj +jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ +ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G +A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY +lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG +YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ +2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F +6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX +CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe +tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC +VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ ++mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ +qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- + +Certplus Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT +AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x +NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 +cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN +Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud +IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV +HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl +vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- + +OpenTrust Root CA G1 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx +MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa +Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 +ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO +YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 +xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO +9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq +3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi +n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 +URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr +TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px +N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv +uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK +n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh +X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 +nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm +GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ +bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o +4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA +OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx +-----END CERTIFICATE----- + +OpenTrust Root CA G2 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy +MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ +Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz +4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV +eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt +UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz +3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj +3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz +9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 +0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT +y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 +M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI +mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG +S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp +EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ +6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr +gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo +SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 +YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm +u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK +-----END CERTIFICATE----- + +OpenTrust Root CA G3 +==================== +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X +DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w +ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B +ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf +BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM +BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta +3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- +Contact GitHub API Training Shop Blog About +© 2016 GitHub, Inc. Terms Privacy Security Status Help \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/paypal.png b/k2shop/k2shop/app/app/k2/k2pay/k2paypalAPI/paypal.png new file mode 100644 index 0000000000000000000000000000000000000000..27356671fc41501ed556b3267b6488eaee9b2e98 GIT binary patch literal 57488 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 z�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 literal 0 HcmV?d00001 diff --git a/k2shop/k2shop/app/app/k2/k2pay/k2qiwiAPI/qiwi.class.php b/k2shop/k2shop/app/app/k2/k2pay/k2qiwiAPI/qiwi.class.php new file mode 100644 index 0000000..0f94b31 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/k2qiwiAPI/qiwi.class.php @@ -0,0 +1,211 @@ + + * @copyright 2014 atnartur (Атнагулов Артур) + */ +class Qiwi{ + /** + * ID магазина + * @var int + */ + public $shop_id = 000000; + + + /** + * API ID (REST ID) для BASIC авторизации + * @var int + */ + public $rest_id = 00000000; + + + /** + * пароль API + * @var string + */ + public $rest_pass = 'PASSWORD'; + + + /** + * валюта + * @var string + */ + public $currency = 'RUB'; + + + /** + * Источник оплаты: mobile - оплата с мобильного телефона пользователя, qw - с любых источников оплаты Visa Qiwi Wallet + * @var string + */ + public $pay_source = 'qw'; + + + /** + * название провайдера + * @var string + */ + public $prv_name = 'My store'; + /** + * Флаг отладки. Если true, выводятся отладочные сообщения + * @var boolean + */ + public $debug = false; + + + + /** + * Конструктор класса. Проверяет наличие CURL + */ + function __construct(){ + if(!function_exists('curl_init')){ + throw new Exception('CURL library not found on this server'); + } + } + + + /** + * Создает новый CURL запрос и выставляет таймаут соединения 30 секунд + * + * @returns {resource} CURL resourse + */ + private function __curl_start($url){ + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + return $ch; + } + + + /** + * Выставление счета + * + * @param {string} tel Телефон пользователя, на которого выставляется счет + * @param {int} amount Сумма счета + * @param {string} date Срок годности счета (в формате ISO 8601) + * @param {string} bill_id Уникальный номер счета + * @param {string} comment Комментарий к платежу (не обязательно) + * @returns {object} Объект ответа от сервера QIWI + */ + function create($tel, $amount, $date, $bill_id, $comment = null){ + $parameters = array( + 'user' => 'tel:+'.$tel, // телефон начинается с + + 'amount' => $amount, + 'ccy' => $this->currency, + 'comment' => $comment, + 'pay_source' => $this->pay_source, + 'lifetime' => $date, + 'prv_name' => $this->prv_name, + ); + + + $ch = $this->__curl_start('https://w.qiwi.com/api/v2/prv/'.$this->shop_id.'/bills/'.$bill_id); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + "Accept: text/json", + "Content-Type: application/x-www-form-urlencoded; charset=utf-8" + )); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $this->rest_id . ':' . $this->rest_pass); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $httpResponse = curl_exec($ch); + if($this->debug) + var_dump($httpResponse); + if (!$httpResponse) { + // Описание ошибки, к примеру + throw new Exception(curl_error($ch).'('.curl_errno($ch).')'); + return false; + } + $httpResponseAr = @json_decode($httpResponse); + return $httpResponseAr->response; + } + /** + * Возвращает ссылку на страницу оплаты счета. Используется в redir() + * + * @param {string} bill_id Уникальный номер счета + * @param {string} success_url URL, на который пользователь будет переброшен в случае успешного проведения операции (не обязательно) + * @param {string} fail_url URL, на который пользователь будет переброшен в случае неудачного завершения операции (не обязательно) + * @return {string} Ссылка на страницу оплаты счета + */ + function redir_link($bill_id, $success_url = '', $fail_url = ''){ + return "https://w.qiwi.com/order/external/main.action?shop=" . $this->shop_id . "&transaction=" . $bill_id . + "&successUrl=" . $success_url . "&failUrl=" . $fail_url; + } + + + /** + * Переадресация на страницу оплаты счета + * + * @param {string} bill_id Уникальный номер счета + * @param {string} success_url URL, на который пользователь будет переброшен в случае успешного проведения операции (не обязательно) + * @param {string} fail_url URL, на который пользователь будет переброшен в случае неудачного завершения операции (не обязательно) + */ + function redir($bill_id, $success_url = '', $fail_url = ''){ + header("Location: " . $this->redir_link($bill_id, $success_url, $fail_url)); + } + + + /** + * Информация о счете + * + * @param {string} bill_id Уникальный номер счета + * @returns {object} Объект ответа от сервера QIWI + */ + function info($bill_id){ + $ch = $this->__curl_start('https://w.qiwi.com/api/v2/prv/'.$this->shop_id.'/bills/'.$bill_id); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + "Accept: text/json", + "Content-Type: application/x-www-form-urlencoded; charset=utf-8" + )); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $this->rest_id . ':' . $this->rest_pass); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $httpResponse = curl_exec($ch); + if($this->debug) + var_dump($httpResponse); + if (!$httpResponse) { + // Описание ошибки, к примеру + throw new Exception(curl_error($ch).'('.curl_errno($ch).')'); + return false; + } + $httpResponseAr = @json_decode($httpResponse); + return $httpResponseAr->response; + } + + + /** + * Отмена платежа + * + * @param {string} bill_id Уникальный номер счета + * @returns {object} Объект ответа от сервера QIWI + */ + function reject($bill_id){ + $parameters = array( + 'status' => 'rejected' + ); + $ch = $this->__curl_start('https://w.qiwi.com/api/v2/prv/'.$this->shop_id.'/bills/'.$bill_id); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + "Accept: text/json", + "Content-Type: application/x-www-form-urlencoded; charset=utf-8" + )); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $this->rest_id . ':' . $this->rest_pass); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + $httpResponse = curl_exec($ch); + if($this->debug) + var_dump($httpResponse); + if (!$httpResponse) { + // Описание ошибки, к примеру + throw new Exception(curl_error($ch).'('.curl_errno($ch).')'); + return false; + } + $httpResponseAr = @json_decode($httpResponse); + return $httpResponseAr->response; + } +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2pay/res/info.yml b/k2shop/k2shop/app/app/k2/k2pay/res/info.yml new file mode 100644 index 0000000..46c318a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2pay/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2pay" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2pay/res/p24.png b/k2shop/k2shop/app/app/k2/k2pay/res/p24.png new file mode 100644 index 0000000000000000000000000000000000000000..b72ae83dc5f4651b99adc834d34fa3272de72542 GIT binary patch literal 19104 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 literal 0 HcmV?d00001 diff --git a/k2shop/k2shop/app/app/k2/k2rate/jstars.min.js b/k2shop/k2shop/app/app/k2/k2rate/jstars.min.js new file mode 100644 index 0000000..05fb4eb --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/jstars.min.js @@ -0,0 +1,7 @@ +/**! + * jStars 1.0 | Nick Potafiy + * https://github.com/nickpotafiy/jstars + * Self-contained jQuery plugin for displaying star ratings. + * @license + */ +!function(u){u.fn.jstars=function(s){s=s||{};var i=u.extend({size:"1.5rem",value:4.5,stars:5,color:"#4285F4",emptyColor:"#dddddd"},s),l=function(s){s.css("user-select","none").css("-moz-user-select","none").css("-khtml-user-select","none").css("-webkit-user-select","none").css("-o-user-select","none")},d=function(s,e){for(var t="",o=0;oloadResYML('menu'); + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez = false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2rate'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2rate/k2rate_route.php b/k2shop/k2shop/app/app/k2/k2rate/k2rate_route.php new file mode 100644 index 0000000..4613d0f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/k2rate_route.php @@ -0,0 +1,54 @@ +ins_comp2('k2phpgrid', $this); + + $route = $k2->get('r'); + + $arr = $this->loadResYML($route); + + $rez .= $grid->simpleTable($arr); + + //зависимая таблица + if ($route == 'rateobjects') { + $arr2 = $this->loadResYML('rateparam'); + $rez .= $grid->simpleTable($arr2); + } + + + return $rez; + } + + + + + // Возвращаем контент + function content(){ + global $k2; + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2rate/k2rate_void.php b/k2shop/k2shop/app/app/k2/k2rate/k2rate_void.php new file mode 100644 index 0000000..a8004cf --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/k2rate_void.php @@ -0,0 +1,532 @@ + + {reiting}
    + голосов {voices} +
    + + + + '; + public $ratestar_tpl = ' +
    + + '; + + /** + * проверка существования голоса + * @global type $k2 + * @return int + */ + function isExistVoice() + { + global $k2; + $rez = 1; + + $user_id = $k2->post('user_id'); + $partnerid = $k2->post('partnerid'); + $paramid = $k2->post('paramid'); + + $r = $k2->sql->sel("SELECT + COUNT(rateid) as cnt + FROM k2rating + WHERE user_id=:user_id AND objectid=:objectid AND paramid=:paramid", + ['user_id'=>$user_id, 'objectid'=>$partnerid, 'paramid'=>$paramid]); + + if ($r['data'][0]['cnt']){ + $rez = 0; + } + + return $rez; + } + + + function isSelfVoice() + { + global $k2; + $rez = 1; + + $user_id = $k2->post('user_id'); + $partnerid = $k2->post('partnerid'); + + $r = $k2->sql->sel("SELECT + user_id + FROM salsa_partners + WHERE partnerid=:partnerid ", + ['partnerid'=>$partnerid]); + + if ($r['data'][0]['user_id'] == $user_id){ + $rez = 0; + } + return $rez; + } + + + + function checkVoice() + { + global $k2; + + $rez = ['Ваш голос защитан!!!', 1]; + + if (!$k2->auth->isAuth()){ + $rez = ['Да голосования Вам необходимо зарегистироваться!!!', 0]; + return $rez; + } + $exist = $this->isExistVoice(); + if (!$exist) { + $rez = ['Вы уже отдали свой голос!!!', 0]; + return $rez; + } + +// $self = $this->isSelfVoice(); +// if (!$self) { +// $rez = ['Вы не можете голосовать за себя!!!', 0]; +// return $rez; +// } + return $rez; + } + + /** + * вставка голоса + * @global type $k2 + * @return int + */ + function insVoice() + { + global $k2; + $rez = 1; + $rateid = $this->getID(); + $sql = "INSERT INTO k2rating + ( + rateid, + user_id, + rate_val, + ip, + objectid, + paramid, + create_datetime + ) + VALUES + ( + '".$rateid."', + '".$k2->post('user_id')."', + '".$k2->post('rate')."', + '".$k2->post('ip')."', + '".$k2->post('partnerid')."', + '".$k2->post('paramid')."', + '".date("Y-m-d H:i:s")."' + )"; + + try { + $k2->db->exec($sql); + } catch (Exception $e) { + echo "Ошибка : $sql. ".$e->getMessage()."\n"; + } + return $rez; + } + + + /** + * + * @global type $k2 + * @param type $partnerid + * @return type + */ + function getRatePartn($partnerid) + { + global $k2; + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->sel("SELECT + COUNT(rateid) as voices, + AVG(rate_val) as rate_val + FROM k2rating + WHERE objectid=:objectid", + ['objectid'=>$partnerid]); + + $rez['rez'] = $r['data']; + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $contentId + * @return type + */ + function showRatings($contentId, $active = true, $paramid = '') + { + global $k2; + + $rate_part = $this->getRatePartn($contentId); + $rate = round($rate_part['rez'][0]['rate_val'], 2); + $voices = $rate_part['rez'][0]['voices']; + + $value = [ + 'voices' => $voices, + 'rate_val' => $rate, + 'partnerid' => $contentId, + 'paramid' => $paramid, + ]; + + $rez = $this->showRateStars($value); + if ($active) { + $rez .= $this->getWindow($value); + $rez .= $this->renderJS(); + } + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + function getWindow($value) + { + global $k2; + + $rate = $k2->ins_comp('k2rating'); + $arr = ['funcname'=>'setRate($(this))']; + $rating = $rate->showRating($arr); +// + $jqx = $k2->ins_comp2('k2window', $this); + $arr_win = [ + 'caption'=>'Проголосовать', + 'main_div'=>'container', + 'wnd_id'=>'windowrate', + 'is_modal'=>false, + 'height'=>75, + 'width'=>125, + + 'button'=>false, + //'buttons_oktpl'=>"", + 'wnd_body'=>" +
    +
    $rating
    + + + + + +
    + " + ]; + $rez .= $jqx->showWindow($arr_win); + + + $rez = $this->Translate($rez); + return $rez; + } + + function renderJS() + { + $rez = ''; + + ob_start(); + + ?> + + + site->addJS('rater.min.js',"/k2shop/k2shop/app/app/k2/k2rate/rater.min.js"); + + $script = ' + + '; + + $rez .= $script.$this->ratestar_tpl; + + $rez = str_replace('{class}', $value['partnerid'], $rez); + + + $rate = $value['rate_val']; + if ($rate == '0') { + $rate = '0.0'; + } + + if ($k2->auth->isAuth()) { + $rez = str_replace('{rateFunc}', 'confVoice(data.to,"{partnerid}","{ip}","{user_id}",$(this),"{paramid}")', $rez); + } else { + $rez = str_replace('{rateFunc}', 'mustAuthRate("{partnerid}", "{paramid}", $(this),"{paramid}")', $rez); + } + $rez = str_replace('{reiting}', $rate, $rez); + $rez = str_replace('{voices}', $value['voices'], $rez); + $rez = str_replace('{partnerid}', $value['partnerid'], $rez); + $rez = str_replace('{ip}', $k2->sys->ip(), $rez); + $rez = str_replace('{user_id}', $k2->auth->userid, $rez); + $rez = str_replace('{paramid}', $value['paramid'], $rez); + $numrate = $rate/5 * 100; + $rez = str_replace('{numrate}', $rate, $rez); + return $rez; + } + + /** + * + * @param type $arr_partn + * @return array + */ + function getRateArr($arr_partn) + { + $data_arr = []; + foreach ($arr_partn['rez'] as $key => $value) { + + //получаем данные по рейтингу + $rate_part = $this->getRatePartn($value['partnerid']); + + $rate = round($rate_part['rez'][0]['rate_val'], 2); + $voices = $rate_part['rez'][0]['voices']; + + //добавляем к массиву партнера данные по рейтингу + $arr_partn['rez'][$key]['rate_val'] = $rate; + $arr_partn['rez'][$key]['voices'] = $voices; + + array_push($data_arr, $arr_partn['rez'][$key]); + } + + //сортируем по рейтингу->кол-ву голосов + usort($data_arr, function($a, $b){ + if ($a['rate_val'] === $b['rate_val']){ + if ($a['voices'] === $b['voices']){ + if ($a['ord'] === $b['ord']){ + return 0; + } elseif ($a['ord'] > $b['ord']) { + return 1; + } else { + return -1; + } + } elseif ($a['voices'] < $b['voices']) { + return 1; + } else { + return -1; + } + } + return $a['rate_val'] < $b['rate_val'] ? 1 : -1; + }); + + return $data_arr; + } + + /** + * + * @global type $k2 + * @global type $salsa + * @return int + */ + function confVoice() + { + global $k2; + + $check = $this->checkVoice(); + + if ($check[1]) { + $ins_voice = $this->insVoice(); + } + $rez = json_encode($check); + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $rateobjname + * @return type + */ + function getRateParam($rateobjname) + { + global $k2; + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->sel("SELECT + p.paramid, + p.param_name + + FROM k2rate_params p + + LEFT JOIN k2rateobjects o + ON o.rateobjectid = p.rateobjectid + + WHERE o.rateobjname=:rateobjname", + ['rateobjname'=>$rateobjname]); + + $rez['rez'] = $r['data']; + + return $rez; + } + + function showRate($value = [], $table = '') + { + global $k2; + + $arr_par = $this->getRateParam($table); + + $k2->site->addTopHead('slim.min.js', ''); + //$k2->site->addJS('rate.js',"/k2shop/k2shop/libs/rate/rate.js"); + $k2->site->addJS('jstars.min.js',"/k2shop/k2shop/app/app/k2/k2rate/jstars.min.js"); + + + $rez = $this->rate_tpl; + + $rate = $value['rate_val']; + if ($rate == '0') { + $rate = '0.0'; + } + + if ($k2->auth->isAuth()) { + $rez = str_replace('{rateFunc}', 'windRate', $rez); + } else { + $rez = str_replace('{rateFunc}', 'mustAuthRate', $rez); + } + $rez = str_replace('{reiting}', $rate, $rez); + $rez = str_replace('{voices}', $value['voices'], $rez); + $rez = str_replace('{partnerid}', $value['partnerid'], $rez); + $rez = str_replace('{paramid}', $value['paramid'], $rez); + $numrate = $rate/5 * 100; + $rez = str_replace('{numrate}', $rate, $rez); + $rate = $k2->ins_comp('k2rating'); + $arr = ['rateid'=>$value['partnerid']]; + $rating = $rate->showRating($arr); + + $rating = str_replace('"', "'", $rating); + + $rez = str_replace('{ratecontent}', $rating, $rez); + + + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + $event = $k2->get('event'); + switch ($event) + { + case "confvoice": + $rez = $this->confVoice(); + break; + default: + $rez .= ''; + $rez .= $this->getWindow(); + $rez .= $this->renderJS(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2rate/rate.js b/k2shop/k2shop/app/app/k2/k2rate/rate.js new file mode 100644 index 0000000..bcbe259 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/rate.js @@ -0,0 +1,17 @@ + function makeid() + { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + for( var i=0; i < 5; i++ ) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + + return text; + } + + + function rate(per){ + var id = makeid(); + + document.write('
    '); + } \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2rate/rater.min.js b/k2shop/k2shop/app/app/k2/k2rate/rater.min.js new file mode 100644 index 0000000..5ccf025 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/rater.min.js @@ -0,0 +1 @@ +(function($,window){$.fn.textWidth=function(){var html_calc=$(""+$(this).html()+"");html_calc.css("font-size",$(this).css("font-size")).hide();html_calc.prependTo("body");var width=html_calc.width();html_calc.remove();if(width==0){var total=0;$(this).eq(0).children().each(function(){total+=$(this).textWidth()});return total}return width};$.fn.textHeight=function(){var html_calc=$(""+$(this).html()+"");html_calc.css("font-size",$(this).css("font-size")).hide();html_calc.prependTo("body");var height=html_calc.height();html_calc.remove();return height};Array.isArray=function(obj){return Object.prototype.toString.call(obj)==="[object Array]"};String.prototype.getCodePointLength=function(){return this.length-this.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g).length+1};String.fromCodePoint=function(){var chars=Array.prototype.slice.call(arguments);for(var i=chars.length;i-->0;){var n=chars[i]-65536;if(n>=0)chars.splice(i,1,55296+(n>>10),56320+(n&1023))}return String.fromCharCode.apply(null,chars)};$.fn.rate=function(options){if(options===undefined||typeof options==="object"){return this.each(function(){if(!$.data(this,"rate")){$.data(this,"rate",new Rate(this,options))}})}else if(typeof options==="string"){var args=arguments;var returns;this.each(function(){var instance=$.data(this,"rate");if(instance instanceof Rate&&typeof instance[options]==="function"){returns=instance[options].apply(instance,Array.prototype.slice.call(args,1))}if(options==="destroy"){$(instance.element).off();$.data(this,"rate",null)}});return returns!==undefined?returns:this}};function Rate(element,options){this.element=element;this.settings=$.extend({},$.fn.rate.settings,options);this.set_faces={};this.build()}Rate.prototype.build=function(){this.layers={};this.value=0;this.raise_select_layer=false;if(this.settings.initial_value){this.value=this.settings.initial_value}if($(this.element).attr("data-rate-value")){this.value=$(this.element).attr("data-rate-value")}var selected_width=this.value/this.settings.max_value*100;if(typeof this.settings.symbols[this.settings.selected_symbol_type]==="string"){var symbol=this.settings.symbols[this.settings.selected_symbol_type];this.settings.symbols[this.settings.selected_symbol_type]={};this.settings.symbols[this.settings.selected_symbol_type]["base"]=symbol;this.settings.symbols[this.settings.selected_symbol_type]["selected"]=symbol;this.settings.symbols[this.settings.selected_symbol_type]["hover"]=symbol}var base_layer=this.addLayer("base-layer",100,this.settings.symbols[this.settings.selected_symbol_type]["base"],true);var select_layer=this.addLayer("select-layer",selected_width,this.settings.symbols[this.settings.selected_symbol_type]["selected"],true);var hover_layer=this.addLayer("hover-layer",0,this.settings.symbols[this.settings.selected_symbol_type]["hover"],false);this.layers["base_layer"]=base_layer;this.layers["select_layer"]=select_layer;this.layers["hover_layer"]=hover_layer;$(this.element).on("mousemove",$.proxy(this.hover,this));$(this.element).on("click",$.proxy(this.select,this));$(this.element).on("mouseleave",$.proxy(this.mouseout,this));$(this.element).css({"-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"});if(this.settings.hasOwnProperty("update_input_field_name")){this.settings.update_input_field_name.val(this.value)}};Rate.prototype.addLayer=function(layer_name,visible_width,symbol,visible){var layer_body="
    ";for(var i=0;i"+symbol[i]+""}else{if(this.settings.convert_to_utf8){symbol=String.fromCodePoint(symbol)}layer_body+=""+symbol+""}}layer_body+="
    ";var layer=$(layer_body).addClass("rate-"+layer_name).appendTo(this.element);$(layer).css({width:visible_width+"%",height:$(layer).children().eq(0).textHeight(),overflow:"hidden",position:"absolute",top:0,display:visible?"block":"none","white-space":"nowrap"});$(this.element).css({width:$(layer).textWidth()+"px",height:$(layer).height(),position:"relative",cursor:this.settings.cursor});return layer};Rate.prototype.updateServer=function(){if(this.settings.url!=undefined){$.ajax({url:this.settings.url,type:this.settings.ajax_method,data:$.extend({},{value:this.getValue()},this.settings.additional_data),success:$.proxy(function(data){$(this.element).trigger("updateSuccess",[data])},this),error:$.proxy(function(jxhr,msg,err){$(this.element).trigger("updateError",[jxhr,msg,err])},this)})}};Rate.prototype.getValue=function(){return this.value};Rate.prototype.hover=function(ev){var pad=parseInt($(this.element).css("padding-left").replace("px",""));var x=ev.pageX-$(this.element).offset().left-pad;var val=this.toValue(x,true);if(val!=this.value){this.raise_select_layer=false}if(!this.raise_select_layer&&!this.settings.readonly){var visible_width=this.toWidth(val);this.layers.select_layer.css({display:"none"});if(!this.settings.only_select_one_symbol){this.layers.hover_layer.css({width:visible_width+"%",display:"block"})}else{var index_value=Math.floor(val);this.layers.hover_layer.css({width:"100%",display:"block"});this.layers.hover_layer.children("span").css({visibility:"hidden"});this.layers.hover_layer.children("span").eq(index_value!=0?index_value-1:0).css({visibility:"visible"})}}};Rate.prototype.select=function(ev){if(!this.settings.readonly){var old_value=this.getValue();var pad=parseInt($(this.element).css("padding-left").replace("px",""));var x=ev.pageX-$(this.element).offset().left-pad;var selected_width=this.toWidth(this.toValue(x,true));this.setValue(this.toValue(selected_width));this.raise_select_layer=true}};Rate.prototype.mouseout=function(){this.layers.hover_layer.css({display:"none"});this.layers.select_layer.css({display:"block"})};Rate.prototype.toWidth=function(val){return val/this.settings.max_value*100};Rate.prototype.toValue=function(width,in_pixels){var val;if(in_pixels){val=width/this.layers.base_layer.textWidth()*this.settings.max_value}else{val=width/100*this.settings.max_value}var temp=val/this.settings.step_size;if(temp-Math.floor(temp)<5e-5){val=Math.round(val/this.settings.step_size)*this.settings.step_size}val=Math.ceil(val/this.settings.step_size)*this.settings.step_size;val=val>this.settings.max_value?this.settings.max_value:val;return val};Rate.prototype.getElement=function(layer_name,index){return $(this.element).find(".rate-"+layer_name+" span").eq(index-1)};Rate.prototype.getLayers=function(){return this.layers};Rate.prototype.setFace=function(value,face){this.set_faces[value]=face};Rate.prototype.setAdditionalData=function(data){this.settings.additional_data=data};Rate.prototype.getAdditionalData=function(){return this.settings.additional_data};Rate.prototype.removeFace=function(value){delete this.set_faces[value]};Rate.prototype.setValue=function(value){if(!this.settings.readonly){if(value<0){value=0}else if(value>this.settings.max_value){value=this.settings.max_value}var old_value=this.getValue();this.value=value;var change_event=$(this.element).trigger("change",{from:old_value,to:this.value});$(this.element).find(".rate-face").remove();$(this.element).find("span").css({visibility:"visible"});var index_value=Math.ceil(this.value);if(this.set_faces.hasOwnProperty(index_value)){var face="
    "+this.set_faces[index_value]+"
    ";var base_layer_element=this.getElement("base-layer",index_value);var select_layer_element=this.getElement("select-layer",index_value);var hover_layer_element=this.getElement("hover-layer",index_value);var left_pos=base_layer_element.textWidth()*(index_value-1)+(base_layer_element.textWidth()-$(face).textWidth())/2;$(face).appendTo(this.element).css({display:"inline-block",position:"absolute",left:left_pos}).addClass("rate-face");base_layer_element.css({visibility:"hidden"});select_layer_element.css({visibility:"hidden"});hover_layer_element.css({visibility:"hidden"})}if(!this.settings.only_select_one_symbol){var width=this.toWidth(this.value);this.layers.select_layer.css({display:"block",width:width+"%",height:this.layers.base_layer.css("height")});this.layers.hover_layer.css({display:"none",height:this.layers.base_layer.css("height")})}else{var width=this.toWidth(this.settings.max_value);this.layers.select_layer.css({display:"block",width:width+"%",height:this.layers.base_layer.css("height")});this.layers.hover_layer.css({display:"none",height:this.layers.base_layer.css("height")});this.layers.select_layer.children("span").css({visibility:"hidden"});this.layers.select_layer.children("span").eq(index_value!=0?index_value-1:0).css({visibility:"visible"})}$(this.element).attr("data-rate-value",this.value);if(this.settings.change_once){this.settings.readonly=true}this.updateServer();var change_event=$(this.element).trigger("afterChange",{from:old_value,to:this.value});if(this.settings.hasOwnProperty("update_input_field_name")){this.settings.update_input_field_name.val(this.value)}}};Rate.prototype.increment=function(){this.setValue(this.getValue()+this.settings.step_size)};Rate.prototype.decrement=function(){this.setValue(this.getValue()-this.settings.step_size)};$.fn.rate.settings={max_value:5,step_size:.5,initial_value:0,symbols:{utf8_star:{base:"☆",hover:"★",selected:"★"},utf8_hexagon:{base:"⬡",hover:"⬢",selected:"⬢"},hearts:"♥",fontawesome_beer:'',fontawesome_star:{base:'',hover:'',selected:''},utf8_emoticons:{base:[128549,128531,128530,128516],hover:[128549,128531,128530,128516],selected:[128549,128531,128530,128516]}},selected_symbol_type:"utf8_star",convert_to_utf8:false,cursor:"default",readonly:false,change_once:false,only_select_one_symbol:false,ajax_method:"POST",additional_data:{}}})(jQuery,window); diff --git a/k2shop/k2shop/app/app/k2/k2rate/res/info.yml b/k2shop/k2shop/app/app/k2/k2rate/res/info.yml new file mode 100644 index 0000000..717793b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2rate" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2rate/res/menu.yml b/k2shop/k2shop/app/app/k2/k2rate/res/menu.yml new file mode 100644 index 0000000..30c2d5e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/res/menu.yml @@ -0,0 +1,22 @@ +0: + category: + parent: root + name: k2rating + caption: Голосование + iconclass: fa fa-database + + elements: +# rateconf: +# name: rateconf +# caption: Настройка голосования +# url: ?adm=k2rate_route&r=rateobjects +# command: +# iconclass: fa fa-money + + rating: + name: rating + caption: Голосование + url: ?adm=k2rate_route&r=rating + command: + iconclass: fa fa-money + diff --git a/k2shop/k2shop/app/app/k2/k2rate/res/rateobjects.yml b/k2shop/k2shop/app/app/k2/k2rate/res/rateobjects.yml new file mode 100644 index 0000000..9782aa8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/res/rateobjects.yml @@ -0,0 +1,35 @@ +select: SELECT rateobjectid, rateobjname, comment FROM k2rateobjects +where: +table: k2rateobjects +height: 250 +sortname: rateobjname +detile: k2rate_params +sortorder: asc +caption: Объект голосования +fields: + rateobjectid: + field: rateobjectid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + rateobjname: + field: rateobjname + caption: Название + width: 250 + readonly: false + hidden: false + align: center + + comment: + field: comment + caption: Комментарий + width: 250 + readonly: false + hidden: false + align: center + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2rate/res/rateparam.yml b/k2shop/k2shop/app/app/k2/k2rate/res/rateparam.yml new file mode 100644 index 0000000..51fb619 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/res/rateparam.yml @@ -0,0 +1,48 @@ +select: SELECT paramid, param_name, rateobjectid, active FROM k2rate_params +where: "where (rateobjectid='{masterid}')" +table: k2rate_params +getmaster: true +masterid: rateobjectid +height: 250 +sortname: param_name +sortorder: asc +caption: Параметры голосования +fields: + paramid: + field: paramid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + rateobjectid: + field: rateobjectid + caption: Объект + width: 150 + readonly: true + align: center + type_field: DropDown + multy: false + # default: '{moveid}' + sql: SELECT rateobjectid as k, rateobjname as v + FROM k2rateobjects + + param_name: + field: param_name + caption: Название + width: 250 + readonly: false + hidden: false + align: center + + active: + field: active + caption: Актив + width: 50 + readonly: false + align: center + type_field: checkbox + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2rate/res/rating.yml b/k2shop/k2shop/app/app/k2/k2rate/res/rating.yml new file mode 100644 index 0000000..05afc49 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2rate/res/rating.yml @@ -0,0 +1,78 @@ +select: SELECT rateid, user_id, rate_val, paramid, create_datetime, ip, objectid, tablename FROM k2rating +where: +table: k2rating +height: 250 +sortname: rate_val +sortorder: asc +caption: Голосование +fields: + rateid: + field: rateid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + user_id: + field: user_id + caption: Пользователь + width: 250 + readonly: false + type_field: DropDown + multy: false + # default: '{moveid}' + sql: SELECT null AS k, '_' AS v + UNION SELECT user_id AS k, name AS v + FROM k2users + + rate_val: + field: rate_val + caption: Оценка + width: 250 + readonly: false + hidden: false + align: center + +# paramid: +# field: paramid +# caption: Параметр +# width: 250 +# readonly: false +# type_field: DropDown +# multy: false +# # default: '{moveid}' +# sql: SELECT null AS k, '_' AS v +# UNION SELECT paramid AS k, param_name AS v +# FROM k2rate_params + + ip: + field: ip + caption: ip + width: 250 + readonly: false + hidden: false + align: center + + objectid: + field: objectid + caption: objectid + width: 250 + readonly: false + hidden: false + align: center + type_field: DropDown + multy: false + sql: SELECT null AS k, '_' AS v + UNION SELECT partnerid AS k, user_id AS v + + FROM salsa_partners + +# tablename: +# field: tablename +# caption: tablename +# width: 250 +# readonly: false +# hidden: false +# align: center \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2search/k2search.php b/k2shop/k2shop/app/app/k2/k2search/k2search.php new file mode 100644 index 0000000..d2bf2eb --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2search/k2search.php @@ -0,0 +1,335 @@ + + .input_container input { + /*height: 20px;*/ + width: 300px; + padding: 3px; + border: 1px solid #cccccc; + border-radius: 0; + } + .input_container ul { + /*width: 150%; + border: 1px solid #eaeaea;*/ + position: absolute; + z-index: 1000; + background: #fff; + list-style: none; + max-height: 250px; + overflow: hidden; + overflow-y:scroll; + /*right: 15px; + left: 490px;*/ + } + .input_container ul li { + padding: 2px 2px 2px 5px; + border-bottom: 1px solid #aaaaaa; /* Параметры рамки */ + border-right: 1px solid #aaaaaa; /* Параметры рамки */ + border-left: 1px solid #aaaaaa; /* Параметры рамки */ + } + .input_container ul li:hover { + /*background: #eaeaea;*/ + background-color: #deebfc; + /*color: #7e9fbb;*/ + } + + .input_container ul li:hover .searchicon { + + color: #7e9fbb; + } + + .input_container ul li:hover .searchmintext { + + color: #7e9fbb; + } + .input_container ul li:hover .mainicon{ + color: #303030; + } + + .hovers{ + display: block; + text-decoration:none; + background-color:#deebfc; + border-color:#aaaaaa; + + } + + .hovers .searchmintext, .hovers .searchicon, .hovers2 .searchmintext, .hovers2 .searchicon{ + color: #7e9fbb; + } + .search_shop_input{ + height: 30px; + width: 320px; + padding: 4px; + border: 1px solid #cccccc; + border-radius: 0; + } + .search_shop_btn{ + border: 1px solid #cccccc; + padding: 3px 7px 5px 7px; + margin-left: -4px; + color: #F96D10; + } + .search-img{ + width: 50px; + } + #search_id{ + display:none; + } + + "; + + public $form_tpl = " +
    +
    +
    + +
      +
      +
      + + +
      + "; + public $script = "function autocomplet() { + var min_length = 1; + var keyword = $('#from').val(); + console.log(keyword); + if (keyword.length > min_length) { + $.ajax({ + url: '/?comp=k2search&temp=ajax&event=search&mode=admin', + type: 'POST', + data: {keyword:keyword}, + success:function(data){ + $('#search_id').show(); + //console.log(data); + $('#search_id').html(data); + } + }); + } else { + $('#search_id').hide(); + } + + + } + function set_item(url) { + $('#search_id').hide(); + window.location = url; + } + + $('.submit').click(function(e){ + //e.preventDefault(); + //console.log(777); + }); + var blocksPerRow = 1; + + $('#from').unbind().on('keydown', function(e){ + console.log(777); + 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 init_obj(){ + global $k2; + } + + /** + * + * @global type $k2 + * @global type $board + * @param type $searchTerm + * @param string $my_sql + * @param type $alias + * @param type $linkname + * @param type $relation + */ + public function searchAct($searchTerm='', $my_sql = '', $alias='', $linkname='', $relation='') + { + global $k2; + + $rez = ''; + + + $my_sql = str_replace('{searchTerm}', $searchTerm, $this->sql); + $html = ''; + $search_rez = $this->getSearch($my_sql); + + //$r = $k2->sql->sel($my_sql); + foreach($search_rez['rez'] as $key){ + $str = $key['title']; + $slug = $key['slug']; + $image = ''; + $urltov = $k2->surl->SefURL_FromURL("p={command}&item={slug}"); + $urltov = str_replace('{command}', $key['command'], $urltov); + $urltov = str_replace('{slug}', $slug, $urltov); + $urltov = str_replace('"', '`', $urltov); + $urltov = str_replace("'", '’', $urltov); + + $html .= "
    • ".$image.'
      '.$str."
    • "; + //$html = str_replace('"', '`', $html); + } + echo $html; + // return $rez; + } + + public function searchTov($searchTerm='', $my_sql = '', $alias='', $linkname='', $relation='') + { + global $k2; + $rez = ''; + $my_sql = 'SELECT tovid, tovname, url, slug FROM k2tov WHERE (Upper(tovname) LIKE Upper("%{searchTerm}%")) AND active = 1 LIMIT 10'; + $my_sql = str_replace('{searchTerm}', $searchTerm, $my_sql); + $html = ''; + $search_rez = $this->getSearch($my_sql); + + + foreach($search_rez['rez'] as $key){ + $urltov = $k2->surl->SefURL_FromURL("p=services&name={slug}/"); + $urltov = str_replace('{tovname}', $key['url'], $urltov); + $html .= "
    • ".$key['tovname']."
    • "; + //$html = str_replace('"', '`', $html); + } + //$urltov = str_replace('{tovname}', 'other', $urltov); + //$html .= "
    • Другое
    • "; + echo $html; + } + + /** + * обработка запроса + * @global type $k2 + * @param type $my_sql + * @return type + */ + function getSearch($my_sql) + { + global $k2; + + $r = $k2->sql->sel($my_sql, + []); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + $rez['rez'] = $r['data']; + + return $rez; + } + + /** + * вывод формы + * @global type $k2 + * @return type + */ + function searchForm() + { + global $k2; + $rez = ''; + $rez .= $this->form_style; + $rez .= $this->form_tpl; + return $rez; + } + + /** + * результат поиска + * @global type $k2 + * @return string + */ + function showSearch() + { + global $k2; + $rez = ''; + $arg = $k2->get('arg'); + if ($arg !== '') { + $my_sql = $this->sql.' WHERE (Upper(title) LIKE Upper("%'.$arg.'%")) OR (Upper(content) LIKE Upper("%'.$arg.'%")) AND active = 1 AND (command = "stati" OR command = "novosti")'; + + $search_rez = $this->getSearch($my_sql); + foreach($search_rez['rez'] as $key){ + $str = $key['title']; + $slug = $key['slug']; + $image = ''; + $urltov = $k2->surl->SefURL_FromURL("p={command}&item={slug}"); + $urltov = str_replace('{command}', $key['command'], $urltov); + $urltov = str_replace('{slug}', $slug, $urltov); + $urltov = str_replace('"', '`', $urltov); + $urltov = str_replace("'", '’', $urltov); + + $rez .= "

      ".$image.'
      '.$str."


      "; + //$html = str_replace('"', '`', $html); + } + + + } + + + 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; + case "searchtov": + $searchTerm = $k2->post('keyword'); + $my_sql = $k2->post('sql'); + $alias = $k2->post('alias'); + $linkname = $k2->post('linkname'); + $relation = $k2->post('relation'); + $rez = $this->searchTov($searchTerm, $my_sql, $alias, $linkname, $relation); + break; + default: + $rez = $this->showSearch(); + } + + + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2search/res/info.yml b/k2shop/k2shop/app/app/k2/k2search/res/info.yml new file mode 100644 index 0000000..0330027 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2search/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2search" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2sefurl/README b/k2shop/k2shop/app/app/k2/k2sefurl/README new file mode 100644 index 0000000..dcdaf05 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sefurl/README @@ -0,0 +1,6 @@ +Search engine friendly URL (Компонента для создания ЧПУ) + + + + + diff --git a/k2shop/k2shop/app/app/k2/k2sefurl/k2sefurl.php b/k2shop/k2shop/app/app/k2/k2sefurl/k2sefurl.php new file mode 100644 index 0000000..21f8fc2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sefurl/k2sefurl.php @@ -0,0 +1,188 @@ +selfurl){ + $rez=str_replace('?', '', $rez); + $rez=str_replace('=', '/', $rez); + $rez=str_replace('&', '/', $rez); + } + + $rez=$k2->normURL($rez); + + + return $rez; + } + + + + // Возвращает стнадартный url + function getStandartURL(){ + $rez=''; + + //var_dump($this->params); + + + foreach ($this->params as $key=>$value){ + if ($rez==''){ + $rez.='/?'; + }else{ + $rez.='&'; + } + + $rez.=$key.'='.$value; + } + + return $rez; + } + + /** + * + * @global type $k2 + * @param type $module + * @return string + */ + function customUrl($module) + { + global $k2; + $rez=''; + + $customurl = $k2->ins_comp('k2board','url'); + + $this->params = $customurl->getCustUrl($this->params, $module); + + + return $rez; + } + + + + + // Create URL from SefURL + function URL_FromSefURL($url=''){ + global $k2; + $rez=''; + $this->params = []; + + + + //echo 'uri='.$_SERVER['REQUEST_URI']; + + // Если запрошен любой URI, отличный от корня сайта. + if ($_SERVER['REQUEST_URI'] != '/') { + try { + // Для того, что бы через виртуальные адреса можно было также передавать параметры + // через QUERY_STRING (т.е. через "знак вопроса" - ?param=value), + // необходимо получить компонент пути - path без QUERY_STRING. + // Данные, переданные через QUERY_STRING, также как и раньше будут содержаться в + // суперглобальных массивах $_GET и $_REQUEST. + $url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); + + + // Разбиваем виртуальный URL по символу "/" + $uri_parts = explode('/', trim($url_path, '/')); + + if(!$this->custom_url){ + // Если количество частей не кратно 2, значит, в URL присутствует ошибка и такой URL + // обрабатывать не нужно - кидаем исключение, что бы назначить в блоке catch модуль и действие, + // отвечающие за показ 404 страницы. + if (count($uri_parts) % 2) { + throw new Exception(); + } + } else { + $keys = array_search('page', $uri_parts); + if ($keys){ + if (count($uri_parts) % 2) { + array_unshift($uri_parts, "z"); + } + } + } + + + $module = ''; // Получили имя модуля + $action = ''; // Получили имя действия + + + foreach ($uri_parts as $v){ + if ($module==''){ + $module=$v; + }else{ + $action=$v; + $this->params[$module]=$action; + + $module=''; + } + } + + + if($this->custom_url && $this->params['mode'] !== 'admin' && !isset($this->params['data'])&& !isset($this->params['public'])&& !isset($this->params['icons']) && (count($this->params)>0 || $module !== '')){ + + $arr = explode('.', $module); + $ext = array_pop($arr); + if ($ext == 'jpg' || $ext == 'png' || $ext == 'ico' || $arr[0] == 'sitemap') { + + } else { + $this->customUrl($module); + } + + } + + $_REQUEST = array_merge($_REQUEST, $this->params); + $_GET = array_merge($_GET, $this->params); + + + } catch (Exception $e) { + $module = '404'; + $action = 'main'; + } + + + } else { + + $root_url = $this->SefURL_FromURL($k2->root_url); + $arr_comp = explode('/', trim($root_url, '/')); + $this->params = array_merge($this->params, ['comp'=>$arr_comp[1],'c'=>$arr_comp[3],]); + + if(!$arr_comp[3]){ + $this->params = [$arr_comp[0]=>$arr_comp[1]]; + } + $_REQUEST = array_merge($_REQUEST, $this->params); + $_GET = array_merge($_GET, $this->params); + + } + + chdir ($k2->rootdir); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2sefurl/res/info.yml b/k2shop/k2shop/app/app/k2/k2sefurl/res/info.yml new file mode 100644 index 0000000..54fa467 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sefurl/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2sefurl" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2seo/k2seo.php b/k2shop/k2shop/app/app/k2/k2seo/k2seo.php new file mode 100644 index 0000000..14f5ea4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/k2seo.php @@ -0,0 +1,58 @@ +auth->isSuperAdmin()){ + $arr= []; + }else{ + $arr= [ + ['category' => ["root","seo",$this->Translate("{lnSEOModule}")], + 'elements' => [ + ["proxy",$this->Translate("{lnProxyServer}"),"?adm=k2seo_proxy", ['','']] + ] + ] + ]; + } + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2seo'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/k2seo_proxy.php b/k2shop/k2shop/app/app/k2/k2seo/k2seo_proxy.php new file mode 100644 index 0000000..5604fe5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/k2seo_proxy.php @@ -0,0 +1,57 @@ +ins_comp2('k2grid', $this); + + $arr = array( + + 'select' => "select proxyid, ipadress, port, sort, checked from k2_proxy", + 'update' => "update k2_proxy set ipadress='@ipadress', port='@port', sort='@sort', checked='@checked' where proxyid=@proxyid", + 'delete' => "delete from k2_proxy where proxyid=@proxyid", + 'insert' => "insert into k2_proxy (proxyid, ipadress, port, sort, checked from k2_proxy) values ('@proxyid', '@ipadress', '@port', '@sort', '@checked' );", + 'fields' => array( + array('field' => 'ipadress', + 'caption' => $this->Translate("{lnIPAddress}") + ), + array('field' => 'port', + 'caption' => $this->Translate("{lnPort}") + ), + array('field' => 'sort', + 'caption' => $this->Translate("{lnSorting}") + ), + array('field' => 'checked', + 'caption' => $this->Translate("{lnChecked}") + ) + + ) + + ); + + $rez = $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->show_proxy(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/en.csv b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/en.csv new file mode 100644 index 0000000..10c4e08 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/en.csv @@ -0,0 +1,3 @@ +name| value +lnSEOModule| SEO-module +lnProxyServer| Proxy Server \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/ru.csv b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/ru.csv new file mode 100644 index 0000000..2382cdf --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/ru.csv @@ -0,0 +1,3 @@ +name|value +lnSEOModule| SEO-модуль +lnProxyServer| Прокси-сервера diff --git a/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/ua.csv b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/ua.csv new file mode 100644 index 0000000..7d54f11 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo/ua.csv @@ -0,0 +1,3 @@ +name| value +lnSEOModule| SEO-модуль +lnProxyServer| Проксі-сервера \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/en.csv b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/en.csv new file mode 100644 index 0000000..27201d9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/en.csv @@ -0,0 +1,5 @@ +name| value +lnIPAddress| IP-address +lnPort| Port +lnSorting| Sorting +lnChecked| Checked \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/ru.csv b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/ru.csv new file mode 100644 index 0000000..bf2192f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/ru.csv @@ -0,0 +1,5 @@ +name|value +lnIPAddress| IP-адрес +lnPort| Порт +lnSorting| Сортировка +lnChecked| Проверено \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/ua.csv b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/ua.csv new file mode 100644 index 0000000..f1b7cf2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/lng/k2seo_proxy/ua.csv @@ -0,0 +1,5 @@ +name| value +lnIPAddress| IP-адреса +lnPort| Порт +lnSorting| Сортування +lnChecked| Перевірено \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2seo/res/info.yml b/k2shop/k2shop/app/app/k2/k2seo/res/info.yml new file mode 100644 index 0000000..d0defb1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2seo/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2seo" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2setemail/k2setemail.php b/k2shop/k2shop/app/app/k2/k2setemail/k2setemail.php new file mode 100644 index 0000000..f9a0ab5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2setemail/k2setemail.php @@ -0,0 +1,243 @@ + + .form-text {margin: 0 0 5px;padding: 0;text-align: left;} + .edit_input{margin-bottom: 15px;padding: 10px;width: 100%;} + .popup h2 {color:black;text-shadow:none} + +
      +

      Редактировать шаблон письма - "{tpl}":

      + + + + + + + +
      + + + '; + + + /** + * изменение шаблона + * @global type $k2 + * @return type + */ + function changeEmailTpl() + { + global $k2, $k2proj; + + $tpl = $k2->post('tpl'); + + $dir_file = $k2->getEmailTpl($tpl); + + if($dir_file == ''){ + $dir_file = '/data/'.$k2proj.$this->def_dir.$tpl.'.html'; + } + + $files = $k2->rootdir.$dir_file; + + try{ + $save = file_put_contents($files, $k2->post('data')); + }catch(PDOException $e) { + echo "Error getData().file_put_contents().".$files."\n"; + echo $e->getMessage(); + } + + return $rez; + } + + + /** + * чтение шаблона + * @global type $k2 + * @param type $tpl + * @return type + */ + function readTpl($tpl = '') + { + global $k2; + + $rez = ''; + $files = $k2->rootdir.$k2->getEmailTpl($tpl); + try{ + $rez = file_get_contents($files); + }catch(PDOException $e) { + echo "Error readTpl().file_get_contents().".$tpl."\n"; + echo $e->getMessage(); + } + + return $rez; + } + + /** + * формирование письма + * @global type $k2 + * @param type $tpl + * @return type + */ + function formEmail($tpl = '', $mask_arr = [], $mess = '') + { + global $k2; + + $rez = ''; + + $main_tpl = $this->readTpl('main_tpl'); + + if ($mess == '') { + $body_tpl = $this->readTpl($tpl); + + $body_tpl = str_replace($this->repl_mask, $mask_arr, $body_tpl); + + $main_tpl = str_replace('{body}', $body_tpl, $main_tpl); + } else { + $main_tpl = str_replace('{body}', $mess, $main_tpl); + } + + $rez = $main_tpl; + + return $rez; + } + + + /** + * получение массива шаблонов при событии + * @global type $k2 + * @param type $event + * @return array + */ + function getArrTpl($event) + { + global $k2; + + $rez = ''; + + $r = $k2->sql->sel("SELECT m.email_tpl + FROM k2email m + + LEFT JOIN k2email_event e + ON e.eventid = m.eventid + + WHERE e.event_name=:event_name", + ['event_name'=>$event]); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + $arr_tpl = []; + foreach ($r['data'] as $value) { + $html = $this->formEmail($value['email_tpl']); + if($html){ + array_push($arr_tpl, $html); + } + } + + $rez = $arr_tpl; + + return $rez; + } + + + /** + * получение шаблона письма в редактор + * @global type $k2 + * @return type + */ + function getEmailTpl() + { + global $k2; + + $rez = ''; + + $rez = $this->emailedit; + + $tpl = $k2->post('tpl_name'); + + $email_tpl = $this->readTpl($tpl); + + $rez = str_replace('{tpl}', $tpl, $rez); + $rez = str_replace('{full_content}', $email_tpl, $rez); + + return $rez; + + } + + + + + // Возвращаем контент + function content(){ + global $k2; + + $event = $k2->get('event'); + + switch ($event) + { + case "getemail": + $rez = $this->getEmailTpl(); + break; + case "changeemail": + $rez = $this->changeEmailTpl(); + break; + default: + $rez = $this->readTpl(); + } + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2setemail/res/info.yml b/k2shop/k2shop/app/app/k2/k2setemail/res/info.yml new file mode 100644 index 0000000..1a0e25f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2setemail/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2setemail" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2shop/k2shop.php b/k2shop/k2shop/app/app/k2/k2shop/k2shop.php new file mode 100644 index 0000000..a356ab6 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/k2shop.php @@ -0,0 +1,58 @@ + array("root","k2shop",$this->Translate("{lnOnlineStore}")), + 'elements' => array( + array("shop_contacts",$this->Translate("{lnContacts}"),"?adm=k2shop_contacts", array('','')), + array("shop_zakaz",$this->Translate("{lnOrders}"),"?adm=k2shop_zakaz", array('','')) + ) + + ) + + ); + + + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2shop'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2shop/k2shop_contacts.php b/k2shop/k2shop/app/app/k2/k2shop/k2shop_contacts.php new file mode 100644 index 0000000..527b87e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/k2shop_contacts.php @@ -0,0 +1,98 @@ +ins_comp2('k2phpgrid', $this); + + $arr = array( + + 'width' => '1200px', + 'select' => "select user_id, name, firstname, middlename, lastname, title, company, jobtitle, login, password, sex, birth_day, birth_month, birth_year, about from k2users", + 'update' => "update k2users set user_id='@user_id', name='@name', firstname='@firstname', middlename='@middlename', lastname='@lastname', title='@title', company='@company', + jobtitle='@jobtitle', login='@login', password='@password', sex='@sex', birth_day='@birth_day', birth_month='@birth_month', birth_year='@birth_year', about='@about'", + 'delete' => "delete from k2users where user_id=@user_id", + 'insert' => "insert into k2users (user_id, name, firstname, middlename, lastname, title, company, jobtitle, login, password, sex, birth_day, birth_month, birth_year, about) + values ('@user_id', '@name', '@firstname', '@middlename', '@lastname', '@title', '@company', '@jobtitle', '@login', '@password', '@sex', '@birth_day', + '@birth_month', '@birth_year', '@about' );", + 'fields' => array( + array('field' => 'name', + 'caption' => 'Название' + ), + array('field' => 'lastname', + 'caption' => 'Фамилия' + ), + array('field' => 'firstname', + 'caption' => 'Имя' + ), + array('field' => 'middlename', + 'caption' => 'Отчество' + ), + + array('field' => 'title', + 'caption' => 'Заголовок' + ), + array('field' => 'company', + 'caption' => 'Компания' + ), + array('field' => 'jobtitle', + 'caption' => 'Должность' + ), + array('field' => 'login', + 'caption' => 'Логин' + ), + /*array('field' => 'password', + 'caption' => 'Пароль' + ),*/ + array('field' => 'sex', + 'caption' => 'Пол' + ), + array('field' => 'birth_day', + 'caption' => 'День рождения' + ), + array('field' => 'birth_month', + 'caption' => 'Месяц рождения' + ), + array('field' => 'birth_year', + 'caption' => 'Год рождения' + ), + array('field' => 'about', + 'caption' => 'О' + ) + + ) + + ); + + $rez = $grid->simpleTable($arr); + + + return $rez; + } + + + // Возвращаем контент + function content(){ + $rez=$this->show_contacts(); + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2shop/k2shop_zakaz.php b/k2shop/k2shop/app/app/k2/k2shop/k2shop_zakaz.php new file mode 100644 index 0000000..500dc39 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/k2shop_zakaz.php @@ -0,0 +1,63 @@ +ins_comp2('k2phpgrid', $this); + + $arr = ['width' => '1200px', + 'select' => "select id, contact_id, state_id, total, currency, shipping, discount, is_first, comment from shop_order", + 'update' => "update shop_order set id='@id', contact_id='@contact_id', state_id='@state_id', total='@total', currency='@currency', shipping='@shipping', discount='@discount', + is_first='@is_first', comment='@comment'", + 'delete' => "delete from shop_order where id=@id", + 'insert' => "insert into shop_order (id, contact_id, state_id, total, currency, shipping, discount, is_first, comment) + values ('@id', '@contact_id', '@state_id', '@total', '@currency', '@shipping', '@discount', '@is_first', '@comment' );", + 'fields' => [['field' => 'contact_id', + 'caption' => 'ID контакта' + ], + ['field' => 'state_id', + 'caption' => 'ID статуса' + ], + ['field' => 'total', + 'caption' => 'Сумма' + ], + ['field' => 'currency', + 'caption' => 'Валюта' + ], + + ['field' => 'comment', + 'caption' => 'Примечание' + ] + ] + ]; + + $rez = $grid->simpleTable($arr); + + return $rez; + } + + + // Возвращаем контент + function content(){ + $rez=$this->show_zakaz(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/en.csv b/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/en.csv new file mode 100644 index 0000000..01a153c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/en.csv @@ -0,0 +1,4 @@ +name| value +lnOnlineStore| Online Store +lnContacts| Contacts +lnOrders| Orders \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/ru.csv b/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/ru.csv new file mode 100644 index 0000000..e258c9f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/ru.csv @@ -0,0 +1,4 @@ +name|value +lnOnlineStore| Интернет-магазин +lnContacts| Контакты +lnOrders| Заказы \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/ua.csv b/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/ua.csv new file mode 100644 index 0000000..3e53342 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/lng/k2shop/ua.csv @@ -0,0 +1,4 @@ +name| value +lnOnlineStore| Інтернет магазин +lnContacts| Контакти +lnOrders| Замовлення \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2shop/res/info.yml b/k2shop/k2shop/app/app/k2/k2shop/res/info.yml new file mode 100644 index 0000000..cae6796 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2shop/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2shop" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2show/k2show.php b/k2shop/k2shop/app/app/k2/k2show/k2show.php new file mode 100644 index 0000000..87e8a9e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2show/k2show.php @@ -0,0 +1,89 @@ +get('t'); + $v = $k2->get('v'); + + if (trim($t)<>'' or trim($v)<>''){ + $struct=$k2->ins_comp2('k2struct',$this); + + if (trim($t)<>''){ + $yml_file=$struct->findYML($t); + }elseif (trim($v)<>''){ + $yml_file=$struct->findYMLView($v); + } + + + if (trim($yml_file)<>''){ + $yml_model=$this->loadResYMLFull($yml_file); + } + + $grid=$k2->ins_comp2('k2phpgrid',$this); + + + $rez .= $grid->simpleTable($yml_model); + } + + return $rez; + } + + + + + + // Возвращаем контент + function content() + { + global $k2; + $rez=''; + + $op = $k2->get('op'); + $id = $k2->get('id'); + + + switch ($op) + { + case "print": + $rez=$k2->printDoc($k2->get('t')); + break; + + case "designer": + $rez=$k2->designDoc($k2->get('t')); + break; + + default: + $rez.=$this->show_table(); + } + + + return $rez; + } + + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2show/res/info.yml b/k2shop/k2shop/app/app/k2/k2show/res/info.yml new file mode 100644 index 0000000..b1abe0e --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2show/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2show" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin.php new file mode 100644 index 0000000..3174351 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin.php @@ -0,0 +1,45 @@ +loadResYML('menu'); + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2siteadmin'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_content.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_content.php new file mode 100644 index 0000000..67a40a8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_content.php @@ -0,0 +1,217 @@ + + .form-text {margin: 0 0 5px;padding: 0;text-align: left;} + .edit_input{margin-bottom: 15px;padding: 10px;width: 100%;} + .popup h2 {color:black;text-shadow:none} + +
      +

      Редактировать контент:

      + +

      Заголовок h1:

      + + +

      Краткое описание:

      + + + +

      Полное описание (контент):

      + + + +

      Заголовок:

      + +

      Описание:

      + +

      Ключевые слова:

      + +
      + + Отмена +
      '; + + + function showMedia() + { + global $k2; + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $arr = $this->loadResYML('content_media'); + + $rez = $grid->simpleTable($arr); + + return $rez; + } + + + function show_content_table(){ + global $k2; + + $content = $k2->ins_comp2('k2cont', $this); + + $admpscr = $k2->ins_comp2('k2adminpanel', $this); + + + + $popup = $k2->ins_comp2('k2popup', $this); + + $popup->popUpID = 'contentitemedit'; + $popup->popupContent = $this->contentitemedit; // Указываем какую форму сунуть в окно. + $rez = $popup->content(); + + if( $k2->get('action')=='edit' && $k2->get('edit_item_id') ) { + + $itemIDforEdit = $k2->get('edit_item_id'); + + if($k2->post('submit')) { + $content->updateItem($itemIDforEdit,''); + } + + $contentItemArray = $content->getItemContentById($itemIDforEdit); + + if ( !empty($contentItemArray) ) { + $rez= str_replace('{full_content}', $contentItemArray[0]['content'], $rez); + $rez= str_replace('{header}', $contentItemArray[0]['h1'], $rez); + $rez= str_replace('{short_description}', $contentItemArray[0]['short_description'], $rez); + $rez= str_replace('{pageTitle}', $contentItemArray[0]['title'], $rez); + $rez= str_replace('{pageDescription}', $contentItemArray[0]['descript'], $rez); + $rez= str_replace('{pageKeywords}', $contentItemArray[0]['keywords'], $rez); + + } + } + $sql_tr = 'SELECT contentid, title, descript, keywords, command, content, create_datetime, usercreate, parentcontent, script, ordnum, h1, lang, langid, lgparentid, projid, siteid, active FROM k2content'; + + + if ( $k2->get('content_id') == '' ) { + //$and = ' AND lang = "en"'; + if ($k2->get('t') == 'item'){ + + $where = ''; + if (count($this->command) > 0) { + $where = ' WHERE '; + $i = 0; + foreach ($this->command as $value) { + if ($i == 0) { + $where .= 'command="'.$value.'" '; + } else { + $where .= ' OR command="'.$value.'"'; + } + $i++; + } + } + $model = 'content'; + $sqlQuery = 'SELECT contentid, title, descript, keywords, command, slug, short_description, content, create_datetime, usercreate, parentcontent, script, ordnum, h1, lang, langid, lgparentid, projid, siteid, active FROM k2content '.$where.' '.$and.' '; + } else { + $model = 'content_inc'; + $sqlQuery = 'SELECT contentid, title, descript, keywords, command, content, create_datetime, usercreate, parentcontent, script, ordnum, h1, lang, langid, lgparentid, projid, siteid, active FROM k2content WHERE command <> "articles" AND command <> "comment" '.$and.' '; + } + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $this->Vars([ + 'sel' => $sqlQuery, + 'sel_tr' => $sql_tr, + 'reffer'=>$k2->reffer(), + 'projid'=>$content->currentProjectID, + 'siteid'=>$content->currentSiteID + ]); + + $arr = $this->loadResYML($model); + + $rez .= $grid->simpleTable($arr); + + } else { + + $contentId = $k2->get('content_id'); + $commandValue = $k2->get('command'); + $parentContentValue = $k2->get('parentcontent'); + + $sqlQuery = 'SELECT contentid, title, command, parentcontent, lang, create_datetime, usercreate, lgparentid, ordnum, projid, siteid, active, descript, keywords, h1 FROM k2content WHERE command <> "stati" OR command <> "novosti"'; + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $this->Vars([ + 'sel' => $sqlQuery, + 'sel_tr' => $sql_tr, + 'reffer'=>$k2->reffer(), + 'projid'=>$content->currentProjectID, + 'siteid'=>$content->currentSiteID, + 'contentid'=>$contentId, + 'commandval'=>$commandValue, + 'parentval'=>$parentContentValue, + ]); + + $arr = $this->loadResYML('content2'); + + $rez .= $grid->simpleTable($arr); + } + $arr2 = $this->loadResYML('content_tr'); +// $rez .= $grid->simpleTable($arr2); + $rez .= " + "; + //$rez .= $admpscr->getWindow(); + //$rez .= $admpscr->renderJS(); + return $rez; + + } + + + function routeShow() + { + global $k2; + + if ($k2->get('t') == 'media') { + $rez = $this->showMedia(); + } else { + $rez = $this->show_content_table(); + } + + return $rez; + } + + function editContent() + { + global $k2; + $k2->auth->setDesignMode(); + header("Location:/comp/k2edit/command/".$k2->get('command')."/from/adm/mode/admin"); + } + + // Возвращаем контент + function content(){ + global $k2; + $rez = $this->routeShow(); + return $rez; + } + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_email.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_email.php new file mode 100644 index 0000000..3e483d0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_email.php @@ -0,0 +1,100 @@ +Edit"; + + public $preload = ""; + + public $editor = ""; + + function renderJs() + { + global $k2; + $rez=''; + $script = ' + '; + + return $script; + } + + + // + function showEmailTpl(){ + global $k2; + + $rez=''; + + + + $grid = $k2->ins_comp2('k2phpgrid', $this); + + + + $arr = $this->loadResYML('email_event'); + + if ($arr<>[]) + $rez .= $grid->simpleTable($arr); + + $grid2=$k2->ins_comp2('k2phpgrid', $this); + + $this->Vars([ + 'show_html' => $this->show_html + ]); + + $arr = $this->loadResYML('email'); + + if ($arr<>[]) + $rez .= $grid2->simpleTable($arr); + + + + $rez .= $this->editor; + + $rez = str_replace('{preload}',$this->preload, $rez); + + $rez .= $this->renderJs(); + + return $rez; + } + + + + + // Возвращаем контент + function content(){ + global $k2; + $rez.=$this->showEmailTpl(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_emails.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_emails.php new file mode 100644 index 0000000..7eccaa8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_emails.php @@ -0,0 +1,41 @@ +ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML('emails'); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + + + + // Возвращаем контент + function content(){ + global $k2; + $rez.=$this->showEmails(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_languages.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_languages.php new file mode 100644 index 0000000..28c22d8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_languages.php @@ -0,0 +1,38 @@ +ins_comp2('k2phpgrid', $this); + + $arr = $this->loadResYML('lang'); + + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->showLanguagesTable(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_mailset.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_mailset.php new file mode 100644 index 0000000..ba04fa3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_mailset.php @@ -0,0 +1,41 @@ +ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML('mail_sets'); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + + + + // Возвращаем контент + function content(){ + global $k2; + $rez.=$this->showMailSet(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_menu.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_menu.php new file mode 100644 index 0000000..e1081fc --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_menu.php @@ -0,0 +1,263 @@ + + .form-text {margin: 0 0 5px;padding: 0;text-align: left;} + .edit_input{margin-bottom: 15px;padding: 10px;width: 100%;} + .popup h2 {color:black;text-shadow:none} + +
      +

      Редактировать контент пункта меню "{menuItemName}":

      + +

      Полное описание (контент):

      + + +
      + + Отмена +
      '; + + + + public function getItemHomePageStatus($menuItemId) { + global $k2; + + $sqlQuery = 'SELECT home_page AS itemstatus FROM k2menuitems WHERE k2menuitemid ='.$menuItemId.' LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $menuItemData) { + $itemHomePageStatus = $menuItemData['itemstatus']; + } + + return $itemHomePageStatus; + } + + + function menuScripts(){ + + ob_start(); + ?> + + ins_comp2('k2popup', $this); + $popup->popUpID = 'itemedit'; + $popup->popupContent = $this->itemedit; // Указываем какую форму сунуть в окно. + $rez = $popup->content(); + + $menu = $k2->ins_comp2('k2menu', $this); + + if( $itemID = $k2->get('edit_item') ) { + + if($k2->post('submit')) { + $menu->updateMenuItemContent($itemID); + } + + $menuItemArray = $menu->getMenuItemDatabyId($itemID); + + if ( !empty($menuItemArray) ) { + $rez= str_replace('{full_content}', $menuItemArray[0]['content'], $rez); + $rez= str_replace('{menuItemName}', $menuItemArray[0]['caption'], $rez); + + } + } + + + if ( $k2->get('menuitemid') == '' ) { + + $content = $k2->ins_comp2('k2cont', $this); + $langId = 'ru'; + + //if(!$content->currentProjectID){ + // $query = 'SELECT k2menuid, menu_name, ident, comment, active FROM k2menu WHERE projid = "" AND siteid ="" AND langid="'.$k2->lng.'"'; + //} else { + // $query = 'SELECT k2menuid, menu_name, ident, comment, active FROM k2menu '; + //} + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + + $arr = $this->loadResYML('menu_main'); + + + $rez .= $grid->simpleTable($arr); + + // Детальная информация + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $langId = $k2->lng; + + $this->Vars([ + 'langid' => $langId, + 'reffer'=>$k2->reffer(), + 'projectid'=>$content->currentProjectID, + 'siteid'=>$content->currentSiteID, + 'lng'=>$k2->lng + ]); + + + $arr = $this->loadResYML('menu_items'); + + + $rez .= $grid->simpleTable($arr); + + $arr2 = $this->loadResYML('menu_items_tr'); + + //$rez .= $grid->simpleTable($arr2); + $rez .= " + "; + + } else { + + // Показываем грид переводов + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $menuItemId = $k2->get('menuitemid'); + $menuId = $k2->get('menuid'); + + // Если добавляется перевод главной страницы, запись получает статус home_page = 1 (Главная страница) + $homePageStatus = $this->getItemHomePageStatus($menuItemId); + + $this->Vars([ + 'langid' => $langId, + 'reffer'=>$k2->reffer(), + 'projectid'=>$content->currentProjectID, + 'siteid'=>$content->currentSiteID, + 'lng'=>$k2->lng, + 'menuitemid'=>$menuItemId, + 'menuid'=>$menuId + ]); + + + $content = $k2->ins_comp2('k2cont', $this); + + $arr = $this->loadResYML('menu_items2'); + + $rez .= $grid->simpleTable($arr); + } + + + $rez .= $this->menuScripts(); + return $rez; + } + + /** + * автоматический перевод + * @global type $k2 + * @return type + */ + function translateMenu() { + global $k2; + $rez = ''; + $findmenu = $k2->sql->sel('SELECT * FROM k2menuitems WHERE langid=:langid', ['langid'=>'ru']); + + $findlangs = $k2->sql->sel('select langid from k2lang where lang_active=1 and langid<>"ru" ORDER BY ord', []); + + foreach ($findlangs['data'] as $val) { + + foreach ($findmenu['data'] as $value) { + + $isfindmenu = $k2->sql->sel('SELECT k2menuitemid FROM k2menuitems WHERE langid=:langid and lgparentid=:lgparentid', ['langid'=>$val['langid'],'lgparentid'=>$value['k2menuitemid']]); + + if ($isfindmenu['data'] == []){ + $rez = $k2->sql->ins_arr( + ['table' => 'k2menuitems', + 'fields' => [ + 'k2menuitemid'=> $this->getID(), + 'k2menuid'=>$value['k2menuid'], + 'caption'=>$value['caption'], + 'parentid'=>$value['parentid'], + 'active'=>$value['active'], + 'hint'=>$value['hint'], + 'command'=>$value['command'], + 'url'=>$value['url'], + 'ord'=>$value['ord'], + 'title'=>$value['title'], + 'descript'=>$value['descript'], + 'keywords'=>$value['keywords'], + 'content'=>$value['content'], + 'h1'=>$value['h1'], + 'script'=>$value['script'], + 'projid'=>$value['projid'], + 'siteid'=>$value['siteid'], + 'langid'=>$val['langid'], + 'lgparentid'=>$value['k2menuitemid'], + 'class'=>$value['class'], + ] + ] + ); + } + + } + } + + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + $event = $k2->get('event'); + switch ($event) + { + case "translate": + $rez = $this->translateMenu(); + break; + default: + $rez = $this->show_val_table(); + } + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_portfolio.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_portfolio.php new file mode 100644 index 0000000..7731f0d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_portfolio.php @@ -0,0 +1,322 @@ + + [class^="select3"] { + border-radius: 3px !important; + width: 220px; + padding: 10px; + margin-bottom: 10px + } + img.lazy { + width: 700px; + height: 467px; + display: block; + } + + +
      +

      Загрузить новый файл в портфолио

      +
      +
      +
      + +
      + {type} +
      +
      +
      + +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      +
      +
      + + + +
      +
      +
      + + '; + + + // Инициализация + function init_obj(){ + global $k2; + $k2->site->addJSEnd('jquery.lazyload.js', 'k2shop/usr/3dvisio/php/js/jquery.lazyload.js'); + $k2->site->addJSEnd('scrollreveal.min.js', 'k2shop/usr/3dvisio/php/js/scrollreveal.min.js'); + $k2->site->addJSEnd('jquery.easing.min.js', 'https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js'); + } + + + // Форма выпадающий список со списком возможных размеров миниатюр + кнопка "Сгенерировать миниатюры" + public function showPortfolioItems(){ + global $k2; + + $portfolio = $k2->ins_comp2('k2portfolio', $this); + + $portfolio->itemWrapper = ' + + + '; + $portfolio->header = '

      Портфолио

      '; + + $rez = $portfolio->generateAdminPortfolio(); + return $rez; + + } + + /** + * Генерирует случайное имя файла и отдает его + * + * @param type string $fileName имя загруженного файла + * @return string сгенерированное случайно имя файла + */ + public function generateFileName($fileName){ + + $extension = strtolower(substr(strrchr($fileName, '.'), 1)); + $newName = date('y-m-d-h-i-s') . md5(microtime() . rand(0, 9999)); + $filename = $newName. '.' .$extension; + + return $filename; + } + + function showPortfType() + { + global $k2; + $rez=''; + + $sel=$k2->ins_comp2('k2select2', $this); + + + $rez=$sel->sel( + array( + 'name' => 'portf_typeid', + 'sql' => "select portf_typeid as k, portf_typename as v from k2portf_type", + 'search_input' => 0, + ) + ); + + return $rez; + } + + /** + * + * @global type $k2 + * @global type $trans + * @return type + */ + function showPortfProj(){ + global $k2; + $rez=''; + + $sel=$k2->ins_comp2('k2select2', $this); + + + $rez=$sel->sel( + array( + 'name' => 'portf_projid', + 'sql' => "select portf_projid as k, portf_projname as v from k2portf_proj", + 'search_input' => 0, + ) + ); + + return $rez; + } + + /** + * Проверяет вхождение расширения файла в массив разрешенных + * + * @param type string $fileName имя файла + * @return boolean + */ + public function isAllowedExtension($fileName) { + + $extension = strtolower(substr(strrchr($fileName, '.'), 1)); + $alowedExtArray = ['png', 'jpg', 'jpeg']; + + foreach ($alowedExtArray as $AlowExt) { + if($AlowExt == $extension) { + return true; + } + } + return false; + } + + public function showPage(){ + global $k2; + + $rez = $this->uploadForm; + + $rez .= $this->portfolioTable(); + + + if($k2->get('del')) { + $filename = $k2->get('del'); + + if(file_exists(self::FULL_SIZE_URL.$filename) ){ + unlink(self::FULL_SIZE_URL.$filename); + } + + if(file_exists(self::THUMBNAILS_URL.$filename) ) { + unlink(self::THUMBNAILS_URL.$filename); + } + + + $sql = "delete from k2portfolio where portf_path like '%".$filename."%' "; + + try { + $k2->db->exec($sql); + }catch (Exception $e) { + echo "Ошибка удаления изображения"; + } + Header("Location: /?adm=k2siteadmin_portfolio"); + } + + if($_FILES && is_uploaded_file($_FILES["filename"]["tmp_name"]) ) + { + //print_r ($_FILES); + if ($this->isAllowedExtension($_FILES["filename"]["name"]) ) { + // Пороверяем, чтобы такого имени файла небыло в папке. + do { + $filename = $this->generateFileName($_FILES["filename"]["name"]); + } while (file_exists(self::FULL_SIZE_URL.$filename)); + + $uploadComplete = move_uploaded_file($_FILES["filename"]["tmp_name"], self::FULL_SIZE_URL.$filename); + + if($uploadComplete) { + // Создаем полное изображение и миниатюру + $resize = $k2->ins_comp2('k2image_resize', $this); + // $resize->resize(self::SOURCE_URL.$filename, self::FULL_SIZE_URL.$filename, self::FULL_IMG_WIDTH, self::FULL_IMG_HEIGHT); + $resize->resizeto(self::FULL_SIZE_URL.$filename, self::THUMBNAILS_URL.$filename, self::THUMB_IMG_WIDTH, self::THUMB_IMG_HEIGHT); + + $portf_name = ''; + $portf_projid = 1; + $portf_sort = 1; + $portf_typeid = 1; + $portf_alt = ''; + + if($k2->post('portf_sort')){ + $portf_sort = $k2->post('portf_sort'); + } + + if($k2->post('portf_alt')){ + $portf_alt = $k2->post('portf_alt'); + } + + if($k2->post('portf_typeid')){ + $portf_typeid = $k2->post('portf_typeid'); + } + + if($k2->post('portf_name')){ + $portf_name = $k2->post('portf_name'); + } + + if($k2->post('portf_projid')){ + $portf_projid = $k2->post('portf_projid'); + } + + + $sql1 = "insert into k2portfolio (portf_path, portf_projid, portf_name, portf_typeid, portf_sort, portf_alt, langid) + values ('".self::FULL_SIZE_URL.$filename."', ".$portf_projid.", '".$portf_name."', ".$portf_typeid.", ".$portf_sort.", '".$portf_alt."', 'ru') "; + + $k2->db->exec($sql1); + + + echo '
      '; + } else { + echo '
      '; + } + + } else { + echo ''; + } + } + + + $rez.= $this->showPortfolioItems(); + + $rez = str_replace('{type}', $this->showPortfType(), $rez); + // $rez = str_replace('{proj}', $this->showPortfProj(), $rez); + + return $rez; + } + + function portfolioTable(){ + global $k2; + $rez = ''; + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $arr = $this->loadResYML('portfolio_type'); + + + $rez = $grid->simpleTable($arr); + $grid2=$k2->ins_comp2('k2phpgrid', $this); + + $arr = $this->loadResYML('portfolio'); + + $rez .= $grid2->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->showPage(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_projects.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_projects.php new file mode 100644 index 0000000..1a6497b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_projects.php @@ -0,0 +1,77 @@ +auth->isSuperAdmin() ) { + $sqlQuery = 'SELECT p.projid, p.projname, p.commentproj, p.createproj, p.proj_active + FROM k2proj AS p + + LEFT JOIN k2projrole AS r ON + p.projid = r.projid + + WHERE r.role_active='.self::USER_ROLE_ACTIVE." AND (r.user_id ='".$k2->auth->userid."')"; + } + + return $sqlQuery; + } + + /** + * Формирует и выводит таблицы на страницу. + * @return type string + */ + public function showProjectsTable(){ + + global $k2; + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $this->Vars([ + 'sel' => $this->getPermittedSelect() + ]); + + $arr = $this->loadResYML('projects'); + + $rez .= $grid->simpleTable($arr); + + + // Детальная информация + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $arr = $this->loadResYML('site'); + + + $rez .= $grid->simpleTable($arr); + return $rez; + + } + + // Возвращаем контент + function content(){ + $rez=$this->showProjectsTable(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_projusers.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_projusers.php new file mode 100644 index 0000000..e76ebe8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_projusers.php @@ -0,0 +1,83 @@ + db->query($sqlQuery) as $projectItem){ + $projectName = $projectItem['name']; + } + + return $projectName; + } + + /** + * Генерирует запрос к БД для получения данных о пользователях, ассоциированных с проектом + * @return string - строка запроса + */ + private function getSqlQuery() { + global $k2; + + $projectId = $k2->get('proj_id'); + + if ($projectId <> '') { + + $sqlQuery = 'SELECT p.projroleid, p.projid, p.user_id, p.isadmin, p.r, p.w, p.role_active + FROM k2projrole AS p + WHERE projid='.$projectId; + } else { + die('Не указан проект'); + } + + return $sqlQuery; + } + + /** + * Выводит таблицу языков. CRUD разрешены только Суперадминистраторам + * @return type string + */ + public function showProjUsersTable(){ + + global $k2; + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $projectId = $k2->get('proj_id'); + + $this->Vars([ + 'sel' => $this->getSqlQuery(), + 'projid'=>$projectId + ]); + + $arr = $this->loadResYML('users_proj'); + + $rez .= $grid->simpleTable($arr); + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->showProjUsersTable(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_routine_tasks.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_routine_tasks.php new file mode 100644 index 0000000..90b3b66 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_routine_tasks.php @@ -0,0 +1,116 @@ + + function startTask(){ + var selr = $("#k2routine_tasks").jqGrid("getGridParam","selrow", "activation"); + if(selr!==""){ + $.ajax({ + url: "/adm/k2siteadmin_routine_tasks/mode/admin/temp/ajax/op/tasks/id/"+selr, + type: "GET", + data: {}, + success: function(results){ + alert(results) + location.reload(); + }}); + } + + + }; + '; + + return $script; + } + + // + function showTasksTable(){ + global $k2; + + $rez=''; + /*$k2->site->addCSS('jquery.timepicker.css', '//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css'); + $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'); */ + + + $grid = $k2->ins_comp2('k2phpgrid', $this); + + + + $arr = $this->loadResYML('routine_tasks'); + + if ($arr<>[]) + $rez .= $grid->simpleTable($arr); + $rez .= $this->renderJs(); + + return $rez; + } + //принудительный запуск задачи + function getTasks($id){ + global $k2; + $rez=''; + $r = $k2->sql->sel("SELECT r.tasksid, r.tasks, r.dataactive, r.periodicity, r.status, r.description, r.time + FROM k2routine_tasks r WHERE r.tasksid=:tasksid", + ['tasksid'=>$id]); + $data=$r['data'][0]; + //Выполнение команды + $data['tasks']; + //конец выполнения + $time=time(); + $period= $data['periodicity']; + $time=date("Y-m-d H:i:s", $time+$period); + $r = $k2->sql->upd( + "UPDATE k2routine_tasks + SET + time=:time + WHERE tasksid=:tasksid ", + [ + 'tasksid'=>$id, + 'time'=>$time + ] + ); + $rez=$data['tasks']; + return $rez; + } + + // Возвращаем контент + function content(){ + global $k2; + + + + $op = $k2->get('op'); + $id = $k2->get('id'); + + switch ($op) + { + case "tasks": + $rez=$this->getTasks($id); + break; + default: + $rez.=$this->showTasksTable(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_social.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_social.php new file mode 100644 index 0000000..96c1261 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_social.php @@ -0,0 +1,52 @@ +ins_comp2('k2phpgrid', $this); + + + + $arr = $this->loadResYML('social'); + + if ($arr<>[]) + $rez .= $grid->simpleTable($arr); + + + return $rez; + } + + + + + // Возвращаем контент + function content(){ + global $k2; + $rez.=$this->showSocialTable(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_templates.php b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_templates.php new file mode 100644 index 0000000..30dae9a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/k2siteadmin_templates.php @@ -0,0 +1,212 @@ +rootdir.self::TEMPLATERS_DIR); + + foreach ($filesList as $dirItem) { + $isFile = strripos($dirItem, '.'); + + if ($isFile === false) { + array_push($templateList, $dirItem); + } + } + + return $templateList; + } + + /** + * Очищает таблицу k2temp_list, перез записью списка шаблонов + */ + public function clearDbTemplateList() { + global $k2; + + $sqlQuery = 'TRUNCATE TABLE k2temp_list'; + + $k2->db->exec($sqlQuery); + + } + + /** + * Сохраняет в БД список шаблонов, доступных в папке /k2shop/usr + */ + public function saveTemplatesListToDb() { + global $k2; + + + $templatesArray = $this->getTemplatesList(); + $this->clearDbTemplateList(); + + for( $i=0; $i<= count($templatesArray) - 1; $i++ ) { + + $sqlQuery = 'INSERT INTO k2temp_list (temp_name) VALUES ("'.$templatesArray[$i].'")'; + $k2->db->exec($sqlQuery); + } + } + + /** + * Получает имя сайта по его id + * @param type $projectId - integer ID проекта + * @return type string + */ + public function getSiteName($siteId) { + global $k2; + + $sqlQuery = 'SELECT domainname AS name FROM k2sites WHERE siteid ='.$siteId.' LIMIT 1'; + + foreach ($k2->db->query($sqlQuery) as $projectItem){ + $projectName = $projectItem['name']; + } + + return $projectName; + } + + public function actThemes($tempid) { + global $k2; + $rez = ''; + $sqlQuery1 = 'UPDATE k2temp SET + temp_active ="0" + WHERE temp_active ="1" '; + try { + $k2->db->exec($sqlQuery1); + + } catch (PDOException $e) { + echo "Ошибка активации темы: $sqlQuery1\n"; + echo $e->getMessage(); + } + + $sqlQuery2 = 'UPDATE k2temp SET + temp_active ="1" + WHERE tempid ="'.$tempid.'" '; + try { + $k2->db->exec($sqlQuery2); + + } catch (PDOException $e) { + echo "Ошибка активации темы: $sqlQuery2\n"; + echo $e->getMessage(); + } + return $rez; + } + + public function delThemes($tempid) { + global $k2; + +// $sqlQuery = 'SELECT domainname AS name FROM k2sites WHERE siteid ='.$siteId.' LIMIT 1'; +// +// foreach ($k2->db->query($sqlQuery) as $projectItem){ +// $projectName = $projectItem['name']; +// } +// + return $projectName; + } + + /** + * Генерирует запрос к БД для получения данных о шаблонах, доступных для выбора + * сайту с указанным ID + * @return string - строка запроса + */ + private function getSqlQuery($siteId = '') { + global $k2; + + if($siteId == ''){ + $siteId = $k2->get('site_id'); + } + + + if ($siteId <> '') { + + $sqlQuery = 'SELECT tempid, siteid, usl, templatename, comment_temp, temp_active + FROM k2temp + WHERE siteid='.$siteId; + } else { + die('Не указан сайт'); + } + + return $sqlQuery; + } + + /** + * Генерирует запрос к БД для получения данных о шаблонах, доступных для выбора + * сайту с указанным ID + * @return string - строка запроса + */ + public function getThemes() { + global $k2; + + $theme_arr = []; + $sqlQuery = 'SELECT tempid, siteid, usl, templatename, comment_temp, temp_active, screenshot + FROM k2temp ORDER BY temp_active DESC + '; + try{ + foreach ($k2->db->query($sqlQuery) as $value){ + array_push($theme_arr, $value); + } + }catch (Exception $e) { + echo "Ошибка : ".$e->getMessage()."\n"; + } + + + return $theme_arr; + } + + + + /** + * Выводит таблицу шаблонов. CRUD разрешены только Суперадминистраторам + * @return type string + */ + public function showTemplatesTable($siteId = ''){ + + global $k2; + $grid=$k2->ins_comp2('k2phpgrid', $this); + + if($siteId == ''){ + $siteId = $k2->get('site_id'); + } + + $this->Vars([ + 'sel' => $this->getSqlQuery($siteId), + 'sitename' => $this->getSiteName($siteId), + 'siteid' => $siteId + ]); + + $arr = $this->loadResYML('temp'); + + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $this->saveTemplatesListToDb(); + $rez=$this->showTemplatesTable(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/en.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/en.csv new file mode 100644 index 0000000..c6894d8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/en.csv @@ -0,0 +1,6 @@ +name| value +lnSite| Site +lnMenu| Menu +lnContent| Content +lnProjects| Projects & Domains +lnLanguages| Languages \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/ru.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/ru.csv new file mode 100644 index 0000000..5ddf38a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/ru.csv @@ -0,0 +1,7 @@ +name|value +lnSite| Сайт +lnMenu| Меню +lnContent| Контент +lnProjects| Проекты и сайты +lnLanguages| Языки контента +lnPortfolio | Портфолио \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/ua.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/ua.csv new file mode 100644 index 0000000..3477645 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin/ua.csv @@ -0,0 +1,7 @@ +name|value +lnSite| Сайт +lnMenu| Меню +lnContent| Контент +lnProjects| Проекти та сайти +lnLanguages| Мови контенту +lnPortfolio | Портфоліо \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/en.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/en.csv new file mode 100644 index 0000000..52ae501 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/en.csv @@ -0,0 +1,10 @@ +name| value +lnContent| Contents +lnHeader| Header +lnDescription| Description +lnKeywords| Keywords +lnCommands| Commands +lnPreviouslevel| Previous level +lnScript| Script +lnDetailContent| Detail Content +lnEditContent| Edit Content diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/ru.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/ru.csv new file mode 100644 index 0000000..0d0eb80 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/ru.csv @@ -0,0 +1,11 @@ +name|value +lnContent| Контент +lnHeader| Заголовок +lnDescription| Описание +lnKeywords| Ключевые слова +lnCommands| Команды +lnPreviouslevel| Предыдущий уровень +lnScript| Скрипт +language | Язык +lnDetailContent| Полный контент +lnEditContent| Редактировать контент \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/ua.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/ua.csv new file mode 100644 index 0000000..da480ab --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_content/ua.csv @@ -0,0 +1,10 @@ +name| value +lnContent| Контент +lnHeader| Заголовок +lnDescription| Опис +lnKeywords| Ключові слова +lnCommands| Команди +lnPreviouslevel| Попередній рівень +lnScript| Скрипт +lnDetailContent| Повний контент +lnEditContent| Редагувати контент \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/en.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/en.csv new file mode 100644 index 0000000..c60905c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/en.csv @@ -0,0 +1,6 @@ +name| value +lnLanguages | Content languages +lnLanguageName | Language +lnCommentlang | Comments +lnLangActive | Active +lnLangTag | Language Tag \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/ru.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/ru.csv new file mode 100644 index 0000000..25a1854 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/ru.csv @@ -0,0 +1,6 @@ +name|value +lnLanguages | Языки контента +lnLanguageName | Язык +lnCommentlang | Комментарии +lnLangActive | Активен +lnLangTag | Идентификатор \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/ua.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/ua.csv new file mode 100644 index 0000000..8780484 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_languages/ua.csv @@ -0,0 +1,6 @@ +name|value +lnLanguages | Мови контента +lnLanguageName | Мова +lnCommentlang | Примітки +lnLangActive | Активний +lnLangTag | Ідентифікатор \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/en.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/en.csv new file mode 100644 index 0000000..8cd2bb3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/en.csv @@ -0,0 +1,18 @@ +name| value +lmMenu| Menu +lmName| Name +lnIdentifier| Identifier +lnNote| Note +lnOn| On +lnMenuItems| Menu items +lnNameMenuItem| The name of the menu item +lnIdBeforeMenu| Id before. menu +lnCommand| Command +lnSorting| Sorting +lnHint| Hint +lnHeader| Header +lnDescription| Description +lnKeywords| Keywords +lnScript| Script +lnContent| Contents +lnEditContent | Edit content \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/fr.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/fr.csv new file mode 100644 index 0000000..5900657 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/fr.csv @@ -0,0 +1,2 @@ +name| value +lnEditContent | Modifier le contenu diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/ru.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/ru.csv new file mode 100644 index 0000000..9ce2fe3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/ru.csv @@ -0,0 +1,18 @@ +name|value +lmMenu| Меню +lmName| Название +lnIdentifier| Идентификатор +lnNote| Примечание +lnOn| Вкл +lnMenuItems| Элементы меню +lnNameMenuItem| Название пункта меню +lnIdBeforeMenu| id пред. меню +lnCommand| Команда +lnSorting| Сортировка +lnHint| Подсказка +lnHeader| Заголовок +lnDescription| Описание +lnKeywords| Ключевые слова +lnScript| Скрипт +lnContent| Контент +lnEditContent | Редактировать контент \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/ua.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/ua.csv new file mode 100644 index 0000000..2463e40 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_menu/ua.csv @@ -0,0 +1,18 @@ +name| value +lmMenu| Меню +lmName| Назва +lnIdentifier| Ідентифікатор +lnNote| Примітка +lnOn| Увімкнути +lnMenuItems| Елементи меню +lnNameMenuItem| Назва пункту меню +lnIdBeforeMenu| Id попер. меню +lnCommand| Команда +lnSorting| Сортування +lnHint| Підказка +lnHeader| Заголовок +lnDescription| Опис +lnKeywords| Ключові слова +lnScript| Скрипт +lnContent| Контент +lnEditContent | Редагувати контент \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/en.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/en.csv new file mode 100644 index 0000000..4b63249 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/en.csv @@ -0,0 +1,14 @@ +name| value +lnProjects | Projects List +lnProjectName | Name +lnProjectComment | Comment +lnProjectDate | Date +lnProjectStatus | Active +lnDomainName | Domain name +lnAdditionalUrl | URI +lnLanguageTag | Language +lnSiteStatus | Active +lnSitesList | Sites list +lnProject | Project +lnSiteTemplate | Template +lnProjectUsers | Users \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/ru.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/ru.csv new file mode 100644 index 0000000..e9f8372 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/ru.csv @@ -0,0 +1,14 @@ +name|value +lnProjects | Список проектов +lnProjectName | Название +lnProjectComment | Комментарий +lnProjectDate | Дата создания +lnProjectStatus | Активен +lnDomainName | Домен +lnAdditionalUrl | URI +lnLanguageTag | Язык сайта +lnSiteStatus | Активен +lnSitesList | Список сайтов +lnProject | Проект +lnSiteTemplate | Шаблон +lnProjectUsers | Пользователи \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/ua.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/ua.csv new file mode 100644 index 0000000..5bc5883 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projects/ua.csv @@ -0,0 +1,14 @@ +name|value +lnProjects | Список проектів +lnProjectName | Назва +lnProjectComment | Примітки +lnProjectDate | Дата створення +lnProjectStatus | Активний +lnDomainName | Домен +lnAdditionalUrl | URI +lnLanguageTag | Мова сайту +lnSiteStatus | Активний +lnSitesList | Список сайтів +lnProject | Проект +lnSiteTemplate | Шаблон +lnProjectUsers | Користувачі \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/en.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/en.csv new file mode 100644 index 0000000..aaa0daf --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/en.csv @@ -0,0 +1,7 @@ +name| value +lnUsers | Users +lnUserName | Username +lnIsAdmin | Administrator +lnReadPermittion | Read +lnWritePermittion | Write +lnRoleActive | Active \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/ru.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/ru.csv new file mode 100644 index 0000000..27fc1e2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/ru.csv @@ -0,0 +1,7 @@ +name|value +lnUsers | Пользователи, имеющие право управлять проектом +lnUserName | Пользователь +lnIsAdmin | Администратор +lnReadPermittion | Чтение +lnWritePermittion | Запись +lnRoleActive | Активен diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/ua.csv b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/ua.csv new file mode 100644 index 0000000..d7a00c5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/lng/k2siteadmin_projusers/ua.csv @@ -0,0 +1,17 @@ +name| value +lmMenu| Меню +lmName| Назва +lnIdentifier| Ідентифікатор +lnNote| Примітка +lnOn| Увімкнути +lnMenuItems| Елементи меню +lnNameMenuItem| Назва пункту меню +lnIdBeforeMenu| Id попер. меню +lnCommand| Команда +lnSorting| Сортування +lnHint| Підказка +lnHeader| Заголовок +lnDescription| Опис +lnKeywords| Ключові слова +lnScript| Скрипт +lnContent| Контент \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/content.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content.yml new file mode 100644 index 0000000..c2fecbd --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content.yml @@ -0,0 +1,210 @@ +select: + <%sel%> +table: k2content +rows: 10 +height: 300 +sortname: title +detile: k2content2 +sortorder: asc +grid_onload: showDelete('active') +caption: <%lnContent%> +readonly_form: + 0: content +fields: + 0: + field: contentid + caption: ID + width: 40 + readonly: true + hidden: true + align: center + + 1: + field: title + caption: <%lnHeader%> + width: 250 + readonly: false + align: left +# type_field: link +# link: "<%reffer%>/content_id/{contentid}/command/{command}/" +# target: _blank + + usercreate: + field: usercreate + caption: Автор + width: 75 + readonly: false + align: left + + create_datetime: + field: create_datetime + caption: Дата созданиия + width: 100 + readonly: false + align: left + + ordnum: + field: ordnum + caption: Сортировка + width: 70 + readonly: false + align: right + + h1: + field: h1 + caption: H1 + width: 75 + readonly: false + align: left + + slug: + field: slug + caption: ЧПУ + width: 75 + readonly: false + align: left + + short_description: + field: short_description + caption: Краткое описание + width: 250 + readonly: false + align: left + type_field: textarea + + descript: + field: descript + caption: <%lnDescription%> + width: 150 + readonly: false + align: left + + keywords: + field: keywords + caption: <%lnKeywords%> + width: 75 + readonly: false + align: left + + 5: + field: command + caption: <%lnCommands%> + width: 75 + readonly: false + align: left + def_value: news + + +# 6: +# field: parentcontent +# caption: <%lnPreviouslevel%> +# width: 50 +# readonly: false +# align: left + +# 7: +# field: script +# caption: <%lnScript%> +# width: 50 +# readonly: false, +# hidden: true, +# align: left +# +# 8: +# field: lang +# caption: <%language%> +# width: 50 +# readonly: false +# align: center +# + 9: + field: lang + caption: Язык + width: 65 + readonly: false + align: left + def_value: ru + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang +# + 10: + field: lgparentid + caption: lgparentid + def_value: + width: 100 + readonly: false + align: left + def_value: 0 +# +# 11: +# field: siteid +# caption: ID сайта +# def_value: <%siteid%> +# width: 100 +# readonly: false, +# align: left + translate: + field: translate + caption: Перевод + width: 80 + readonly: true + align: center + type_field: condition + cond: + exp: '(false)' + target2: _self + caption2: "" + + +# 12: +# field: edit_content +# caption: <%lnEditContent%> +# width: 200 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# caption2: <%lnEditContent%> +# url2: "/adm/k2siteadmin_content/mode/admin/t/item/action/edit/edit_item_id/{contentid}#popup_contentitemedit" +# class: edit-ajax +# target2: _self + + + + active: + field: active + caption: Актив. + width: 30 + readonly: false + align: center + type_field: checkbox + + siteid: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left + + projid: + field: projid + caption: ID проекта + def_value: <%projid%> + width: 100 + readonly: false + align: left + + + content: + field: content + caption: Контент + width: 450 + readonly: false + align: left + hidden: true + type_field: wysiwyg \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/content2.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content2.yml new file mode 100644 index 0000000..6396024 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content2.yml @@ -0,0 +1,92 @@ +select: <%sel%> +table: k2content +sortname: contentid +sortorder: asc +caption: Переводы для контента с ID <%contentid%> + +fields: + 0: + field: contentid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: title + caption: <%lnHeader%> + width: 550 + readonly: false + align: left + type_field: link + link: "<%reffer%>&content_id={contentid}" + + 2: + field: command + caption: <%lnCommands%> + width: 250 + readonly: false + def_value: <%commandval%> + align: left + hidden: true + + 3: + field: parentcontent + caption: <%lnPreviouslevel%> + width: 50 + readonly: false + hidden: true + align: left + def_value: <%parentval%> + + 4: + field: lang + caption: Язык + width: 100 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang + + 5: + field: edit_content + caption: <%lnEditContent%> + width: 250 + readonly: true + align: center + type_field: condition + cond: + exp: (false) + caption2: <%lnEditContent%> + url2: "<%reffer%>&action=edit&edit_item_id=\"{contentid}\"#popup_contentitemedit" + target2: _self + + 6: + field: lgparentid + caption: Lang Parent ID + def_value: <%contentid%> + width: 100 + readonly: false + align: left + hidden: true + + 7: + field: projid + caption: ID проекта + def_value: <%projid%> + width: 100 + readonly: false + align: left + hidden: true + + 8: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left + hidden: true diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_inc.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_inc.yml new file mode 100644 index 0000000..ea2a2ec --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_inc.yml @@ -0,0 +1,188 @@ +select: + <%sel%> +table: k2content +rows: 10 +height: 300 +sortname: title +detile: k2content2 +sortorder: asc +grid_onload: showDelete('active') +caption: <%lnContent%> +readonly_form: + 0: content +fields: + 0: + field: contentid + caption: ID + width: 40 + readonly: true +# hidden: true + align: center + + 1: + field: title + caption: <%lnHeader%> + width: 250 + readonly: false + align: left +# type_field: link +# link: "<%reffer%>/content_id/{contentid}/command/{command}/" +# target: _blank + +# usercreate: +# field: usercreate +# caption: Автор +# width: 75 +# readonly: false +# align: left + +# create_datetime: +# field: create_datetime +# caption: Дата созданиия +# width: 100 +# readonly: false +# align: left + +# ordnum: +# field: ordnum +# caption: Сортировка +# width: 70 +# readonly: false +# align: right + +# h1: +# field: h1 +# caption: H1 +# width: 75 +# readonly: false +# align: left + 5: + field: command + caption: <%lnCommands%> + width: 75 + readonly: false + align: left + descript: + field: descript + caption: <%lnDescription%> + width: 100 + readonly: false + align: left + +# keywords: +# field: keywords +# caption: <%lnKeywords%> +# width: 75 +# readonly: false +# align: left + + + + + +# 6: +# field: parentcontent +# caption: <%lnPreviouslevel%> +# width: 50 +# readonly: false +# align: left + +# 7: +# field: script +# caption: <%lnScript%> +# width: 50 +# readonly: false, +# hidden: true, +# align: left +# +# 8: +# field: lang +# caption: <%language%> +# width: 50 +# readonly: false +# align: center +# + 9: + field: lang + caption: Язык + width: 65 + readonly: false + align: left + def_value: ru + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang +# + lgparentid: + field: lgparentid + caption: lgparentid + def_value: + width: 100 + readonly: false + align: left + def_value: 0 + active: + field: active + caption: Актив. + width: 30 + readonly: false + align: center + type_field: checkbox + def_value: 1 + siteid: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left + + projid: + field: projid + caption: ID проекта + def_value: <%projid%> + width: 100 + readonly: false + align: left + + # translate: + # field: translate + # caption: Перевод + # width: 80 + # readonly: true + # align: center + # type_field: condition + # cond: + # exp: '(false)' + # target2: _self + # caption2: "" + + +# 12: +# field: edit_content +# caption: <%lnEditContent%> +# width: 200 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# caption2: <%lnEditContent%> +# url2: "/adm/k2siteadmin_content/mode/admin/action/edit/edit_item_id/{contentid}#popup_contentitemedit" +# class: edit-ajax +# target2: _self + + + content: + field: content + caption: Контент + width: 450 + readonly: false + align: left + hidden: true + type_field: wysiwyg + + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_media.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_media.yml new file mode 100644 index 0000000..d570db1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_media.yml @@ -0,0 +1,73 @@ +select: + SELECT contentid, title, descript, keywords, command, image, content, create_datetime, usercreate, parentcontent, script, ordnum, h1, lang, langid, lgparentid, projid, siteid + FROM k2content +where: 'where command = "media"' +table: k2content +rows: 10 +height: 300 +sortname: title +detile: k2content2 +sortorder: asc +grid_onload: showDelete('active') +caption: <%lnContent%> +fields: + 0: + field: contentid + caption: ID + width: 40 + readonly: true + hidden: true + align: center + + 1: + field: title + caption: <%lnHeader%> + width: 250 + readonly: false + align: left +# type_field: link +# link: "<%reffer%>/content_id/{contentid}/command/{command}/" +# target: _blank + + + image: + field: image + caption: Изображение + width: 250 + readonly: false + align: left + type_field: file + params: + height: 100 + upload_dir: public/img + + link: + field: image + caption: URL + width: 250 + align: left + readonly: true + + + 3: + field: command + caption: Команда + width: 100 + readonly: false + align: left + def_value: 'media' + +# usercreate: +# field: usercreate +# caption: Автор +# width: 75 +# readonly: false +# align: left +# +# create_datetime: +# field: create_datetime +# caption: Дата созданиия +# width: 100 +# readonly: false +# align: left + diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_tr.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_tr.yml new file mode 100644 index 0000000..f63a5ee --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/content_tr.yml @@ -0,0 +1,106 @@ +select: + <%sel_tr%> +where: " where (lgparentid='{masterid}') " +table: k2content +sortname: contentid +sortorder: asc +caption: Переводы для контента +getmaster: true +masterid: contentid +divtable: k2content2 + +fields: + 0: + field: contentid + caption: ID + width: 40 + readonly: true + align: center + hidden: true + + 1: + field: title + caption: <%lnHeader%> + width: 150 + readonly: false + align: left + type_field: link + link: "<%reffer%>&content_id={contentid}" + + 2: + field: command + caption: <%lnCommands%> + width: 250 + readonly: false + def_value: <%commandval%> + align: left + hidden: true + + 3: + field: parentcontent + caption: <%lnPreviouslevel%> + width: 50 + readonly: false + hidden: true + align: left + def_value: <%parentval%> + + 4: + field: lang + caption: Язык + width: 100 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang + +# 5: +# field: edit_content +# caption: <%lnEditContent%> +# width: 250 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# caption2: <%lnEditContent%> +# url2: "<%reffer%>&action=edit&edit_item_id=\"{contentid}\"#popup_contentitemedit" +# target2: _self + + 6: + field: lgparentid + caption: Lang Parent ID + def_value: <%contentid%> + width: 100 + readonly: false + align: left + hidden: true + + 7: + field: projid + caption: ID проекта + def_value: <%projid%> + width: 100 + readonly: false + align: left +# hidden: true + + 8: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left +# hidden: true + + content: + field: content + caption: Контент + width: 450 + readonly: false + align: left + type_field: wysiwyg diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/email.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/email.yml new file mode 100644 index 0000000..5ded140 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/email.yml @@ -0,0 +1,62 @@ +select: SELECT emailid, eventid, email_tpl, email_comment FROM k2email +table: k2email +sortname: emailid +typeid: 1 +sortorder: asc +caption: Почтовые уведомления + +where: " where (eventid = '{masterid}') " +height: 250 +getmaster: true +masterid: eventid + +fields: + 0: + field: emailid + caption: ID + width: 60 + readonly: true + align: center + hidden: true +# required: true + + 1: + field: eventid + caption: Событие + width: 250 + readonly: false + align: left + type_field: DropDown + multy: false + hidden: true + sql: select eventid as k, event_name as v + from k2email_event + + 2: + field: email_tpl + caption: Название шаблона + width: 250 + readonly: false + align: left +# type_field: textarea + + 3: + field: email_comment + caption: Комментарий + width: 100 + readonly: false + align: center + + 12: + field: edit_email + caption: Редактировать + width: 250 + readonly: true + align: center + type_field: condition + cond: + exp: (false) + caption2: <%show_html%> +# url2: "" +# class: edit-ajax + target2: _self \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/email_event.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/email_event.yml new file mode 100644 index 0000000..056dc70 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/email_event.yml @@ -0,0 +1,32 @@ +select: SELECT eventid, comment, event_name FROM k2email_event +table: k2email_event +sortname: eventid +typeid: 1 +sortorder: asc +caption: События уведомлений +height: 250 +detile: k2email +fields: + 0: + field: eventid + caption: ID + width: 60 + readonly: true + align: center + hidden: true + + 1: + field: comment + caption: Событие + width: 250 + readonly: false + align: left + + 2: + field: event_name + caption: command + width: 250 + readonly: false + align: left + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/emails.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/emails.yml new file mode 100644 index 0000000..44aac98 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/emails.yml @@ -0,0 +1,57 @@ +select: SELECT emailid, from_emeil, message, active, created_at, updated_at FROM k2emails +table: k2emails +sortname: emailid +typeid: 1 +sortorder: asc +caption: Письма +custom_form: true +height: 250 +getmaster: true +fields: + 0: + field: emailid + caption: ID + width: 60 + readonly: true + align: center + hidden: true +# required: true + + from_emeil: + field: from_emeil + caption: Email + width: 150 + readonly: false + align: left + + message: + field: message + caption: Сообщение + width: 450 + readonly: false + align: left + type_field: textarea + + created_at: + field: created_at + caption: Создан + width: 100 + readonly: true + align: right + type_field: datetime + + updated_at: + field: updated_at + caption: Изменен + width: 100 + readonly: true + align: right + type_field: datetime + + active: + field: active + caption: Акт. + width: 50 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/info.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/info.yml new file mode 100644 index 0000000..e6e128b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2siteadmin" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/lang.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/lang.yml new file mode 100644 index 0000000..e73631c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/lang.yml @@ -0,0 +1,40 @@ +select: SELECT langid, langname, commentlang, lang_active, ord FROM k2lang +table: k2lang +sortname: langid +sortorder: asc +caption: <%lnLanguages%> +typeid: 0 +fields: + 0: + field: langid + caption: ID + width: 60 + readonly: false + align: center + required: true + 1: + field: langname + caption: <%lnLanguageName%> + width: 250 + readonly: false + align: left + 2: + field: commentlang + caption: <%lnCommentlang%> + width: 250 + readonly: false + align: left + type_field: textarea + 3: + field: lang_active + caption: <%lnLangActive%> + width: 100 + readonly: false + align: center + type_field: checkbox + ord: + field: ord + caption: Ord + width: 40 + readonly: false + align: center diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/mail_sets.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/mail_sets.yml new file mode 100644 index 0000000..0499f02 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/mail_sets.yml @@ -0,0 +1,61 @@ +select: SELECT mailsetid, sender, is_smtp, host, username, password, port FROM k2mail_sets +where: +table: k2mail_sets +sortname: is_smtp +typeid: 1 +sortorder: asc +caption: Настройка Почты +height: 250 +fields: + mailsetid: + field: mailsetid + caption: ID + width: 60 + readonly: true + align: center + hidden: true + required: true + + sender: + field: sender + caption: Отправитель + width: 150 + readonly: false + align: left + + is_smtp: + field: is_smtp + caption: SMTP + width: 50 + readonly: false + align: center + type_field: checkbox + + host: + field: host + caption: Host + width: 100 + readonly: false + align: left + + username: + field: username + caption: Пользователь + width: 140 + readonly: false + align: center + + password: + field: password + caption: Пароль + width: 100 + readonly: false + align: center + + port: + field: port + caption: Порт + width: 75 + readonly: false + align: center + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu.yml new file mode 100644 index 0000000..0a6962d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu.yml @@ -0,0 +1,90 @@ +0: + category: + parent: root + name: k2site + caption: <%lnSite%> + iconclass: fa fa-tv + + elements: + 0: + name: site_projects + caption: <%lnProjects%> + url: "?adm=k2siteadmin_projects" + command: + iconclass: fa fa-archive + + + + 1: + name: site_menu + caption: <%lnMenu%> + url: "?adm=k2siteadmin_menu" + command: + iconclass: fa fa-map-o + + news: + name: news + caption: Новости/Статьи + url: "?adm=k2siteadmin_content&t=item" + command: + iconclass: fa fa-map-o + + 2: + name: site_content + caption: <%lnContent%> области + url: "?adm=k2siteadmin_content&t=all" + command: + iconclass: fa fa-sticky-note + + media: + name: media + caption: Галерея + url: "?adm=k2siteadmin_content&t=media" + command: + iconclass: fa fa-map-o + + 3: + name: site_languages + caption: <%lnLanguages%> + url: "?adm=k2siteadmin_languages" + command: + iconclass: fa fa-map + + emails: + name: emails + caption: Письма + url: "?adm=k2siteadmin_emails" + command: + iconclass: fa fa-map + +# 4: +# name: site_portfolio +# caption: Портфолио +# url: "?adm=k2siteadmin_portfolio" +# command: +# iconclass: fa fa-map +# 5: +# name: site_email +# caption: Почтовые уведомления +# url: "?adm=k2siteadmin_email" +# command: +# iconclass: fa fa-envelope-o + site_mailset: + name: site_email + caption: Настройка почты + url: "?adm=k2siteadmin_mailset" + command: + iconclass: fa fa-envelope-o + social_link: + name: social_link + caption: Соц. сети + url: "?adm=k2siteadmin_social" + command: + iconclass: fa fa-facebook +# 7: +# name: social_link +# caption: Регл. задания +# url: "?adm=k2siteadmin_routine_tasks" +# command: +# iconclass: fa fa-clock-o + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items.yml new file mode 100644 index 0000000..774f93d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items.yml @@ -0,0 +1,257 @@ +select: + select k2menuitemid, k2menuid, caption, parentid, active, hint, command, + url, ord, title, descript, keywords, content, h1, script, projid, siteid, langid, lgparentid, class + from k2menuitems + +where: " where (k2menuid='{masterid}') " + +# Указывает, что есть master-таблица +getmaster: true +masterid: k2menuid + +typeid: 1 +height: 350 +table: k2menuitems +sortname: ord,parentid +detile: k2menuitems2 +sortorder: asc +caption: <%lnMenuItems%> +readonly_form: + 0: content +addtool_button: + 0: + caption: + title: 'Перевод' + id: filtrsert + icon: ui-icon-info + action: traslateMenu() +fields: + 0: + field: k2menuitemid + caption: ID + width: 40 + readonly: true + align: center + hidden: true + + 1: + field: caption + caption: <%lnNameMenuItem%> + width: 250 + readonly: false + align: left +# type_field: link +## link: "<%reffer%>&menuid={k2menuid}&menuitemid={k2menuitemid}" +# link: "/?adm=k2siteadmin_menu&mode=admin&menuid={k2menuid}&menuitemid={k2menuitemid}" +# lgparentid: +# field: lgparentid +# caption: lgparentid +# def_value: +# width: 100 +# readonly: false +# align: left + + 17: + field: langid + caption: ID языка + def_value: <%lng%> + width: 100 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang where lang_active = 1 + 2: + field: parentid + caption: <%lnIdBeforeMenu%> + width: 75 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + SELECT 0 as k, '_' as v + UNION SELECT k2menuitemid as k, CONCAT(caption,' | ',langid) as v + FROM k2menuitems + + 3: + field: command + caption: <%lnCommand%> + width: 100 + readonly: false + align: left + + 4: + field: url + caption: URL + width: 100 + readonly: false + align: left +# 5: +# field: class +# caption: class +# width: 100 +# readonly: false +# align: left + + 6: + field: ord + caption: <%lnSorting%> + width: 75 + readonly: false + align: left + +# elemid: +# field: elemid +# caption: add id +# width: 100 +# readonly: false +# align: left + + 7: + field: hint + caption: <%lnHint%> + width: 100 + readonly: false + align: left + hidden: true + + 8: + field: title + caption: <%lnHeader%> + width: 100 + readonly: false + align: left +# hidden: true +# type_field: textarea + + 9: + field: h1 + caption: H1 + width: 100 + readonly: false + align: left + hidden: false + + 10: + field: descript + caption: <%lnDescription%> + width: 100 + readonly: false + align: left +# hidden: true + type_field: textarea + + 11: + field: keywords + caption: <%lnKeywords%> + width: 100 + readonly: false + align: left +# hidden: true +# type_field: textarea + class: + field: class + caption: Іконка + width: 100 + readonly: false + align: left +# hidden: true +# type_field: textarea + + + 12: + field: script + caption: <%lnScript%> + width: 100 + readonly: false + align: left +# type_field: textarea + +# translate: +# field: translate +# caption: Перевод +# width: 80 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: '(false)' +# target2: _self +# caption2: "" + +# 13: +# field: edit_content +# caption: <%lnEditContent%> +# width: 150 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: (false) +# caption2: <%lnEditContent%> +# url2: "/?adm=k2siteadmin_menu&mode=admin&edit_item={k2menuitemid}#popup_itemedit" +# target2: _self +# class: edit-ajax +# exp: (false) +# caption2: <%lnEditContent%> +# url2: "/adm/k2siteadmin_content/mode/admin/t/item/action/edit/edit_item_id/{contentid}#popup_contentitemedit" +# class: edit-ajax +# target2: _self + + + 14: + field: active + caption: <%lnOn%> + def_value: 1 + width: 30 + readonly: false + align: left + type_field: checkbox + hidden: false + + 15: + field: projid + caption: ID проекта + def_value: <%projectid%> + width: 100 + readonly: false + align: left + hidden: false + type_field: DropDown + multy: false + sql: + SELECT projid as k, projname as v FROM k2proj + + + 16: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left + hidden: false + + + + 18: + field: k2menuid + caption: ID меню + def_value: + width: 100 + readonly: false + align: left + hidden: true + + content: + field: content + caption: <%lnContent%> + width: 300 + readonly: false + align: left + type_field: wysiwyg + hidden: true + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items2.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items2.yml new file mode 100644 index 0000000..0df4bef --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items2.yml @@ -0,0 +1,180 @@ +select: select k2menuitemid, k2menuid, caption, parentid, active, hint, command, + url, ord, title, descript, keywords, content, h1, script, projid, siteid, + langid, lgparentid, home_page from k2menuitems + +table: k2menuitems +sortname: k2menuitemid + +where: " where lgparentid='$menuItemId' " + +sortorder: asc +caption: Переводы для пункта меню +fields: + 0: + field: k2menuitemid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: caption + caption: <%lnNameMenuItem%> + width: 100 + readonly: false, + align: left + + 2: + field: parentid + caption: <%lnIdBeforeMenu%> + width: 75 + readonly: false, + align: left + hidden: true + + 3: + field: command + caption: <%lnCommand%> + width: 100 + readonly: false, + align: left + hidden: true + + 4: + field: url + caption: URL + width: 100 + readonly: false + align: left + hidden: true + + 5: + field: ord + caption: <%lnSorting%> + width: 75 + readonly: false, + align: left + hidden: true + + 6: + field: hint + caption: <%lnHint%> + width: 100 + readonly: false, + align: left + hidden: true + + 7: + field: title + caption: <%lnHeader%> + width: 100 + readonly: false, + align: left + hidden: true + + 8: + field: h1 + caption: H1 + width: 100 + readonly: false + align: left + hidden: true + + 9: + field: descript + caption: <%lnDescription%> + width: 100 + readonly: false, + align: left + hidden: true + + 10: + field: keywords + caption: <%lnKeywords%> + width: 100 + readonly: false, + align: left + hidden: true + + 11: + field: script + caption: <%lnScript%> + width: 100 + readonly: false, + align: left + type_field: textarea + hidden: true + + 12: + field: content + caption: <%lnContent%> + width: 700 + readonly: false, + align: left + type_field: wysiwyg' + + 13: + field: active + caption: <%lnOn%> + def_value: 1 + width: 30 + readonly: false, + align: left + type_field: checkbox + hidden: true + + 14: + field: projid + caption: ID проекта + def_value: <%projectid%> + width: 100 + readonly: false, + align: left + hidden: true + + 15: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left + hidden: false + + 16: + field: langid + caption: Язык + width: 75 + readonly: false + align: left + type_field: DropDown + multy: false + sql: SELECT langid as k, langname as v + FROM k2lang + + 17: + field: k2menuid + caption: ID меню + def_value: <%menuid%> + width: 100 + readonly: false + align: left + hidden: true + + 18: + field: lgparentid + caption: Lang Parent ID + def_value: <%menuitemid%> + width: 100 + readonly: false + align: left + hidden: true + + 19: + field: home_page + caption: Home Page Status + def_value: $homePageStatus + width: 100 + readonly: false + align: left + hidden: true diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items_tr.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items_tr.yml new file mode 100644 index 0000000..5f3bf04 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_items_tr.yml @@ -0,0 +1,184 @@ +select: + select k2menuitemid, k2menuid, caption, parentid, active, hint, command, + url, ord, title, descript, keywords, content, h1, script, projid, siteid, + langid, lgparentid, home_page from k2menuitems + +table: k2menuitems +divtable: k2menuitems2 +sortname: k2menuitemid + +where: " where (lgparentid='{masterid}') " +getmaster: true +masterid: k2menuitemid +sortorder: asc +caption: Переводы для пункта меню +fields: + 0: + field: k2menuitemid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: caption + caption: <%lnNameMenuItem%> + width: 100 + readonly: false + align: left + + 2: + field: parentid + caption: <%lnIdBeforeMenu%> + width: 75 + readonly: false + align: left + hidden: true + + 3: + field: command + caption: <%lnCommand%> + width: 100 + readonly: false + align: left + hidden: true + + 4: + field: url + caption: URL + width: 100 + readonly: false + align: left + hidden: true + + 5: + field: ord + caption: <%lnSorting%> + width: 75 + readonly: false + align: left + hidden: true + + 6: + field: hint + caption: <%lnHint%> + width: 100 + readonly: false + align: left + hidden: true + + 7: + field: title + caption: <%lnHeader%> + width: 100 + readonly: false + align: left + hidden: true + + 8: + field: h1 + caption: H1 + width: 100 + readonly: false + align: left + hidden: true + + 9: + field: descript + caption: <%lnDescription%> + width: 100 + readonly: false + align: left + hidden: true + + 10: + field: keywords + caption: <%lnKeywords%> + width: 100 + readonly: false + align: left + hidden: true + + 11: + field: script + caption: <%lnScript%> + width: 100 + readonly: false + align: left + type_field: textarea + hidden: true + + 12: + field: content + caption: <%lnContent%> + width: 700 + readonly: false + align: left + type_field: wysiwyg + + 13: + field: active + caption: <%lnOn%> + def_value: 1 + width: 30 + readonly: false + align: left + type_field: checkbox + hidden: true + + 14: + field: projid + caption: ID проекта + def_value: <%projectid%> + width: 100 + readonly: false + align: left + hidden: true + + 15: + field: siteid + caption: ID сайта + def_value: <%siteid%> + width: 100 + readonly: false + align: left + hidden: false + + 16: + field: langid + caption: Язык + width: 75 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang + + 17: + field: k2menuid + caption: ID меню + def_value: <%menuid%> + width: 100 + readonly: false + align: left + hidden: true + + 18: + field: lgparentid + caption: Lang Parent ID + def_value: <%menuitemid%> + width: 100 + readonly: false + align: left + hidden: true + + 19: + field: home_page + caption: Home Page Status + def_value: $homePageStatus + width: 100 + readonly: false + align: left + hidden: true diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_main.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_main.yml new file mode 100644 index 0000000..850137f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/menu_main.yml @@ -0,0 +1,62 @@ +select: SELECT k2menuid, menu_name, ident, comment, active, projid FROM k2menu +table: k2menu + +# Детально +detile: k2menuitems + +typeid: 1 +response: false +sortname: k2menuid +sortorder: asc +caption: <%lmMenu%> +height: 150 + +fields: + 0: + field: k2menuid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: menu_name + caption: <%lmName%> + width: 250 + readonly: false + align: left + + 2: + field: ident + caption: <%lnIdentifier%> + width: 250 + readonly: false + align: left + + 3: + field: comment + caption: <%lnNote%> + width: 250 + readonly: false, + align: left + + 4: + field: active + caption: <%lnOn%> + def_value: 1 + width: 30 + readonly: false + align: left + type_field: checkbox + + projid: + field: projid + caption: Проект + width: 150 + readonly: false + align: left + type_field: DropDown + multy: false + sql: + SELECT projid as k, projname as v + FROM k2proj diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/portfolio.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/portfolio.yml new file mode 100644 index 0000000..0532b87 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/portfolio.yml @@ -0,0 +1,57 @@ +select: select portf_id, portf_name, portf_projid, portf_typeid, portf_sort, portf_path, portf_alt from k2portfolio +table: k2portfolio +sortname: portf_id +sortorder: desc +caption: Портфолио + +where: " where (portf_typeid = '{masterid}') " + +getmaster: true +masterid: portf_typeid +fields: + 0: + field: portf_id + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: portf_name + caption: Название + width: 250 + readonly: false + align: left + + 2: + field: portf_typeid + caption: Тип работы + width: 100 + readonly: false + align: center + type_field: DropDown + multy: false + sql: select portf_typeid as k, portf_typename as v + from k2portf_type + + 3: + field: portf_sort + caption: Сортировка + width: 100 + readonly: false + align: center + + 4: + field: portf_path + caption: Изображение + width: 400 + readonly: false + type_field: file + align: left + + 5: + field: portf_alt + caption: Alt + width: 250 + readonly: false + align: left diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/portfolio_type.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/portfolio_type.yml new file mode 100644 index 0000000..1cc3a40 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/portfolio_type.yml @@ -0,0 +1,30 @@ +select: select portf_typeid, portf_typename, portf_desc from k2portf_type +table: k2portf_type +sortname: portf_typeid +sortorder: asc +caption: Проекты +height: 250 +detile: k2portfolio + +fields: + 0: + field: portf_typeid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: portf_typename + caption: Название проекта + width: 220 + readonly: false + align: left + + 2: + field: portf_desc + caption: Описание портфолио + width: 820 + readonly: false + align: left + type_field: wysiwyg diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/projects.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/projects.yml new file mode 100644 index 0000000..b285b04 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/projects.yml @@ -0,0 +1,65 @@ +select: + <%sel%> + +table: k2proj +detile: k2sites +response: false +sortname: projid +sortorder: asc +caption: <%lnProjects%> +height: 100 + +fields: + 0: + field: projid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: projname + caption: <%lnProjectName%> + width: 250 + readonly: false + align: left + + 2: + field: commentproj + caption: <%lnProjectComment%> + width: 370 + readonly: false + align: left + + 3: + field: createproj + caption: <%lnProjectDate%> + width: 150 + readonly: true + align: center + type_field: datetime + + 4: + field: proj_active + caption: <%lnProjectStatus%> + def_value: 1 + width: 80 + readonly: false + align: center + type_field: checkbox + + 5: + field: users + caption: <%lnProjectUsers%> + width: 150 + readonly: true + align: center + type_field: condition + cond: + url1: "/?adm=k2siteadmin_projusers&mode=admin&proj_id={projid}" + caption1: Пользователи + style1: " style='color:green;text-decoration:underline;' title='Пользователи' " + style2: " style = 'color:grey;' title='Пользователи' " + exp: ' $row["proj_active"] == 1 ' + url2: '#' + caption2: Пользователи diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/routine_tasks.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/routine_tasks.yml new file mode 100644 index 0000000..fdfcdf2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/routine_tasks.yml @@ -0,0 +1,79 @@ +select: SELECT r.tasksid, r.tasks, r.dataactive, r.periodicity, r.status, r.description, r.time FROM k2routine_tasks r +table: k2routine_tasks +sortname: tasks +typeid: 1 +sortorder: asc +caption: Регламентные задания + + +height: 250 +addtool_button: + 0: + caption: + title: 'Запустить задачу' + id: filtr + icon: ui-icon-play + action: startTask() + +fields: + 0: + field: tasksid + caption: ID + width: 60 + readonly: true + align: center + hidden: true +# required: true + + 1: + field: tasks + caption: Команда + width: 250 + readonly: false + align: left + + #2: + # field: dataactive + # caption: Начало + # width: 250 + # readonly: false + # align: left +# type_field: textarea + + 3: + field: periodicity + caption: Период + width: 100 + readonly: false + align: center + type_field: DropDown + multy: false + sql: SELECT time as k, name as v + FROM k2routine_time ORDER BY sort asc + + + 4: + field: status + caption: Статус + width: 100 + readonly: false + align: center + type_field: checkbox + + 5: + field: description + caption: Описание + width: 100 + readonly: false + align: center + + 6: + field: time + caption: Дата выполнения + width: 100 + readonly: false + type_field: datetime + + + + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/site.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/site.yml new file mode 100644 index 0000000..423d126 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/site.yml @@ -0,0 +1,82 @@ +select: SELECT siteid, site_alias, domainname, projid, addurl, langid, site_active FROM k2sites + +# Указывает, что есть master-таблица +getmaster: true +masterid: projid + +where: "WHERE (projid='{masterid}')" +height: 450 +table: k2sites +sortname: siteid +sortorder: asc +caption: <%lnSitesList%> + +fields: + 0: + field: siteid + caption: ID + width: 40 + readonly: true + align: center + + 1: + field: domainname + caption: <%lnDomainName%> + width: 250 + readonly: false + align: left + + 2: + field: site_alias + caption: Алиасы + width: 150 + readonly: false + align: center + type_field: textarea + + 3: + field: addurl + caption: <%lnAdditionalUrl%> + width: 250 + readonly: false + align: left + + 4: + field: langid + caption: <%lnLanguageTag%> + width: 140 + readonly: false + type_field: DropDown + multy: false + sql: + SELECT langid as k, langname as v + FROM k2lang + + 5: + field: site_active + caption: <%lnSiteStatus%> + width: 80 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + 6: + field: templates + caption: <%lnSiteTemplate%> + width: 150 + + readonly: true + align: center + type_field: condition + + def_value: ru + + cond: + url1: "/?adm=k2siteadmin_templates&mode=admin&site_id={siteid}" + caption1: Шаблоны + style1: " style='color:green;text-decoration:underline;' title='Шаблоны' " + style2: " style = 'color:grey;' title='Шаблоны' " + exp: "$row['site_active'] == 1" + url2: "/?adm=k2siteadmin_templates&site_id={siteid}" + caption2: Шаблоны diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/social.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/social.yml new file mode 100644 index 0000000..25f0ced --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/social.yml @@ -0,0 +1,51 @@ +select: SELECT socid, soc_name, soc_link, soc_icon, active FROM k2social +table: k2social +sortname: socid +typeid: 1 +sortorder: asc +caption: Социальные иконки + + +height: 250 + + +fields: + 0: + field: socid + caption: ID + width: 60 + readonly: true + align: center + hidden: true +# required: true + + 1: + field: soc_name + caption: Имя + width: 250 + readonly: false + align: left + + 2: + field: soc_link + caption: Ссылка + width: 250 + readonly: false + align: left +# type_field: textarea + + 3: + field: soc_icon + caption: Иконка + width: 100 + readonly: false + align: center + + 12: + field: active + caption: Актив. + width: 50 + readonly: false + align: center + type_field: checkbox + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2siteadmin/res/users_proj.yml b/k2shop/k2shop/app/app/k2/k2siteadmin/res/users_proj.yml new file mode 100644 index 0000000..f7ab62f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2siteadmin/res/users_proj.yml @@ -0,0 +1,62 @@ +select: <%sel%> +table: k2projrole +sortname: projid +sortorder: asc +caption: "<%lnUsers%>: <%projid%>" +fields: + 0: + field: projroleid + caption: ID + width: 60 + readonly: true + align: center + + 1: + field: projid + caption: ID проекта + width: 60 + readonly: false + align: center + def_value: <%projid%> + hidden: true + + 2: + field: user_id + caption: <%lnUserName%> + width: 250 + readonly: false + type_field: DropDown + multy: false + sql: SELECT user_id as k, login as v FROM k2users + + 2: + field: isadmin + caption: <%lnIsAdmin%> + width: 120 + readonly: false + align: center + type_field: checkbox + + 3: + field: r + caption: <%lnReadPermittion%> + width: 100 + readonly: false + align: center + type_field: checkbox + + 4: + field: w + caption: <%lnWritePermittion%> + width: 100 + readonly: false + align: center + type_field: checkbox + + 5: + field: role_active + caption: <%lnRoleActive%> + width: 100 + readonly: false + align: center + type_field: checkbox diff --git a/k2shop/k2shop/app/app/k2/k2sitemap/k2sitemap.php b/k2shop/k2shop/app/app/k2/k2sitemap/k2sitemap.php new file mode 100644 index 0000000..a5ca8d8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sitemap/k2sitemap.php @@ -0,0 +1,505 @@ + 'board_connection']; + + public $changefreq = 'daily'; + + public $head_m_tpl = ' + '; + + public $item_m_tpl = ' + {url} + '; + + + public $head_tpl = ' + '; + + + + + public $item_tpl = ' + {url} + {date} + daily + 1.00 + '; + + + + + + + public function buildSitemap() { + + global $k2; + + $rez = ''; + + $act = $k2->get('act'); + + header ("content-type: text/xml"); + + //sitemap for shop +// if ($act == 'db') { +// $s_map = $this->buildAdsSm($k2->get('cat')); +// } else if ($act == 'cat') { +// $s_map = $this->buildCatSm(); +// } else { +// $s_map = $this->buildMainSm(); +// } + + + $s_map = $this->buidContSm(); + //print_r($s_map); + $rez = $s_map; + + return $rez; + } + + function getMenuitems() + { + global $k2; + + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->sel("SELECT m.k2menuitemid, m.caption, m.command + FROM k2menuitems m + WHERE (1=1) AND m.active = 1 AND m.langid = 'ru'", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + $rez['rez'] = $r['data']; + + return $rez; + } + + function getMethoditems() + { + global $k2; + + $rez = ['rez'=>'', 'err'=>'']; + + $r = $k2->sql->sel("SELECT + m.moveid, + m.movename, + m.movecounts, + m.starts_with, + m.rueda_move, + m.based_on, + m.translation, + m.rueda_sign, + m.signature, + m.synonyms, + m.description, + m.levelid, + l.levelname + FROM salsa_moves m + LEFT JOIN salsa_level l + ON m.levelid = l.levelid + ", + []); + + $rez['rez'] = $r['data']; + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + $rez['rez'] = $r['data']; + + return $rez; + } + + function getPartners($partnertypeid = '') + { + global $k2; + $rez = ['rez'=>'', 'err'=>'']; + + $where = ''; + + $r = $k2->sql->sel("SELECT + p.partnerid, + p.slug + FROM salsa_partners p + + WHERE p.partnertypeid = $partnertypeid + + + ", + []); + + $rez['rez'] = $r['data']; + + return $rez; + } + + function getContents($in_cat) + { + global $k2; + + $rez = ['rez'=>'', 'err'=>'']; + //$a = array_map('strval', $in_cat); + $str_cat = '"'.implode('", "', array_map('strval', $in_cat)).'"'; + + $r = $k2->sql->sel("SELECT c.contentid, c.slug, c.command + FROM k2content c + WHERE (1=1) AND c.active = 1 AND c.langid = 'ru' AND c.slug <> 'null' AND c.command IN (".$str_cat.") ", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + $rez['rez'] = $r['data']; + + return $rez; + } + + function buidContSm() + { + global $k2; + $rez = ''; + + $s_map = $this->head_tpl."\r\n"; + $in_cat = []; + + $arr_link = $this->getMenuitems(); + + foreach ($arr_link['rez'] as $value) { + $s_map .= $this->item_tpl."\r\n"; + $titleTr = '/p/'.$this->transLit($value['caption']); + if ($value['command'] !== '' && $value['command'] !== null ) { + $titleTr = '/p/'.$this->transLit($value['command']); + array_push($in_cat, $value['command']); + } + $titleTr = str_replace('&', '&', $titleTr); + $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr, $s_map); + $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); + } + + //$in_cat = ['stati','novosti','kluby']; + + $arr_cont = $this->getContents($in_cat); + + foreach ($arr_cont['rez'] as $value) { + $s_map .= $this->item_tpl."\r\n"; + $titleTr = '/p/'.$value['command'].'/item/'.$value['slug']; + $titleTr = str_replace('&', '&', $titleTr); + $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr, $s_map); + $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); + } + +// $arr_meth = $this->getPartners(1); +// +// foreach ($arr_meth['rez'] as $value) { +// $s_map .= $this->item_tpl."\r\n"; +// $titleTr = '/p/partnery/item/'.$value['slug']; +// +// $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr, $s_map); +// $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); +// } +// +// $arr_meth = $this->getPartners(2); +// +// foreach ($arr_meth['rez'] as $value) { +// $s_map .= $this->item_tpl."\r\n"; +// $titleTr = '/p/partnershi/item/'.$value['slug']; +// $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr, $s_map); +// $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); +// } +// +// $arr_meth = $this->getPartners(3); +// +// foreach ($arr_meth['rez'] as $value) { +// $s_map .= $this->item_tpl."\r\n"; +// $titleTr = '/p/shkola/item/'.$value['slug']; +// $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr, $s_map); +// $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); +// } +// +// $arr_meth = $this->getMethoditems(); +// +// foreach ($arr_meth['rez'] as $value) { +// $s_map .= $this->item_tpl."\r\n"; +// $titleTr = '/p/metodologiya/move/'.$value['movename']; +// //$titleTr = str_replace(' ', '-', $titleTr); +// $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr, $s_map); +// $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); +// } + + $s_map .= ''; + + $rez = $s_map; + return $rez; + } + + function buildAdsSm($cat) + { + global $k2; + $rez = ''; + + $s_map = $this->head_tpl."\r\n"; + + $arr_cat = $this->getArrLinks(); + + $in_cat = $this->arrCat($arr_cat, $cat); + + if (count($in_cat) == 0) { + $in_cat = [$cat]; + } + + $arr_tov = $this->getAds($in_cat); + + foreach ($arr_tov['rez'] as $value) { + $s_map .= $this->item_tpl."\r\n"; + $titleTr = '/messages/'.$value['id'].'-'.$this->transLit($value['title']); + $titleTr = str_replace('&', '&', $titleTr); + $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().$titleTr.'.html', $s_map); + $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); + } + + $s_map .= ''; + + $rez = $s_map; + return $rez; + } + + function transLit($str) + { + global $k2; + + $rez = ''; + + $str = $k2->sys->rus2translit($str); + + $str = str_replace(' ', '-', $str); + + //массив заменяемых символов + $arr = ['%',':',"'",',','+','(',')']; + + $str = str_replace($arr, '', $str); + + $str = strtolower($str); + + $rez = $str; + + return $rez; + } + + function buildCatSm() + { + global $k2; + $rez = ''; + + // указываем заголовок XML документа + $s_map = $this->head_tpl."\r\n"; + + // указываем главную страницу сайта + $s_map .= $this->item_tpl."\r\n"; + $s_map = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $s_map); + $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain(), $s_map); + // тут нужно получить ссылку на страницу + $arr_cat = $this->getArrLinks(); + + $s_map .= $this->view_cats($arr_cat); + + $s_map .= ''; + + + $rez = $s_map; + return $rez; + } + + function buildMainSm() + { + global $k2; + $rez = ''; + // указываем заголовок XML документа + $s_map = $this->head_m_tpl."\r\n"; + + $s_map .= $this->item_m_tpl."\r\n"; + $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().'/sitemap.xml?act=cat', $s_map); + + $arr_cat = $this->getArrLinks(); + + foreach ($arr_cat[0] as $value) { + + $in_cat = $this->arrCat($arr_cat, $value['id']); + foreach ($in_cat as $value) { + if ($value !== '101') { + $s_map .= $this->item_m_tpl."\r\n"; + $s_map = str_replace('{url}', $k2->proto.'://'.$k2->domain().'/sitemap.xml?act=db&cat='.$value, $s_map); + } + + } + + } + + $s_map .= ''; + + $rez = $s_map; + return $rez; + } + + + function getAds($arr_cat = []) + { + global $k2; + + + $k2->sql->db = $this->db; + $rez = ['rez'=>'', 'err'=>'']; + + + + $incat = ''; + if ($arr_cat !== []) { + $incat = " AND m.cat IN (".implode(',', array_map('intval', $arr_cat)) .")"; + //$par = array_merge($par, ['cat'=>$cat]); + } + + + + + $r = $k2->sql->sel("SELECT m.id, m.title, m.cat + FROM eboard_db m + + WHERE (1=1) $incat LIMIT 300", + $par); + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + + $rez['rez'] = $r['data']; + + return $rez; + } + + function arrCat($arr_cat, $cat) { + $cat_arr = [$cat]; + foreach ($arr_cat[$cat] as $row){ + array_push($cat_arr, $row['id']); + foreach ($arr_cat[$row['id']] as $row){ + array_push($cat_arr, $row['id']); + } + } + return $cat_arr; + } + + function view_cats($arr, $parent_id = 0, $uri = '') { + global $k2; + $rez = ''; + //Условия выхода из рекурсии + if(empty($arr[$parent_id])) { + return; + } + + for($i = 0; $i < count($arr[$parent_id]);$i++) { + + $rez .= $this->item_tpl; + + $newid = $arr[$parent_id][$i]['id']; + $sub = ''; + + $url = $uri.'/'.$arr[$parent_id][$i]['uri']; + + $count = count($arr[$newid]); + if ($count > 0) { + + $sub .= $this->view_cats($arr,$newid,$url); + + } + + $caturl = $k2->surl->SefURL_FromURL($url); + + $rez = $rez.$sub; + + $rez = str_replace('{url}', $k2->proto.'://'.$k2->domain().$caturl, $rez); + $rez = str_replace('{date}', date("Y-m-d\TH:i:s+02:00"), $rez); + + + } + + return $rez; + } + + function getArrLinks() + { + global $k2; + + + $k2->sql->db = $this->db; + $rez = ['rez'=>'', 'err'=>'']; + + + + $r = $k2->sql->sel("SELECT c.id, c.uri, c.name, c.parent, c.img, c.sort, c.description + + FROM eboard_cat c + + ORDER BY c.sort + ",[]); + $arr_cat = []; + + if($r['err'] !== ''){ + $k2->log->err('Ошибка: '.$r['err']); + $rez['err'] = $err['err']; + return $rez; + } + //преобразовываем полученнный массив + foreach ($r['data'] as $row){ + if(empty($arr_cat[$row['parent']])) { + $arr_cat[$row['parent']] = []; + } + $arr_cat[$row['parent']][] = $row; + } + + $rez['rez'] = $r['data']; + + return $arr_cat; + } + + + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2sitemap/res/info.yml b/k2shop/k2shop/app/app/k2/k2sitemap/res/info.yml new file mode 100644 index 0000000..d266999 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sitemap/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2sitemap" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2sociallink/k2sociallink.php b/k2shop/k2shop/app/app/k2/k2sociallink/k2sociallink.php new file mode 100644 index 0000000..c7ada89 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sociallink/k2sociallink.php @@ -0,0 +1,61 @@ + + {links} + '; + public $onelink_tpl = ''; + + + + function getSocial () + { + global $k2; + $k2->sql->db = $this->db; + $r = $k2->sql->sel("select soc_name, soc_link, soc_icon + from k2social + where active = 1", + []); + + $rez = $r['data']; + + return $rez; + } + + function formSocLinks () + { + global $k2; + $rez = ''; + $soc = $this->getSocial(); + + $rez = $this->social_tpl; + + foreach ($soc as $value) { + $onelink .= $this->onelink_tpl; + $onelink = str_replace('{soc_icon}', $value['soc_icon'], $onelink); + $onelink = str_replace('{soc_link}', $value['soc_link'], $onelink); + } + $rez = str_replace('{links}',$onelink, $rez); + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2sociallink/res/info.yml b/k2shop/k2shop/app/app/k2/k2sociallink/res/info.yml new file mode 100644 index 0000000..a095e59 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2sociallink/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2sociallink" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2struct/k2struct.php b/k2shop/k2shop/app/app/k2/k2struct/k2struct.php new file mode 100644 index 0000000..c6260f4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2struct/k2struct.php @@ -0,0 +1,994 @@ + + "CREATE TABLE {tablename} ({field_format}) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='{comment}';", + + 'sym' => '`', + + 'field_format' => ' {fieldname} {fieldtype} {not_null} {def_value}{coma}', + + 'primary_index' => + 'ALTER TABLE {tablename} + ADD PRIMARY KEY ({primary_field}), + ADD UNIQUE KEY {primary_field} ({primary_field}){add_keys};', + + 'fk_index' => + 'ALTER TABLE {tablename} ADD INDEX({fieldname});', + + 'add_keys' => ' ADD KEY {keyname} ({fieldname})', + + 'autoincrement' => + 'ALTER TABLE {tablename} + MODIFY {fieldname} {fieldtype} {not_null} AUTO_INCREMENT, AUTO_INCREMENT={begin_num};' + + ];*/ + + + public $packs = ['k2']; + + /** + * Пример создания таблицы: + * CREATE TABLE agro_declarac ( + declareid varchar(75) NOT NULL, + docdate date DEFAULT NULL, + docnum int(11) DEFAULT NULL, + firmid varchar(75), + username varchar(75), + datecreate datetime, + model varchar(75), + year_vipusk int(11) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; + * + * Пример создания первичного индекса: + * ALTER TABLE agro_declarac + ADD PRIMARY KEY (declareid), + ADD UNIQUE KEY declareid (declareid); + + Пример создания первичного и вторичного индекса: + ALTER TABLE ajax_chat_bans + ADD PRIMARY KEY (userID), + ADD KEY userName (userName), + ADD KEY dateTime (dateTime); + * + * Пример создания авто-инкрементного поля: + ALTER TABLE `k2temp` + MODIFY `tempid` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; + + */ + + function init_obj(){ + $this->temp_sql=$this->loadResYML('mysql', false); + + } + + + // SQL для создания таблицы из YML + // $arr - информация о структуре базы данных + // $tablename - назвние таблицы базы данных + function createTableSQLFromYML($tablename, $arr){ + global $k2; + $rez=''; + + $rez=$this->temp_sql['create_table']."\n\n"; + + $fields=''; + // Формирование перечня полей + // Пример массива полей: + // zajavk_num + // Array + // ( + // [Type] => varchar(75) + // [IsNull] => YES + // [IsKey] => + // [Def] => + // [Extra] => + // ) + // + foreach ($arr['fields'] as $k=>$v){ + $tmp=$this->temp_sql['field_format']; + + + $tmp=str_replace('{fieldname}', $k, $tmp); + $tmp=str_replace('{fieldtype}', $v['type'], $tmp); + + + + // Требовать обязательность заполнения + $isnull=''; + if (!$v['isNull']){ + $isnull='NOT NULL'; + } + $tmp=str_replace('{not_null}', $isnull, $tmp); + + // Заполнение значения по умолчанию + $def_val=''; + if (el($v['def'])=='' && (trim($isnull)=='')){ + $def_val='DEFAULT NULL'; + } + $tmp=str_replace('{def_value}', $def_val, $tmp); + + if ($fields<>''){ + $fields=str_replace('{coma}', ',', $fields); + }else{ + $fields="\n"; + } + + + $fields.=$tmp."\n"; + } + + $fields=str_replace('{coma}', '', $fields); + + + // Формирование индексов + // PRIMARY - первичное поле + // [k2docs_code1c_idx1] => Array + //( + // [Table] => k2docs + // [NotUnique] => 1 + // [SeqIndex] => 1 + // [Column] => code1c + // [Collation] => A + // [Cardinality] => 1 + // [Sub_part] => + // [Packed] => + // [IsNull] => YES + // [Index_type] => BTREE + // [Comment] => + // [Index_comment] => + //) + /*$primary_field=''; + $add_index=''; + foreach ($arr['indexes'] as $k=>$v){ + $ind_tmp=''; + if (trim($k)=='PRIMARY'){ + $ind_tmp=$this->temp_sql['primary_index']."\n"; + $primary_field=$v['column']; + + $ind_tmp=str_replace('{primary_field}', $primary_field, $ind_tmp)."\n"; + + }else{ + if ($primary_field<>$v['column']){ + $tmp=$this->temp_sql['add_keys']; + $tmp=str_replace('{fieldname}', $v['column'], $tmp); + $tmp=str_replace('{keyname}', $k, $tmp); + + $tmp=",\n".$tmp; + + $add_index.=$tmp; + } + + } + + $rez.=$ind_tmp; + + } */ + + $rez.=$this->createIndexes($tablename, $arr['indexes']); + + + $rez=str_replace('{add_keys}', $add_index, $rez); + + $rez=str_replace('{tablename}', $tablename, $rez); + $rez=str_replace('{field_format}', $fields, $rez); + $rez=str_replace('{comment}', el($arr['caption']), $rez); + + return $rez; + } + + + // Создание индексов + function createIndexes($tablename, $index_arr){ + global $k2; + $rez=''; + + // Формирование индексов + // PRIMARY - первичное поле + // [k2docs_code1c_idx1] => Array + //( + // [Table] => k2docs + // [NotUnique] => 1 + // [SeqIndex] => 1 + // [Column] => code1c + // [Collation] => A + // [Cardinality] => 1 + // [Sub_part] => + // [Packed] => + // [IsNull] => YES + // [Index_type] => BTREE + // [Comment] => + // [Index_comment] => + //) + $primary_field=''; + $add_index=''; + + + foreach (/*$arr['indexes']*/$index_arr as $k=>$v){ + $ind_tmp=''; + if (trim($k)=='PRIMARY'){ + $ind_tmp=$this->temp_sql['primary_index']."\n"; + $primary_field=$v['column']; + + $ind_tmp=str_replace('{primary_field}', $primary_field, $ind_tmp)."\n"; + + }else{ + + //var_dump($v); + + $ind_tmp=$this->temp_sql['fk_index']."\n"; + $ind_tmp=str_replace('{fieldname}', $v['column'], $ind_tmp); + $ind_tmp=str_replace('{tablename}', $tablename, $ind_tmp); + + + /* + 'fk_index' => + 'ALTER TABLE {index_name} ADD PRIMARY KEY ({primary_field}), {add_keys};', + + ALTER TABLE `dp2act_pop_ocen` ADD INDEX(`order_ins`); + 'ALTER TABLE {index_name} ADD INDEX({fieldname});', + */ + + + /*if ($primary_field<>$v['column']){ + $tmp=$this->temp_sql['add_keys']; + $tmp=str_replace('{fieldname}', $v['column'], $tmp); + $tmp=str_replace('{keyname}', $k, $tmp); + + $tmp=",\n".$tmp; + + $add_index.=$tmp; + } */ + + } + + $rez.=$ind_tmp; + + } + + + + return $rez; + } + + + + + // Сравнение таблиц массив + function compareArr($tablename, $yml_arr, $db_arr){ + global $k2; + $rez=''; + $compare_arr=['fields'=>[], 'indexes'=>[]]; + + if (!isset($yml_arr['fields'])){ + $compare_arr['fields']=$yml_arr['fields']; + } + + // Сравнение структуры таблицы + foreach ($yml_arr['fields'] as $k=>$v){ + + // Если вообще нет поля + if (!isset($db_arr['fields'][$k])){ + $compare_arr['fields'][$k]=$v; + $compare_arr['fields'][$k]['operac']='add'; + } + + // Проверяем соответствие типов данных + elseif(($db_arr['fields'][$k]['type']<>$v['type']) or ( trim($db_arr['fields'][$k]['def'])<>trim($v['def']) ) + or (trim($v['def'])=='' && trim($db_arr['fields'][$k]['def'])<>'') + ){ + $compare_arr['fields'][$k]=$v; + $compare_arr['fields'][$k]['operac']='alter'; + $compare_arr['fields'][$k]['old']='type='.$db_arr['fields'][$k]['type'].' def='.$db_arr['fields'][$k]['def']; + $compare_arr['fields'][$k]['old_def']=$db_arr['fields'][$k]['def']; + $compare_arr['fields'][$k]['old_type']=$db_arr['fields'][$k]['type']; + } + + } + + + if (!isset($yml_arr['indexes'])){ + $compare_arr['indexes']=$yml_arr['indexes']; + } + + // Сравнение структуры индексов + foreach ($yml_arr['indexes'] as $k=>$v){ + // Если вообще нет поля + if (!isset($db_arr['indexes'][$k])){ + $compare_arr['indexes'][$k]=$v; + $compare_arr['indexes'][$k]['operac']='add'; + } + + // Проверяем соответствие типов данных + elseif(($db_arr['indexes'][$k]['column']<>$v['column']) or ($db_arr['indexes'][$k]['comment']<>$v['comment'])){ + $compare_arr['indexes'][$k]=$v; + $compare_arr['indexes'][$k]['operac']='alter'; + } + + } + + + + $rez=$compare_arr; + + + return $rez; + + } + + + + + // Обновление таблицы, SQL + function updateTableSQL($tablename, $yml_arr, $db_arr){ + global $k2; + $rez=''; + + $compare_arr=$this->compareArr($tablename, $yml_arr, $db_arr); + + // Формирование SQL + foreach ($compare_arr['fields'] as $k=>$v){ + + $temp=''; + + if ($v['operac']=='alter'){ + $temp=$this->temp_sql['alter_table']; + $temp= str_replace('{tablename}', $tablename, $temp); + $temp= str_replace('{fieldname}', $k, $temp); + $temp= str_replace('{fieldtype}', $v['type'], $temp); + + $def=''; + if ($v['def']=='' /*&& $v['isNull']*/ && $v['old_def']<>$v['def'] && $v['type']<>'timestamp' ){ + + //if ($v['type']=='integer'){ + // $def='DEFAULT 0'; + //}else{ + $def='DEFAULT NULL'; + //} + + }elseif ($v['def']=='CURRENT_TIMESTAMP'){ + $def="DEFAULT ".el($v['def']).""; + }elseif ($v['def']<>'' && $v['type']<>'timestamp'){ + $def="DEFAULT '".el($v['def'])."'"; + } + + if ($def<>''){ + $temp= str_replace('{def_value}', $def, $temp); + $rez.="/* Было: ".$v['old']." */\n"; + $rez.=$temp."\n\n"; + } + + + }elseif ($v['operac']=='add'){ + $temp=$this->temp_sql['add_table']; + $temp= str_replace('{tablename}', $tablename, $temp); + $temp= str_replace('{fieldname}', $k, $temp); + $temp= str_replace('{fieldtype}', $v['type'], $temp); + + $def=''; + if ($v['def']=='' /*&& $v['isNull']*/ && $v['old_def']<>$v['def'] && $v['type']<>'timestamp'){ + + //if ($v['type']=='integer'){ + // $def='DEFAULT 0'; + //}else{ + $def='DEFAULT NULL'; + //} + + }elseif ($v['def']=='CURRENT_TIMESTAMP'){ + $def="DEFAULT ".el($v['def']).""; + }elseif ($v['def']<>'' && $v['type']<>'timestamp'){ + $def='DEFAULT '.el($v['def'])."'"; + } + + if ($def<>''){ + $temp= str_replace('{def_value}', $def, $temp); + $rez.=$temp."\n\n"; + } + } + + + } + + + // Формирование индексов + //var_dump($compare_arr['indexes']); + $rez.=$this->createIndexes($tablename, $compare_arr['indexes']); + + /*foreach ($compare_arr['indexes'] as $k=>$v){ + + if ($v['operac']=='alter'){ + + + }elseif ($v['operac']=='add'){ + + + } + + }*/ + + + + + + return $rez; + } + + + + // Получение названия текущей базы данных + function getCurrentDB(){ + global $k2; + $rez=''; + + $sql_rez=$k2->sql->sel('SELECT DATABASE();'); + + if (trim($sql_rez['err'])<>''){ + echo 'Возникла ошибка: '.$sql_rez['err']; + }else{ + $rez=$sql_rez['data'][0][0]; + } + + return $rez; + } + + + // Получение перечня таблиц + function getTables(){ + global $k2; + $rez=''; + $sql_rez=$k2->sql->sel('SHOW TABLES;'); + + if (trim($sql_rez['err'])<>''){ + echo 'Возникла ошибка: '.$sql_rez['err']; + }else{ + $rez=[]; + foreach ($sql_rez['data'] as $el){ + $rez[]=$el[0]; + } + } + + + return $rez; + } + + + + // Получение информации о полях + function getFields($tablename){ + global $k2; + $rez=''; + $sql_rez=$k2->sql->sel("DESCRIBE $tablename;"); + + if (trim($sql_rez['err'])<>''){ + echo 'Возникла ошибка: '.$sql_rez['err']; + return $rez; + }else{ + $rez=[]; + foreach ($sql_rez['data'] as $el){ + // События для формы + $new_el['caption']=''; + $new_el['visible']=true; + $new_el['hidden']=false; + $new_el['width']=100; + + //$new_el['Field']=$el['Field']; + $new_el['type']=$el['Type']; // Тип поля. Примеры: int(11), date, varchar(75), decimal(15,2), datetime + $new_el['isNull']=$el['Null']=='YES'; // YES, NO + $new_el['isKey']=$el['Key']; // PRI - первичное поле, MUL - вторичное поле + $new_el['def']=$el['Default']; + $new_el['extra']=$el['Extra']; // Тут отмечается, если автоинткрементное поле auto_increment + + $rez[$el['Field']]=$new_el; + // $new_el['Field'] + } + } + + return $rez; + } + + + // Получение информации о индексах + function getIndexes($tablename){ + global $k2; + $rez=''; + $sql_rez=$k2->sql->sel("SHOW INDEX FROM $tablename;"); + + //var_dump($sql_rez); + + if (trim($sql_rez['err'])<>''){ + echo 'Возникла ошибка: '.$sql_rez['err']; + return $rez; + }else{ + $rez=[]; + + foreach ($sql_rez['data'] as $el){ + $new_el['table']=$el['Table']; + $new_el['notUnique']=$el['Non_unique']; // 0 - уникальное, 1 - не уникальное + + $new_el['seqIndex']=$el['Seq_in_index']; + $new_el['column']=$el['Column_name']; + $new_el['collation']=$el['Collation']; + $new_el['cardinality']=$el['Cardinality']; + $new_el['sub_part']=$el['Sub_part']; + $new_el['packed']=$el['Packed']; + $new_el['isNull']=$el['Null']; + $new_el['index_type']=$el['Index_type']; + $new_el['comment']=$el['Comment']; + $new_el['index_comment']=$el['Index_comment']; + + $rez[$el['Key_name']]=$new_el; + + } + } + + + return $rez; + + } + + + // Возвращает название yml-файла + /*!!!function getFilenameYml($filename){ + global $k2; + $rez=nslashe($k2->rootdir.'/k2shop/k2shop/metadata/'.$filename.'.yml'); + return $rez; + }*/ + + + // Формирует массив с описанием метаданных базы данных + function getMetaDataDB($tablename){ + global $k2; + $arr=''; + $fields=$this->getFields($tablename); + + if ($fields<>''){ + $indexes=$this->getIndexes($tablename); + + $arr=[ 'table'=>$tablename, + 'caption'=>'', + 'fields'=>$fields, + 'indexes'=>$indexes + ]; + } + + return $arr; + } + + + // Сохранение в yml (реверсинжиниринг) + // https://symfony.com/doc/current/components/yaml.html#content_wrapper + function saveToYml($tablename){ + global $k2; + echo "Сохранение в yml таблицы ".$tablename."\n"; + $filename=$this->findYML($tablename); // getFilenameYml + echo 'Путь: '.$filename."\n"; + + $arr=$this->getMetaDataDB($tablename); + + // Yaml::DUMP_OBJECT , 2, 4, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK + $yaml = Yaml::dump($arr, 3); + + if (file_exists($filename)){ + echo "Файл $filename уже существует. Операция отменена."; + }else{ + file_put_contents($filename, $yaml); + } + + } + + + // Вывод на экран иформацию, полученную из YML-файла + function printYMLInfo($arr){ + global $k2; + + echo "Выводим информацию о таблицах в YML:\n"; + $k2->sys->echo_arr_multy($arr['fields'], true, 20); + + echo "\n"; + + echo "Выводим информацию о индексах в YML:\n"; + $k2->sys->echo_arr_multy($arr['indexes'], true, 20); + + echo "\n"; + + } + + + // Выводит информацию из YML-файла + function infoFromYML($filename){ + global $k2; + $rez=''; + + $file=$this->findYML($filename); + + if (file_exists($file)){ + $yml_data=$this->printYMLInfo($this->loadFromYML($file)); + } + + return $rez; + } + + + // Вывод всех таблиц в YML + function loadAllFromYml(){ + global $k2; + + //$mdir=$k2->getMetadataDir(); + //$files=$k2->sys->getFileList($mdir); + $files=$this->getFileListYML(); + + foreach ($files as $k=>$v){ + $yml = str_replace('.yml', '', $v); + $this->infoFromYML($yml); + } + } + + + // Сохранение всех таблиц в YML + function saveAllToYml(){ + global $k2; + + $tables=$this->getTables(); + + foreach ($tables as $k=>$v){ + $this->saveToYml($v); + } + } + + // Изменение кодировки во всех таблицах + function convertUTFAll(){ + global $k2; + + $tables=$this->getTables(); + + foreach ($tables as $k=>$v){ + $this->convertTable($v); + } + } + + + // Изменение кодировки в таблице + function convertTable ($tablename) + { + global $k2; + $sql = $this->temp_sql['convert_table']; + $sql= str_replace('{tablename}', $tablename, $sql); + + $rez=$sql; + + echo $sql."\n\n"; + + echo "/* Результат выполнения SQL...*/ \n\n"; + + $err=$k2->sql->runScript($sql); + + echo $err."\n\n"; + + echo "/* Выполнение SQL завершено.*/\n\n"; + + return $rez; + } + + // Изменение кодировки в полях таблицы + function convertUTF($tablename){ + global $k2; + + $fields=$this->getFields($tablename); + + foreach ($fields as $k=>$v){ + $this->convertField($tablename, $k); + } + } + + + // Изменение кодировки в поле + function convertField ($tablename, $fieldname) + { + global $k2; + $sql = $this->temp_sql['convert_fields']; + $sql= str_replace('{tablename}', $tablename, $sql); + $sql= str_replace('{fieldname}', $fieldname, $sql); + + $rez=$sql; + + echo $sql."\n\n"; + + echo "/* Результат выполнения SQL...*/ \n\n"; + + $err=$k2->sql->runScript($sql); + + echo $err."\n\n"; + + echo "/* Выполнение SQL завершено.*/\n\n"; + + return $rez; + } + + + + + // Проверяем наличие файла YML + // $filename - название файла без расширения файла + function findYML($filename){ + global $k2; + $rez=''; + + $rez=$this->findYMLDir($k2->getMetadataDir(), $filename); + + /*$mdir=$k2->getMetadataDir(); + $file=nslashe($mdir.$filename.'.yml'); + + if (file_exists($file)){ + $rez=$file; + } + + + foreach ($this->packs as $k=>$v){ + $file=nslashe($mdir.$v.'/'.$filename.'.yml'); + + if (file_exists($file)){ + $rez=$file; + } + }*/ + + return $rez; + } + + // Ищет мета-данные для построения таблицы просмотра + function findYMLView($filename){ + global $k2; + $rez=''; + + $rez=$this->findYMLDir($k2->getMetadataViewDir(), $filename); + + return $rez; + } + + + + + + // $dir - корневой каталог, в котором производится поиск мета-данных + function findYMLDir($dir, $filename){ + global $k2; + $rez=''; + + $mdir=/*$k2->getMetadataDir()*/$dir; + $file=nslashe($mdir.$filename.'.yml'); + + if (file_exists($file)){ + $rez=$file; + } + + + foreach ($this->packs as $k=>$v){ + $file=nslashe($mdir.$v.'/'.$filename.'.yml'); + + if (file_exists($file)){ + $rez=$file; + } + } + + return $rez; + } + + + + + // Создание полной структуры для указанной таблицы (файла yml) + // $filename - название Yml-файла без раширения. + function createSQLYml($filename){ + global $k2; + $sql=''; + + $file=$this->findYML($filename); + //echo 'YML-файл: '.$file."\n"; + + $arr=$this->loadFromYML($file); + + //var_dump($arr); + + $sql=$this->createTableSQLFromYML($filename, $arr); + + //echo $sql.'
      '; + + return $sql; + } + + + // Загрузка описания из YML. + // $filename - название yml-файла с полным путем + function loadFromYML($filename){ + global $k2; + $rez=''; + + //$file_yml=$this->getFilenameYml($filename); + + if (file_exists(/*$file_yml*/$filename)){ + $rez=$k2->loadFromYml(/*$file_yml*/$filename); + } + + return $rez; + + } + + + // Возвращает список всех YML-файлов + function getFileListYML($pack = ''){ + global $k2; + + $mdir=$k2->getMetadataDir(); + if ($pack !== '') { + $mdir=$k2->getMetadataDirPack('k2'); + } + + $files=$k2->sys->getFileList($mdir); + + //var_dump($this->packs); + + foreach ($this->packs as $k=>$v){ + $mkdir_pack=nslashe($mdir.$v); + $files2=$k2->sys->getFileList($mkdir_pack); + $files = array_merge($files, $files2); + } + + return $files; + } + + + + + // Создание структуры создания таблиц и индексов для всех YML-файлов + function createSQLAllYml(){ + global $k2; + + $files=$this->getFileListYML(); + //var_dump($files); + + foreach ($files as $k=>$v){ + if (stripos($v,'.yml')<>FALSE){ + $yml = str_replace('.yml', '', $v); + $this->createSQLYml($yml); + } + } + } + + // Создание структуры создания таблиц и индексов для всех YML-файлов + function createNewSQLAllYml(){ + global $k2; + + $files=$this->getFileListYML($this->packs); + //var_dump($files); + + foreach ($files as $k=>$v){ + if (stripos($v,'.yml')<>FALSE){ + $yml = str_replace('.yml', '', $v); + $sql = $this->createSQLYml($yml); + $err=$k2->sql->runScript($sql); + //echo $err; + } + } + } + + + // Сравнение метаданных и формирование SQL + function compareSQL($filename){ + global $k2; + + + $file=$this->findYML($filename); + + $sql='/* '.$file." */\n"; + echo $sql; + + + if (file_exists($file)){ + $yml_arr=$this->loadFromYML($file); + $db_arr=$this->getMetaDataDB($filename); + + + if ($yml_arr<>''){ + if ($db_arr==''){ + $sql.=$this->createTableSQLFromYML($filename, $yml_arr); + }else{ + $sql.=$this->updateTableSQL($filename, $yml_arr, $db_arr); + } + } + + } + + return $sql; + } + + + // Производит сравнение метаданных, формирует SQL и выполняет его + function runSQLCompare($filename){ + global $k2; + + $sql=$this->compareSQL($filename); + $rez=$sql; + + echo $sql."\n\n"; + + echo "/* Результат выполнения SQL...*/ \n\n"; + + $err=$k2->sql->runScript($sql); + + echo $err."\n\n"; + + echo "/* Выполнение SQL завершено. */ \n\n"; + + return $rez; + } + + + // Производит сравнение всех метаданных, формирует SQL и выполняет его + function runSQLCompareAll(){ + global $k2; + + $sql=$this->compareSQLAll(); + $rez=$sql; + + echo $sql."\n\n"; + + echo "/* Результат выполнения SQL...*/ \n\n"; + + $err=$k2->sql->runScript($sql); + + echo $err."\n\n"; + + echo "/* Выполнение SQL завершено.*/\n\n"; + + return $rez; + } + + + // Сравнение SQL для всех функций + function compareSQLAll(){ + global $k2; + + $sql=''; + //$mdir=$k2->getMetadataDir(); + //$files=$k2->sys->getFileList($mdir); + + $files=$this->getFileListYML(); + + //var_dump($files); + + foreach ($files as $k=>$v){ + if (stripos($v,'.yml')<>FALSE){ + $yml = str_replace('.yml', '', $v); + $sql.=$this->compareSQL($yml); + } + } + + return $sql; + } + + + + // Возвращаем контент + function content() + { + //echo 'Структура базы данных...'; + $rez='k2strunct'; + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2struct/res/info.yml b/k2shop/k2shop/app/app/k2/k2struct/res/info.yml new file mode 100644 index 0000000..386ebde --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2struct/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2struct" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2struct/res/mysql.yml b/k2shop/k2shop/app/app/k2/k2struct/res/mysql.yml new file mode 100644 index 0000000..094a37b --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2struct/res/mysql.yml @@ -0,0 +1,25 @@ +create_table: "CREATE TABLE {tablename} ({field_format}) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='{comment}';" +sym: "`" + +field_format: ' {fieldname} {fieldtype} {not_null} {def_value}{coma}' +primary_index: "ALTER TABLE {tablename} + ADD PRIMARY KEY ({primary_field}), + ADD UNIQUE KEY {primary_field} ({primary_field}){add_keys};" + +fk_index: "ALTER TABLE {tablename} ADD INDEX({fieldname});" + +add_keys: " ADD KEY {keyname} ({fieldname})" + +autoincrement: "ALTER TABLE {tablename} + MODIFY {fieldname} {fieldtype} {not_null} AUTO_INCREMENT, AUTO_INCREMENT={begin_num};" + +alter_table: "ALTER TABLE {tablename} CHANGE {fieldname} {fieldname} {fieldtype} {def_value};" +# CHARACTER SET utf8 COLLATE utf8_general_ci + +add_table: "ALTER TABLE {tablename} ADD {fieldname} {fieldtype} {def_value};" + +convert_table: "ALTER TABLE {tablename} CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci" + +convert_fields: "ALTER TABLE {tablename} CHANGE {fieldname} {fieldname} VARCHAR(250) CHARACTER SET utf8 COLLATE utf8_general_ci;" + + diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test.php b/k2shop/k2shop/app/app/k2/k2test/k2test.php new file mode 100644 index 0000000..9bf7024 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test.php @@ -0,0 +1,164 @@ + + [ 'parent' => "root", + 'name' => "k2test", + 'caption' => $this->Translate("{lnComponentTest}"), + 'iconclass'=> "fa fa-flask" + ], //Иконка для категории меню админки + + 'elements' => [ + [ 'name' => "k2test_stimulsoft", + 'caption' => "StimulSoft Demo", + 'url' => "?adm=k2test_stimulsoft", + 'command' => ['',''] + ], + + [ 'name' => "k2test_phpgrid", + 'caption' => "PHPGrid Demo", + 'url' => "?adm=k2test_phpgrid", + 'command' => ['',''] + ], + + [ 'name' => "k2test_phpkool", + 'caption' => "PHPKool Demo", + 'url' => "?adm=k2test_phpkool", + 'command' => ['',''] + ], + [ 'name' => "k2test_demopivottable", + 'caption' => "Pivot Table", + 'url' => "?adm=k2test_demopivottable", + 'command' => ['',''] + ], + +// [ 'name' => "k2test_pdf", +// 'caption' => "PDF", +// 'url' => "?adm=k2test_pdf", +// 'command' => ['',''] +// ], +// +// [ 'name' => "k2test_pdf", +// 'caption' => "PHPExcel", +// 'url' => "?adm=k2test_phpexcel", +// 'command' => ['',''] +// ], + + // [ 'name' => "k2test_pay_demo", + // 'caption' => $this->Translate("{lnPaymentSystems}"), + // 'url' => "?adm=k2test_pay_demo", + // 'command' => ['',''] + // ], +// + [ 'name' => "k2test_vidgets_demo", + 'caption' => $this->Translate("{lnVidgets}"), + 'url' => "?adm=k2test_vidgets_demo", + 'command' => ['',''] + ], + + [ 'name' => "k2test_signature", + 'caption' => $this->Translate("{lnElectronicSignature}"), + 'url' => "?adm=k2test_signature", + 'command' => ['',''] + ], + +// [ 'name' => "k2test_test", +// 'caption' => $this->Translate("{lnTesting}"), +// 'url' => "?adm=k2test_test", +// 'command' => ['',''] +// ], +// +// [ 'name' => "k2test_upload", +// 'caption' => "Jquery Upload", +// 'url' => "?adm=k2test_upload", +// 'command' => ['',''] +// ], + [ 'name' => "k2test_wondows_demo", + 'caption' => "Windows", + 'url' => "?adm=k2test_windows_demo", + 'command' => ['',''] + ], + + [ 'name' => "k2test_api", + 'caption' => "API", + 'url' => "?adm=k2test_api", + 'command' => ['',''] + ], + + [ 'name' => "k2test_telerik", + 'caption' => 'Telerik', + 'url' => "?adm=k2test_telerik", + 'command' => ['',''] + ], + [ 'name' => "k2test_form", + 'caption' => 'Forms', + 'url' => "?adm=k2test_form_demo", + 'command' => ['',''] + ], + [ 'name' => "k2test_chat", + 'caption' => 'Chat', + 'url' => "?adm=k2test_chat", + 'command' => ['',''] + ], + [ 'name' => "k2test_sendemail", + 'caption' => 'Отправка писем', + 'url' => "?adm=k2test_sendemail", + 'command' => ['',''] + ] + ] + ] + ]; + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2test'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + + // Выводим текст файла, если demo + if (strpos($s[1], 'demo')>0){ + echo '
      Исходный текст реализации:
      '; + + $p=$k2->getScriptName($s[0], $s[1]); + $f=$p['filename']; + + $code = file_get_contents($f); + + // removed db settings + $code = preg_replace("/mysql_connect(.*)/i","mysql_connect('localhost','user','pass');",$code); + + highlight_string($code); + } + + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_api.php b/k2shop/k2shop/app/app/k2/k2test/k2test_api.php new file mode 100644 index 0000000..09fb093 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_api.php @@ -0,0 +1,173 @@ + + $(document).ready(function(){ + $("#postMessage").click(function(e){ + e.preventDefault(); + + //serialize form data + var url = $("form").serialize(); + + //function to turn url to an object + function getUrlVars(url) { + var hash; + var myJson = {}; + var hashes = url.slice(url.indexOf("?") + 1).split("&"); + for (var i = 0; i < hashes.length; i++) { + hash = hashes[i].split("="); + myJson[hash[0]] = hash[1]; + } + return JSON.stringify(myJson); + } + + //pass serialized data to function + var test = getUrlVars(url); + + //post with ajax + $.ajax({ + type:"POST", + url: "/p/api/model/k2users", + data: test, + ContentType:"application/json", + + success:function(){ + alert("successfully posted"); + }, + error:function(){ + alert("Could not be posted"); + } + + }); + }); +}); + + +//GET REQUEST + + document.addEventListener("DOMContentLoaded",function(){ + document.getElementById("getMessage").onclick=function(){ + + var req; + + var url = $("#getapi").val(); + req=new XMLHttpRequest(); + req.open("GET", url,true); + req.send(); + + req.onload=function(){ + var json=JSON.parse(req.responseText); + console.log(json); + + var html = ""; + + //loop and display data + json.forEach(function(val) { + var keys = Object.keys(val); + + html += "
      "; + keys.forEach(function(key) { + html += "" + key + ": " + val[key] + "
      "; + }); + html += "

      "; + }); + + //append in message class + document.getElementsByClassName("message")[0].innerHTML=req.responseText; + }; + }; + }); + + +
      +
      +

      Получить данные

      + +

      URL запроса

      + + + +

      Результат

      +

      Result

      +

      + +
      + + +
      +

      Отправить данные

      +
      + +
      +
      +
      +

      + + +
      +
      +
      + '; + + public function showApi() + { + $rez = $this->test_tpl; + return $rez; + } + + + // Возвращаем контент + function content() + { + global $k2; + $rez = $this->showApi(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_chat.php b/k2shop/k2shop/app/app/k2/k2test/k2test_chat.php new file mode 100644 index 0000000..1a8bfce --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_chat.php @@ -0,0 +1,28 @@ +ins_comp2('k2chat', $this); + $rez = $chat->startChat(); + //$rez = 333; + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_demopivottable.php b/k2shop/k2shop/app/app/k2/k2test/k2test_demopivottable.php new file mode 100644 index 0000000..99be8d0 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_demopivottable.php @@ -0,0 +1,497 @@ +site->addCSS('c3.min.css','//cdnjs.cloudflare.com/ajax/libs/c3/0.4.11/c3.min.css'); + $k2->site->addCSS('chosen.min.css','//cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.min.css'); + + $k2->site->addJS('d3.min.js','//cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js'); + $k2->site->addJS('plotly-basic-latest.min.js','//cdn.plot.ly/plotly-basic-latest.min.js'); + $k2->site->addJS('jquery.ui.touch-punch.min.js','//cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js'); + $k2->site->addJS('papaparse.min.js','//cdnjs.cloudflare.com/ajax/libs/PapaParse/4.1.2/papaparse.min.js'); + $k2->site->addJS('chosen.jquery.js','//cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.jquery.js'); + $k2->site->addJS('c3.min.js','//cdnjs.cloudflare.com/ajax/libs/c3/0.4.18/c3.min.js'); + + // $k2->site->addJS('pivot1.js','/k2shop/k2shop/libs/pivot_trial/codebase/pivot.js'); + + // $k2->site->addCSS('pivot1.css','/k2shop/k2shop/libs/pivot_trial/codebase/pivot.css'); + + // $k2->site->addCSS('index.css','/k2shop/k2shop/libs/pivot_trial/samples/common/index.css'); + // $k2->site->addCSS('pivot2.css','/k2shop/k2shop/libs/pivot_trial/samples/common/pivot.css'); + // $k2->site->addJS('dataset.js','/k2shop/k2shop/libs/pivot_trial/samples/common/dataset.js'); + + + $k2->site->addCSS('pivot.css','/k2shop/vendor/nicolaskruchten/pivottable/dist/pivot.css'); + $k2->site->addJS('pivot.js','/k2shop/vendor/nicolaskruchten/pivottable/dist/pivot.js'); + $k2->site->addJS('d3_renderers.js', '/k2shop/vendor/nicolaskruchten/pivottable/dist/d3_renderers.js'); + $k2->site->addJS('c3_renderers.js', '/k2shop/vendor/nicolaskruchten/pivottable/dist/c3_renderers.js'); + $k2->site->addJS('plotly_renderers.js', '/k2shop/vendor/nicolaskruchten/pivottable/dist/plotly_renderers.js'); + $k2->site->addJS('export_renderers.js', '/k2shop/vendor/nicolaskruchten/pivottable/dist/export_renderers.js'); + + + + +// ` + $k2->site->addHead('mystyle.css', ' + '); + } + + function pivotScripts(){ + + ob_start(); + ?> + + getJson(); + //$rez = str_replace('{myjson}', $myjson, $rez); + + ob_clean(); + + + return $rez; + } + + + function getJson() + { + global $k2; + + $sql = "SELECT z.zajavkid, z.typezajavid, z.zajav_date as Дата, z.mesto as Адреса, z.usercreate as Користувач, z.razmer_polya as Розмір_поля, k.Kultura as Культура, s.NameUA as Сорт, obl.OblastNameUA as Область, f.VirobnikNameUA as Виробник + + + FROM dp2_zajavka_obsteg z + + LEFT JOIN dp2Kultur k + ON z.CodKult=k.CodKult + + + LEFT JOIN dp2SortReestr s + ON z.SortID=s.SortID + + + LEFT JOIN dp2Categors c + ON z.catid=c.catid + + + LEFT JOIN dp2generation g + ON z.generationid=g.generationid + + + LEFT JOIN dp2Virobn f + ON z.firmid=f.VirobnikId + + LEFT JOIN dp2_typezajav tz + ON z.typezajavid=tz.typezajavid + + LEFT JOIN dp2StatusZajavk stat + ON z.typezajavkid=stat.typezajavkid + + LEFT JOIN dp2Oblast obl + ON z.OblastId=obl.OblastId + + LEFT JOIN dp2_dstu dstu + ON z.dstuid=dstu.dstuid + + LEFT JOIN dp2vlasn vl + ON z.vlasnid=vl.vlasnid + + + where (z.typezajavid='d6e880adc8806b00404bd29e6284fa8b') /*OR (z.typezajavid='249ef7a6ecde2b662da243eda9c16109') */ + "; + + $r = $k2->sql->sel($sql,[]); + $rez['rez'] = $r['data']; + foreach ($rez['rez'] as $key => $value) { + + foreach ($value as $keys => $val) { + if (is_int($keys)) { + unset($value[$keys]); + } + + + } + + $arr[] = $value; + } + + $output = 'OblastNameUA'.','.'typezajavid'.','.'mesto'.','.'razmer_polya'.','.'Kultura'.','.'zajav_date'. "\n"; + foreach ($arr as $key => $value) { + $output .= $value['Область'].','.$value['typezajavid'].','.$value['Адреса'].','.$value['Розмір_поля'].','.$value['Культура'].','.$value['Дата']. "\n"; + } + //$rez = file_put_contents('var/mycsv.csv', $output); + $rez = json_encode($arr); + + + $rez = file_put_contents('var/myjson.json', $rez); + + + return $rez; + } + + function showPivotTable() + { + global $k2; + + $rez = $this->pivotScripts(); + + $rez .= '
      '; + + return $rez; + } + + function showFlexibl() + { + $rez = ' + + + +
      The component will appear here
      + '; + $rez .= ''; + return $rez; + } + + function linkShow($caption, $url){ + return "

      - $caption.

      "; + } + function routePivot() + { + global $k2; + $rez = ''; + if ($k2->get('type')=='flex') { + $rez = $this->showFlexibl(); + } elseif ($k2->get('type')=='pivjs') { + $rez = $this->showPivotTable(); + } elseif ($k2->get('type')=='dhtmlx') { + //$rez = $this->showDHTMLXpivot(); + } else { + $rez .= $this->linkShow('Pivot Grid на базе KoolPHP', '/?adm=k2test_phpkool_demopivotgrid&mode=admin&temp=print'); + $rez .= $this->linkShow('Pivot Grid на базе js библиотеки pivottable.js', '/?adm=k2test_demopivottable&mode=admin&type=pivjs'); + $rez .= $this->linkShow('Pivot Grid на базе платного сервиса Flexmonster', '/?adm=k2test_demopivottable&mode=admin&type=flex'); + //$rez .= $this->linkShow('Pivot Grid на базе платной компоненты DHTMLX', '/?adm=k2test_demopivottable&mode=admin&type=dhtmlx&temp=print'); + } + + + + return $rez; + } + + + function showVuePivot() + { + $rez = ''; + $rez .= '
      {{pageName}}
      '; + $rez .= ""; + + return $rez; + } + +// function showDHTMLXpivot() +// { + +// $rez = '
      +//
      +//
      +// '; + +// return $rez; +// } + + + // Возвращаем контент + function content(){ + $rez = $this->routePivot(); + + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_form_demo.php b/k2shop/k2shop/app/app/k2/k2test/k2test_form_demo.php new file mode 100644 index 0000000..444b46d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_form_demo.php @@ -0,0 +1,137 @@ +addToHead(); + } + + + // Регистрирует необходимые библиотеки + public function addToHead(){ + global $k2; + + } + + + /** + * + * @global type $k2 + * @return type + */ + function getWindow(){ + global $k2; + $rez = ''; + + + //echo $k2->domain(); + $dialog = $k2->ins_comp2('k2form', $this); + $arr2 = [ + 'form_id' => 'change_pass', + 'table' => "k2users", + 'form_height'=>'180', + 'caption' => 'Зміна паролю', + 'fields' => [ + [ + 'field' => 'user_id', + 'caption' => 'Новий пароль', + 'width_form' => '200' + ], + [ + 'field' => 'password', + 'caption' => 'Новий пароль', + 'width_form' => '200' + ], + ['field' => 'password2', + 'caption' => 'Повторити новий пароль', + 'width_form' => '200' + ] + ] + ]; + $rez .= $dialog->showForm($arr2); + + + $grid=$k2->ins_comp2('k2phpgrid', $this); + $arr = [ + 'select' => "SELECT k.commentid, k.datecomment, k.username, k.text_comment, k.aukid, k.tablename + FROM k2comments k ", + 'table' => "k2comments", + 'autowidth'=>false, + 'width'=>'1500', + 'height'=>'600', + 'sortname' => 'commentid', + 'sortorder' => 'asc', + 'custom_form' => true, + 'caption' => 'Коментарі', + /*'is_edit' => true,*/ + 'fields' => [ + ['field' => 'commentid', + 'caption' => 'ID', + 'width' => '40', + 'readonly' => true, + 'align' => 'center' + ], + + ['field' => 'datecomment', + 'caption' => 'Дата', + 'width' => '150', + 'readonly' => false, + 'align' => 'left' + ], + + ['field' => 'username', + 'caption' => 'Імя', + 'width' => '100', + 'readonly' => false, + 'align' => 'left' + ], + + ['field' => 'text_comment', + 'caption' => 'Текст', + 'width' => '300', + 'readonly' => false, + 'align' => 'left' + ], + + ['field' => 'aukid', + 'caption' => 'ID аукціона', + 'width' => '100', + 'readonly' => false, + 'align' => 'left' + ] + ] + ]; + + + + $rez .= $grid->simpleTable($arr); + + + return $rez; + + } + + + // Возвращаем контент + function content(){ + $rez = ''; + + $rez .= $this->getWindow(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_pay_demo.php b/k2shop/k2shop/app/app/k2/k2test/k2test_pay_demo.php new file mode 100644 index 0000000..c3ce5f3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_pay_demo.php @@ -0,0 +1,58 @@ +auth->login; + // $qiwi=$k2->ins_comp('k2pay', 'qiwi'); + // $paypal=$k2->ins_comp('k2pay','paypal'); + // $liqpay=$k2->ins_comp('k2pay','liqpay'); + // $advcash=$k2->ins_comp('k2pay', 'advcash'); + // $yandexmoney=$k2->ins_comp('k2pay', 'yandexmoney'); + // $liqpay=$k2->ins_comp('k2pay', 'liqpay'); + // $paypal=$k2->ins_comp('k2pay', 'paypal'); + // $webmoney=$k2->ins_comp('k2pay', 'webmoney'); + // $interkassa=$k2->ins_comp('k2pay', 'interkassa'); + // $robokassa=$k2->ins_comp('k2pay', 'robokassa'); + // $coinify=$k2->ins_comp('k2pay', 'coinify'); + // $payeer=$k2->ins_comp('k2pay', 'payeer'); + // $payza=$k2->ins_comp('k2pay', 'payza'); + $wayforpay=$k2->ins_comp('k2pay', 'wayforpay'); + $customData = ['login' => $login]; + $rez="

      Тестирование платежных систем


      + + ".$wayforpay->payZakaz(14, 10, 'test')." + "; + return $rez; + } + + + // Возвращаем контент + function content(){ + $rez=$this->getPaySystem(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_pdf.php b/k2shop/k2shop/app/app/k2/k2test/k2test_pdf.php new file mode 100644 index 0000000..79b78c8 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_pdf.php @@ -0,0 +1,31 @@ +" + . "Примеры TCPDF: http://www.tcpdf.org/examples.php
      " + . " 
      " + . "Еще один способ генерации PDF-файлов: phpDocxFree.
      " + . "Пример использования: https://github.com/mikeschinkel/phpdocx-free/blob/master/pdf/www/examples.php"; + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpexcel.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpexcel.php new file mode 100644 index 0000000..0b8062f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpexcel.php @@ -0,0 +1,34 @@ +- $caption.

      "; + } + + + // Возвращаем контент + function content(){ + + $rez="Для генерации Excel-файлов используется библиотека PHPExcel.
      " + . "Пример использования: https://phpexcel.codeplex.com/wikipage?title=Examples&referringTitle=Home
      " + . "Описание формирования файлов на habrahabr: https://habrahabr.ru/post/245233/
      "; + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpgrid.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpgrid.php new file mode 100644 index 0000000..1ef37d9 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpgrid.php @@ -0,0 +1,30 @@ +- $caption.

      "; + } + + + // Возвращаем контент + function content(){ + $rez="Переход на демонстрационную страницу PHP Grid Demo

      "; + $rez.=$this->linkShow('Вывод таблицы тарифов из проекта трансферов с помощью таблицы phpGrid', '/?adm=k2test_phpgrid_demogrid&mode=admin'); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpgrid_demogrid.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpgrid_demogrid.php new file mode 100644 index 0000000..bd163a3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpgrid_demogrid.php @@ -0,0 +1,175 @@ +inc('k2transfermain'); + } + + // Вывод таблицы тарифов + function show_tarifs(){ + global $k2; + + $grid=$k2->ins_comp2('k2phpgrid', $this); + + $arr = [ + 'select' => "SELECT transtarifid, partner_transid, kolfrom, kolto, active, prover, nacenk_percent, nacenk_add, ismain, fromid, + toid, type_avtoid, cena, type_transferid, is_full_cityfrom, is_full_cityto + FROM k2trans_tarif", + 'table' => "k2trans_tarif", + 'sortname' => 'transtarifid', + 'sortorder' => 'desc', + 'caption' => 'Тарифы', + 'fields' => [ + ['field' => 'transtarifid', + 'caption' => 'ID', + 'width' => '40', + 'readonly' => true, + 'align' => 'center' + ], + + ['field' => 'partner_transid', + 'caption' => 'Партнер', + 'width' => '100', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'DropDown', + 'multy' => true, + 'sql' => 'select partner_transid as k, partner_name as v from k2_partner_trans order by partner_name' + ], + + ['field' => 'type_avtoid', + 'caption' => 'Тип автомобиля', + 'width' => '150', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'DropDown', + 'multy' => true, + 'sql' => "select type_avtoid as k, CONCAT(type_avto_name,' [',kolfrom,'-',kolmest,']') as v from k2type_avto" + ], + + ['field' => 'fromid', + 'caption' => 'Выезд', + 'width' => '250', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'DropDown', + 'multy' => true, + 'sql' => "select p.punktid as k, REPLACE(CONCAT(k.countryname,'|',c.cityname,'|',p.punkt_name),',','.') as v + from k2punkts p + + join k2city c + on p.cityid=c.cityid + + join k2country k + on c.countryid=k.countryid + + where (trim(p.punkt_name)<>'')" + ], + + ['field' => 'is_full_cityfrom', + 'caption' => 'Весь город С', + 'width' => '30', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'checkbox' + ], + + ['field' => 'toid', + 'caption' => 'Прибытие', + 'width' => '250', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'DropDown', + 'sql' => "select p.punktid as k, REPLACE(CONCAT(k.countryname,'|',c.cityname,'|',p.punkt_name),',','.') as v + from k2punkts p + + join k2city c + on p.cityid=c.cityid + + join k2country k + on c.countryid=k.countryid + + where (trim(p.punkt_name)<>'')" + ], + + + ['field' => 'is_full_cityto', + 'caption' => 'Весь город В', + 'width' => '30', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'checkbox' + ], + + ['field' => 'kolfrom', + 'caption' => 'Кол. С', + 'width' => '50', + 'readonly' => false, + 'align' => 'right' + ], + + ['field' => 'kolto', + 'caption' => 'Кол. По', + 'width' => '50', + 'readonly' => false, + 'align' => 'right' + ], + + ['field' => 'cena', + 'caption' => 'Цена', + 'width' => '80', + 'readonly' => false, + 'align' => 'right' + ], + + ['field' => 'nacenk_percent', + 'caption' => 'Процент наценки', + 'width' => '80', + 'readonly' => false, + 'align' => 'right' + ], + + ['field' => 'nacenk_add', + 'caption' => 'Сумма наценки', + 'width' => '80', + 'readonly' => false, + 'align' => 'right' + ], + + + ['field' => 'active', + 'caption' => 'Вкл', + 'width' => '30', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'checkbox' + ], + + ['field' => 'prover', + 'caption' => 'Проверено', + 'width' => '30', + 'readonly' => false, + 'align' => 'left', + 'type_field' => 'checkbox' + ] + ] + ]; + + $rez .= $grid->simpleTable($arr); + + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->show_tarifs(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool.php new file mode 100644 index 0000000..7a014b1 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool.php @@ -0,0 +1,39 @@ +- $caption.

      "; + } + + + + // Возвращаем контент + function content(){ + + $rez="Переход на демонстрационную страницу PHP Kool Demo"; + + $rez.=$this->linkShow('Вывод таблицы тарифов из проекта трансферов с помощью таблицы KoolPHP', '/?adm=k2test_phpkool_demogrid&mode=admin'); + $rez.=$this->linkShow('Простейшая таблица с цифрами на базе KoolPHP', '/?adm=k2test_phpkool_demogridsimple&mode=admin&temp=print'); + //$rez.=$this->linkShow('Отношение один ко многим на базе KoolPHP', '/?adm=k2test_phpkool_demomasterdetile&mode=admin'); + $rez.=$this->linkShow('Pivot Grid на базе KoolPHP', '/?adm=k2test_phpkool_demopivotgrid&mode=admin&temp=print'); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demogrid.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demogrid.php new file mode 100644 index 0000000..bf619ec --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demogrid.php @@ -0,0 +1,142 @@ +inc('k2transfermain'); + } + + // Вывод таблицы пунктов назначения + function getPunkt($cityid){ + global $k2, $trans; + $grid=$k2->ins_comp2('k2grid', $this); + + $partner=$trans->getPartners(); + $from=$trans->getOtprav(/*$k2->get('cityid')*/); + $to=$from; + $avto=$trans->getTypeAvto(); + + $arr = [ + 'grouping' => true, + 'filtering' => true, + 'column_number' => 1, + 'scroll' => true, + 'width' => '100%', + 'select' => "select transtarifid, partner_transid, ismain, fromid, + toid, type_avtoid, cena, active, prover, type_transferid, kolfrom, kolto, is_full_cityfrom, is_full_cityto, + nacenk_percent, nacenk_add + from k2trans_tarif", + 'update' => "update k2trans_tarif set transtarifid = '@transtarifid', partner_transid = '@partner_transid', + ismain = '@ismain', fromid = '@fromid', toid = '@toid', type_avtoid = '@type_avtoid', cena = '@cena', + active = '@active', prover = '@prover', type_transferid = '@type_transferid', kolfrom='@kolfrom', kolto='@kolto', + is_full_cityfrom='@is_full_cityfrom', is_full_cityto='@is_full_cityto', nacenk_percent='nacenk_percent', nacenk_add='@nacenk_add' + where transtarifid = '@transtarifid'", + 'delete' => "delete from k2trans_tarif where transtarifid = '@transtarifid'", + 'insert' => "insert into k2trans_tarif (transtarifid, partner_transid, ismain, fromid, + toid, type_avtoid, cena, active, prover, type_transferid, kolfrom, kolto, + is_full_cityfrom, is_full_cityto, nacenk_percent, nacenk_add) + values ('@transtarifid','@partner_transid','@ismain','@fromid', + '@toid','@type_avtoid','@cena','@active','@prover','@type_transferid', '@kolfrom', '@kolto', + '@is_full_cityfrom', '@is_full_cityto', '@nacenk_percent', '@nacenk_add')", + 'fields' => [ + ['field' => 'transtarifid', + 'caption' => 'ID', + 'readonly' => true, + 'width' => '20px' + ], + + ['field' => 'partner_transid', + 'caption' => 'Партнер', + 'type_field' => 'DropDown', + 'values' => $partner + ], + + ['field' => 'kolfrom', + 'caption' => 'Кол.мест С', + 'width' => '20px' + ], + + ['field' => 'kolto', + 'caption' => 'Кол.мест По', + 'width' => '20px' + ], + + ['field' => 'type_avtoid', + 'caption' => 'Тип автомобиля', + 'type_field' => 'DropDown', + 'values' => $avto + ], + + ['field' => 'fromid', + 'caption' => 'Выезд', + 'type_field' => 'DropDown', + 'values' => $from + ], + + ['field' => 'is_full_cityfrom', + 'caption' => 'На весь город (В)', + 'width' => '20px' + ], + + ['field' => 'toid', + 'caption' => 'Прибытие', + 'type_field' => 'DropDown', + 'values' => $to + ], + + ['field' => 'is_full_cityto', + 'caption' => 'На весь город (П)', + 'width' => '20px' + ], + + ['field' => 'cena', + 'caption' => 'Цена', + 'width' => '40px' + ], + + ['field' => 'nacenk_percent', + 'caption' => '% наценки', + 'width' => '15px' + ], + + ['field' => 'nacenk_add', + 'caption' => 'Сумма наценки', + 'width' => '15px' + ], + + ['field' => 'active', + 'caption' => 'Вкл.', + 'width' => '20px' + ], + + ['field' => 'prover', + 'caption' => 'Допущено', + 'width' => '20px' + ] + ] + ]; + + $rez = $grid->simpleTable($arr); + return $rez; + } + + // Вывод справочника пунктов назначения/отправки + function getPunktNaznach(){ + global $k2; + $rez=''; + $rez.=$this->getPunkt($k2->get('cityid')); + return $rez; + } + + // Возвращаем контент + function content(){ + $rez=$this->getPunktNaznach(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demogridsimple.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demogridsimple.php new file mode 100644 index 0000000..49dad13 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demogridsimple.php @@ -0,0 +1,68 @@ +inc('k2transfermain'); + } + + + // Вывод таблицы справочника валют + function show_transauto_table(){ + global $k2; + $grid=$k2->ins_comp2('k2grid', $this); + $arr = [ + 'select' => "select type_avtoid, type_avto_name, kolmest, nacenka_percent, nacenka_add, kolfrom from k2type_avto", + 'update' => "update k2type_avto set type_avto_name='@type_avto_name', kolmest='@kolmest', nacenka_percent='@nacenka_percent', nacenka_add='@nacenka_add', kolfrom='@kolfrom' where type_avtoid = @type_avtoid", + 'delete' => "delete from k2type_avto where type_avtoid = @type_avtoid", + 'insert' => "insert into k2type_avto (type_avto_name, kolmest, nacenka_percent, nacenka_add, kolfrom) values ('@type_avto_name', '@kolmest', '@nacenka_percent', '@nacenka_add', '@kolfrom' )", + 'fields' => [ + ['field' => 'type_avtoid', + 'caption' => 'ID', + 'readonly' => true, + 'width'=>'15px' + ], + + ['field' => 'type_avto_name', + 'caption' => 'Тип авто' + ], + + ['field' => 'nacenka_percent', + 'caption' => '% наценки', + 'width' => '15px' + ], + + ['field' => 'nacenka_add', + 'caption' => 'Сумма наценки', + 'width' => '15px' + ], + + ['field' => 'kolfrom', + 'caption' => 'Кол.мест С', + 'width' => '15px' + ], + + ['field' => 'kolmest', + 'caption' => 'Кол.мест ПО', + 'width' => '15px' + ] + ] + ]; + + $rez = $grid->simpleTable($arr); + return $rez; + } + + + // Возвращаем контент + function content(){ + $rez=$this->show_transauto_table(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demomasterdetile.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demomasterdetile.php new file mode 100644 index 0000000..396b977 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demomasterdetile.php @@ -0,0 +1,143 @@ +ins_comp2('k2grid', $this); + $arr = [ + 'name' => "grid", + 'table_caption' => "Меню:", + 'ismasterdetile' => true, + 'width' => '1000px', + 'select' => "select k2menuid, menu_name, ident, comment, act from k2menu", + 'update' => "update k2menu set menu_name='@menu_name', ident='@ident', comment='@comment', act='@act' where k2menuid=@k2menuid", + 'delete' => "delete from k2menu where k2menuid=@k2menuid", + 'insert' => "insert into k2menu (k2menuid, menu_name, ident, comment, act) values ('@k2menuid', '@menu_name', '@ident', '@comment', '@act');", + 'fields' => [ + ['field' => 'k2menuid', + 'caption' => 'ID', + 'readonly' => true + ], + + ['field' => 'menu_name', + 'caption' => 'Название' + ], + + ['field' => 'ident', + 'caption' => 'Идентификатор' + ], + + ['field' => 'comment', + 'caption' => 'Примечание' + ], + + ['field' => 'act', + 'caption' => 'Вкл.' + ] + ] + ]; + + $rez = $grid->simpleTable($arr); + + if($k2->post("k2menuid_selected")<>'') + { + $select = "select k2menuitemid, k2menuid, caption, parentid, act, hint, command, url, ord from k2menuitems where k2menuid='".$k2->post("k2menuid")."'"; + $k2->session["k2menuid"] = $k2->post("k2menuid"); + } + else + { + if(!$grid->koolajax->isCallback) + { + $_rows = $grid->grid->GetInstanceMasterTable()->GetInstanceRows(); + if (isset($_rows[0])){ + $_rows[0]->Selected = true; + $select = "select k2menuitemid, k2menuid, caption, parentid, act, hint, command, url, ord from k2menuitems where k2menuid='".$_rows[0]->DataItem["k2menuid"]."'"; + $insert = "insert into k2menuitems (k2menuid, caption, parentid, act, hint, command, url, ord) values ('" + .$_rows[0]->DataItem["k2menuid"]."', '@caption', '@parentid', '@act', '@hint', '@command', '@url', '@ord')"; + }else{ + $select = "select k2menuitemid, k2menuid, caption, parentid, act, hint, command, url, ord from k2menuitems where 1=0"; + $insert = ""; + + } + } + else + { + if (isset($k2->session["k2menuid"])){ + $menuid=$k2->session["k2menuid"]; + }else{ + $menuid='-1'; + } + + $select = "select k2menuitemid, k2menuid, caption, parentid, act, hint, command, url, ord from k2menuitems where k2menuid='".$menuid."'"; + echo $select."\n"; + $insert = "insert into k2menuitems (k2menuid, caption, parentid, act, hint, command, url, ord) values ('".$menuid."', '@caption', '@parentid', '@act', '@hint', '@command', '@url', '@ord')"; + } + } + + $grid_menuitems = $k2->ins_comp2('k2grid', $this); + $arr = [ + 'master' => $grid, + 'name' => "grid_menuitems", + 'table_caption' => "Элементы меню:", + 'ismasterdetile' => true, + + 'keyfield' => 'k2menuitemid', + 'masterkeyfield' => 'k2menuid', + 'width' => '1000px', + + 'select' => $select, + 'update' => "update k2menuitems set k2menuid='@k2menuid', caption='@caption', parentid='@parentid', act='@act', hint='@hint', command='@command', url='@url', ord='@ord' where k2menuitemid=@k2menuitemid", + 'delete' => "delete from k2menuitems where k2menuitemid=@k2menuitemid", + 'insert' => $insert, + 'fields' => [ + ['field' => 'k2menuitemid', + 'caption' => 'ID', + 'readonly' => true + ], + + ['field' => 'caption', + 'caption' => 'Название пункта меню' + ], + + ['field' => 'parentid', + 'caption' => 'id пред. меню' + ], + + ['field' => 'act', + 'caption' => 'Вкл.' + ], + + ['field' => 'hint', + 'caption' => 'Подсказка' + ], + + ['field' => 'command', + 'caption' => 'Команда' + ], + + ['field' => 'url', + 'caption' => 'URL' + ], + + ['field' => 'ord', + 'caption' => 'Сортировка' + ] + ] + ]; + + $rez .= $grid_menuitems->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/app/k2/k2test/k2test_phpkool_demopivotgrid.php b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demopivotgrid.php new file mode 100644 index 0000000..ed64e34 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_phpkool_demopivotgrid.php @@ -0,0 +1,142 @@ +kool->KoolControlsFolderAbs;//Relative path to "KoolPHPSuite/KoolControls" folder + + require $KoolControlsFolder."/KoolAjax/koolajax.php"; + require_once $k2->kool->KoolControlsFolderAbs."/KoolAjax/koolajax.php"; + $this->koolajax = $koolajax; + $this->koolajax->scriptFolder = $k2->kool->KoolControlsFolder."/KoolAjax"; + + require $KoolControlsFolder."/KoolPivotTable/koolpivottable.php"; + //$db_con = mysql_connect($k2->host, $k2->user, $k2->pass); + $db_con = mysqli_connect($k2->host,$k2->user,$k2->pass,$k2->dbname); + + + $ds = new MySQLiPivotDataSource($db_con);//This $db_con link has been created inside KoolPHPSuite/Resources/runexample.php + $ds ->select("z.zajavkid, z.typezajavid, z.zajav_date as Дата, z.mesto as Адреса, z.usercreate as Користувач, z.razmer_polya as Розмір_поля, k.Kultura as Культура, s.NameUA as Сорт, obl.OblastNameUA as Область, f.VirobnikNameUA as Виробник") + ->from("dp2_zajavka_obsteg z"); + + $ds ->where("typezajavid='tov288f9c84a33a5186e6be77bb4eea0'"); + + $pivot = new KoolPivotTable("pivot"); + + $pivot->scriptFolder = $k2->kool->KoolControlsFolder."/KoolPivotTable"; + $pivot->styleFolder = $k2->kool->style_pivot(); + $pivot->DataSource = $ds; + + //Allow ordering + $pivot->AllowReorder = true; + + //Turn on ajax features. + $pivot->AjaxEnabled = true; + + //Set the Width of pivot and use horizontal scrolling + $pivot->Width = "800px"; + $pivot->HorizontalScrolling = true; + + //Set the Height of pivot and use Vertical Scrolling + $pivot->Height = "400px"; + $pivot->VerticalScrolling = true; + + + + //Make the RowHeader wider. + $pivot->Appearance->RowHeaderMinWidth = "250px"; + + //Use the Prev and Next Numneric Pager + $pivot->Pager = new PivotPrevNextAndNumericPager(); + + //Turn on caching to help pivot working faster. + $pivot->AllowCaching = true; + + + $pivot->AllowFiltering = true; + //Allow sorting + $pivot->AllowSorting = true; + //Allow reordering + $pivot->AllowReorder = true; + + + //Data Field + $field = new PivotSumField("zajavkid"); + $field->Text = "Заявки"; + $field->FormatString = "\${n}"; + $field->AllowReorder = false;//Turn off the reorder for data field + $pivot->AddDataField($field); + + //Row Fields + $field = new PivotField("OblastNameUA"); + $field->Text = "OblastNameUA"; + $pivot->AddColumnField($field); + + //Column Fields + $field = new PivotField("zajav_date"); + $field->Text = "zajav_date"; + $pivot->AddColumnField($field); + + + $field = new PivotField("mesto"); + $field->Text = "mesto"; + $pivot->AddColumnField($field); + + $field = new PivotField("Розмір_поля"); + $field->Text = "razmer_polya"; + $pivot->AddColumnField($field); + + $field = new PivotField("Kultura"); + $field->Text = "Kultura"; + $pivot->AddColumnField($field); + + $field = new PivotField("Сорт"); + $field->Text = "Сорт"; + $pivot->AddColumnField($field); + + + + //Process the pivot + $pivot->Process(); + + $this->pivot = $pivot; + $rez = $this->addForm(); + + return $rez; + } + + function addForm() + { + global $k2; + ob_start(); + ?> +
      + koolajax->Render();?> + +
      + pivot->Render();?> +
      + +
      + showRivotGrid(); + return $rez; + } + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_sendemail.php b/k2shop/k2shop/app/app/k2/k2test/k2test_sendemail.php new file mode 100644 index 0000000..933a05d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_sendemail.php @@ -0,0 +1,154 @@ + +
      + +

      Тест отправки писем

      + + +


      +


      +


      + + + + + + +
      + '; + function readTpl($tpl = '') + { + global $k2; + + $rez = ''; + $files = $k2->rootdir.$k2->getEmailTpl($tpl); + try{ + $rez = file_get_contents($files); + }catch(PDOException $e) { + echo "Error readTpl().file_get_contents().".$tpl."\n"; + echo $e->getMessage(); + } + + return $rez; + } + + function testSendEmail() + { + global $k2; + $rez = ''; + $sel = $k2->ins_comp2('k2select2'); + $tpl = $sel->sel( + ['name' => 'tpl', + 'sql' => "SELECT email_tpl AS k, email_tpl AS v FROM k2email", + 'search_input' => 0, + 'width'=>'100%', + 'value'=>'', + 'add_class'=>' select2', + 'required' => 0, + 'onchange' =>'getTPL(this.value)', + ] + ); + //var_dump($tpl); + //$ip= file_get_contents('http://icanhazip.com/'); + $rez = $this->formemail; + $rez = str_replace('{tpl}', $tpl, $rez); + $subj = 'Тест'; + $mess = 'Тест отправки письма'; + + if ($k2->post('subj')<>'') { + $subj = $k2->post('subj'); + } + /*if ($k2->post('mess')<>'') { + $mess = $k2->post('mess'); + }else{ + $mess = 'test mess'; + }*/ + if($k2->post('tpl')){ + $tpl_m=$k2->post('tpl'); + }else{ + $tpl_m='ads_email'; + } + $email_comp = $k2->ins_comp('k2setemail'); + $mask_arr = [ + 'noreply@let-know.com', + 'test1', + 'k2test', + 'test@let-know.com', + 'test test test', + $k2->proto.'://'.$k2->domain(), + $_SERVER['REQUEST_URI'] + ]; + + + $mess = $k2->post('mess'); //$email_comp->formEmail($tpl_m, $mask_arr); + //$mess='dsa'; + if ($k2->post('email')) { + + $k2->mail->sendMail($k2->post('email'), $subj, $mess, $headers); + //$k2->mail->sendSMTPMail($k2->post('email'), $subj, $mess, 'test@let-know.com'); + + } + + + return $rez; + } + + // Возвращаем контент + function content() + { + global $k2; + $rez = ''; + if($k2->get('event')=='readTpl'){ + $rez = $this->readTpl($k2->post('tpl_name')); + }else{ + $rez .= $this->testSendEmail(); + } + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_signature.php b/k2shop/k2shop/app/app/k2/k2test/k2test_signature.php new file mode 100644 index 0000000..e952cd5 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_signature.php @@ -0,0 +1,70 @@ +Цезариус" + . "

      Описание WebApplication

      " + . "

      Приват

      " + . "

      Общее описание Api: Тестовое API Папка24.docx

      "; + + + + // $r = $k2->sql->sel("SELECT + // zajavkid, prot_num, prot_data + // FROM dp2_protokol_zern + // ", + // [] + // ); + // foreach ($r['data'] as $key => $value) { + // $err = $k2->sql->upd( + // "UPDATE dp2_zajavka_obsteg + // SET + // prot_vypr_num='".$value['prot_num']."', + // prot_vypr_date='".$value['prot_data']."' + // WHERE zajavkid = '".$value['zajavkid']."' AND (prot_vypr_date = '' OR prot_vypr_date IS NULL) AND (prot_vypr_date = '0000-00-00' OR prot_vypr_date IS NULL) ", + // [ + + // ] + // ); + // print_r($err); + // echo $value['prot_num'].$value['prot_data'].$value['zajavkid'].'
      '; + // if($err['err']!==''){ + + // $k2->log->err('Помилка видалення: '.$err['err']); + // $rez['err'] = $err['err']; + // return $rez; + // } + // } + // //print_r($r['data']); + + return $rez; + } + + + + // Возвращаем контент + function content(){ + $rez=$this->getSignatureInfo(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_stimulsoft.php b/k2shop/k2shop/app/app/k2/k2test/k2test_stimulsoft.php new file mode 100644 index 0000000..283a3f2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_stimulsoft.php @@ -0,0 +1,16 @@ +site->addCSS('kendo.common.min.css', $this->telerik_path.'/styles/kendo.common.min.css'); + $k2->site->addCSS('kendo.default.min.css', $this->telerik_path.'/styles/kendo.default.min.css'); + + // $k2->site->addJS('jquery.min.js', $this->telerik_path.'js/jquery.min.js'); + $k2->site->addJS('kendo.all.min.js', $this->telerik_path.'/js/kendo.all.min.js'); + $k2->site->addJS('jszip.min.js', $this->telerik_path.'/js/jszip.min.js'); + + require_once $k2->rootdir.$this->telerik_path.'/DataSourceResult.php'; + require_once $k2->rootdir.$this->telerik_path.'/Kendo/Autoload.php'; + } + + + /** + * + * @global type $k2 + * @return string + */ + function getTelerikCalendar() + { + global $k2; + + + + $rez = ''; + $rez .= '
      +

      Pick a date

      '; + + $calendar = new \Kendo\UI\Calendar('calendar'); + + // Output the datepicker HTML and JavaScript by echo-ing the result of the render method + $rez .= $calendar->render(); + + $rez .='
      '; + + return $rez; + } + + /** + * + * @global type $k2 + * @return string + */ + function getTelerikChart() + { + global $k2; + $rez = ''; + $india = new \Kendo\Dataviz\UI\ChartSeriesItem(); + $india->name('India') + ->data(array(3.907, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855)); + + $world = new \Kendo\Dataviz\UI\ChartSeriesItem(); + $world->name('World') + ->data(array(1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, -2.245, 4.339, 2.727)); + + $haiti = new \Kendo\Dataviz\UI\ChartSeriesItem(); + $haiti->name('Haiti') + ->data(array(-0.253, 0.362, -3.519, 1.799, 2.252, 3.343, 0.843, 2.877, -5.416, 5.590)); + + $valueAxis = new \Kendo\Dataviz\UI\ChartValueAxisItem(); + + $valueAxis->labels(array('format' => '{0}%')) + ->line(array('visible' => false)) + ->axisCrossingValue(-10); + + $categoryAxis = new \Kendo\Dataviz\UI\ChartCategoryAxisItem(); + $categoryAxis->categories(array(2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011)) + ->majorGridLines(array('visible' => false)); + + + $tooltip = new \Kendo\Dataviz\UI\ChartTooltip(); + $tooltip->visible(true) + ->format('{0}%') + ->template('#= series.name #: #= value #'); + + $chart = new \Kendo\Dataviz\UI\Chart('chart'); + $chart->title(array('text' => 'Gross domestic product growth \n /GDP annual %/')) + ->chartArea(array('background' => 'transparent')) + ->legend(array('position' => 'bottom')) + ->addSeriesItem($india, $world, $haiti) + ->addValueAxisItem($valueAxis) + ->addCategoryAxisItem($categoryAxis) + ->tooltip($tooltip) + ->seriesDefaults(array('type' => 'area', 'area' => array('line' => array('style' => 'smooth')))); + $rez .= $chart->render(); + + $rez .= '
      + '; + return $rez; + } + + /** + * + * @global type $k2 + * @return string + */ + function getTelerikTree() + { + global $k2; + + + + $rez = ''; + $rez .= '
      '; + + $treeview = new \Kendo\UI\TreeView('treeview'); + + // helper function that creates TreeViewItem with spriteCssClass + function TreeViewItem($text, $spriteCssClass) { + $item = new \Kendo\UI\TreeViewItem($text); + $item->spriteCssClass($spriteCssClass); + return $item; + } + + $site = TreeViewItem('My Web Site', 'folder'); + + $images = TreeViewItem('images', 'folder'); + $images->expanded(true); + $images->addItem(TreeViewItem('logo.png', 'image')) + ->addItem(TreeViewItem('body-back.png', 'image')) + ->addItem(TreeViewItem('my-photo.jpg', 'image')); + + $pdfs = TreeViewItem('pdf', 'folder'); + $pdfs->expanded(true); + $pdfs->addItem(TreeViewItem('brochure.pdf', 'pdf')) + ->addItem(TreeViewItem('prices.pdf', 'pdf')); + + $resources = TreeViewItem('resources', 'folder'); + $resources->expanded(true); + $resources->addItem($pdfs) + ->addItem(TreeViewItem('zip', 'folder')); + + + $site->expanded(true); + $site->addItem($images) + ->addItem($resources) + ->addItem(TreeViewItem('about.html', 'html')) + ->addItem(TreeViewItem('contacts.html', 'html')) + ->addItem(TreeViewItem('index.html', 'html')) + ->addItem(TreeViewItem('portfolio.html', 'html')); + + $treeview->addItem($site); + + + // Output the datepicker HTML and JavaScript by echo-ing the result of the render method + $rez .= $treeview->render(); + + $rez .='
      '; + + $rez .=''; + + return $rez; + } + + /** + * + * @global type $k2 + * @return type + */ + function getTelerikTable() + { + global $k2; + + + $rez = ''; + + //var_dump($k2->db); + + $result = new DataSourceResult(1); + + $data = $result->read('k2country', array('countryid', 'countryname')); + + + $model = new \Kendo\Data\DataSourceSchemaModel(); + + $productNameField = new \Kendo\Data\DataSourceSchemaModelField('countryid'); + $productNameField->type('string'); + + $unitPriceField = new \Kendo\Data\DataSourceSchemaModelField('countryname'); + $unitPriceField->type('string'); + + + + $model->addField($productNameField) + ->addField($unitPriceField); + // ->addField($unitsInStockField) + // ->addField($discontinuedField); + + $schema = new \Kendo\Data\DataSourceSchema(); + $schema->data('data') + ->model($model) + ->total('total'); + + $dataSource = new \Kendo\Data\DataSource(); + + $dataSource->data($data) + ->pageSize(20) + ->schema($schema); + + $grid = new \Kendo\UI\Grid('grid'); + + $productName = new \Kendo\UI\GridColumn(); + $productName->field('countryid') + ->width('130px') + ->title('countryid'); + + $unitPrice = new \Kendo\UI\GridColumn(); + $unitPrice->field('countryname') + ->width('130px') + //->format('{0:c}') + ->title('countryname'); + + //$unitsInStock = new \Kendo\UI\GridColumn(); + //$unitsInStock->field('UnitsInStock') + // ->width('130px') + // ->title('Units In Stock'); + // + //$discontinued = new \Kendo\UI\GridColumn(); + //$discontinued->field('Discontinued') + // ->width('130px'); + + $pageable = new \Kendo\UI\GridPageable(); + $pageable->input(true) + ->numeric(false); + $excel = new \Kendo\UI\GridExcel(); + $excel->fileName('Kendo UI Grid Export.xlsx') + ->filterable(true) + ->proxyURL('excel-export.php?type=save'); + + + $grid->addColumn($productName) + ->addColumn($unitPrice) + ->addToolbarItem(new \Kendo\UI\GridToolbarItem('excel')) + ->excel($excel) + // ->addColumn($unitsInStock) + // ->addColumn($discontinued) + ->dataSource($dataSource) + ->height(550) + ->sortable(true) + ->filterable(true) + ->pageable($pageable); + + $rez .= $grid->render(); + return $rez; + } + + + /** + * + * @global type $k2 + * @return type + */ + function getTelerikDiagram() + { + global $k2; + + + + $rez = '
      +
      + +
      +'; + + return $rez; + } + + + + // Вывод таблицы справочника валют + function show_transauto_table(){ + global $k2; + + $grid=$k2->ins_comp2('k2phpgrid', $this); + // ALTER TABLE `k2type_avto` ADD `kolbag` INT(11) NULL DEFAULT NULL AFTER `kolmest`; + $arr = array( + 'select' => "select histid, fileid, ordnum, datecreate, usercreate from vdHistory", + 'table' => "vdHistory", + 'sortname' => 'histid', + 'sortorder' => 'asc', + 'caption' => 'Історія', + 'is_edit' => true, + 'fields' => array( + array('field' => 'histid', + 'caption' => 'ID Історіі', + 'width' => '80', + 'readonly' => true, + 'align' => 'center' + ), + + array('field' => 'fileid', + 'caption' => 'ID файла', + 'width' => '150', + 'readonly' => false, + 'align' => 'left' + ), + + array('field' => 'ordnum', + 'caption' => 'Номер вставки в базу даних.', + 'width' => '250', + 'readonly' => false, + 'align' => 'left' + ), + array('field' => 'datecreate', + 'caption' => 'Дата створення', + 'width' => '250', + 'readonly' => false, + 'align' => 'left' + ), + array('field' => 'usercreate', + 'caption' => 'Користувач', + 'width' => '250', + 'readonly' => false, + 'align' => 'left' + ), + ) + ); + $rez .= $grid->simpleTable($arr); + + return $rez; + + } + function vdoc(){ + global $k2; + $rez=''; + $vdoc = $k2->ins_comp2('k2vdoc', $this); + + $rez .= $vdoc->getVDoc(); + return $rez; + } + + + + // Возвращаем контент + function content(){ + + $rez = ''; + $rez .= $this->getTelerikTree(); + //$rez .= $this->show_transauto_table(); + $rez .= $this->getTelerikCalendar(); + $rez .= $this->getTelerikTable(); + //$rez .= $this->getTelerikDiagram(); + $rez .= $this->getTelerikChart(); + //$rez .= $this->vdoc(); + + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_test.php b/k2shop/k2shop/app/app/k2/k2test/k2test_test.php new file mode 100644 index 0000000..ed0d04d --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_test.php @@ -0,0 +1,16 @@ +ins_comp('k2upload'); + $arr = [ + 'upload_id'=>'upl1' + ]; + $rez .= $upl->uploadjQuery($arr); + return $rez; + } + + // Возвращаем контент + function content() + { + $rez = ''; + $rez .= $this->testUpload(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_vidgets_demo.php b/k2shop/k2shop/app/app/k2/k2test/k2test_vidgets_demo.php new file mode 100644 index 0000000..79e2892 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_vidgets_demo.php @@ -0,0 +1,63 @@ +ins_comp('k2vidgets', 'watermark'); + $box=$k2->ins_comp('k2vidgets', 'box'); + $table=$k2->ins_comp('k2vidgets', 'table'); + $calendar=$k2->ins_comp('k2vidgets', 'calendar'); + + $rez=''; + $rez.='

      Подключение боксов

      '; + $rez.='

      -Small-box-

      '; + $rez.=$box->showSmallBox(2, 10, 'Red', 'ion ion-person-add', '#', 'bg-red'); + $rez.=$box->showSmallBox(4, 12, 'SmallBox'); + $rez.=$box->showSmallBox(3, 125, 'Green', 'ion ion-bag', '#', 'bg-orange'); + $rez.=$box->showSmallBox(3, 125, 'Green', 'ion-ios-monitor', '#', 'bg-blue'); + + $rez.='

      -Info-box-

      '; + $rez.=$box->showInfoBox(4, 12, 'Info', 'fa fa-envelope-o', 'bg-yellow'); + $rez.=$box->showInfoBox(6, 12, 'Info', 'ion-ios-flask-outline', 'bg-green'); + $rez.=$box->showInfoBox(2, 12, 'Info', 'ion-ios-navigate-outline', 'bg-red'); + + $rez.='

      -Box-

      '; + $rez.=$box->showBox(); + $rez.=$box->showBox(9, 'box-danger', 'Box', 'TEST Text'); + $rez.='
      '; + + //$rez.='

      Подключение таблиц

      '; + //$rez.=$table->showTable('k2country', 'Таблица стран', 'table table-bordered', 'success', 'info'); + + //$rez.='

      Подключение календаря

      '; + //$rez.=$calendar->showCalendar(); + + $rez.='
      '; + //$rez.=$img->getWatermark(); + //$rez.='Какой-то текст'; + + return $rez; + } + + + // Возвращаем контент + function content(){ + $rez=$this->getVidgets(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/k2test_windows_demo.php b/k2shop/k2shop/app/app/k2/k2test/k2test_windows_demo.php new file mode 100644 index 0000000..64be895 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/k2test_windows_demo.php @@ -0,0 +1,110 @@ +addToHead(); + } + + + // Регистрирует необходимые библиотеки + public function addToHead(){ + global $k2; + + } + + + /** + * + * @global type $k2 + * @return type + */ + function getWindow(){ + global $k2; + $rez = ''; + /*$rez .= ""; + $rez .= "";*/ + + + /*$jqx = $k2->ins_comp2('k2window', $this); + + + $arr_win1 = [ + 'wnd_id'=>'window1', + 'btn_id'=>'addWindowButton1', + 'caption'=>'Додати файл', + 'height'=>230, + 'width'=>230, + 'wnd_body'=>" + window1 +
      + + +
      + " + ]; + $rez .= $jqx->showWindow($arr_win1); + + $arr_win2 = [ + 'wnd_id'=>'window2', + 'btn_id'=>'addWindowButton2', + 'is_modal'=>true, + 'caption'=>'Видалити файл', + 'height'=>130, + 'width'=>330, + 'wnd_body'=>" + window2 +
      + + +
      + " + ]; + $rez .= $jqx->showWindow($arr_win2);*/ + $dialog = $k2->ins_comp2('k2form', $this); + $arr = $this->loadResYML('social', false); + + $arr3 = [ + 'form_id' => $arr['table'], + 'table' => $arr['table'], + 'typeid' => $arr['typeid'], + 'form_width'=>$arr['form_width'], + 'form_height'=>$arr['form_height'], + 'caption'=>$arr['caption'], + 'fields' => $arr['fields'], + 'btn_text' => 'Окно 1', + ]; + + $arr3['perm'] = ['add'=>true]; + + + $rez .= $dialog->showForm($arr3); + + return $rez; + } + + + + // Возвращаем контент + function content(){ + $rez = ''; + + $rez .= $this->getWindow(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/lng/k2test/en.csv b/k2shop/k2shop/app/app/k2/k2test/lng/k2test/en.csv new file mode 100644 index 0000000..d5dbe8f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/lng/k2test/en.csv @@ -0,0 +1,6 @@ +name| value +lnComponentTest| Component Testing +lnPaymentSystems| Payment systems +lnElectronicSignature| Electronic signature +lnTesting| Testing +lnVidgets| Vidgets \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/lng/k2test/ru.csv b/k2shop/k2shop/app/app/k2/k2test/lng/k2test/ru.csv new file mode 100644 index 0000000..89a1e70 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/lng/k2test/ru.csv @@ -0,0 +1,6 @@ +name|value +lnComponentTest| Тестирование компонент +lnPaymentSystems| Платежные системы +lnElectronicSignature| Электронная подпись +lnTesting| Тестирование +lnVidgets| Виджеты \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/lng/k2test/ua.csv b/k2shop/k2shop/app/app/k2/k2test/lng/k2test/ua.csv new file mode 100644 index 0000000..2c802af --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/lng/k2test/ua.csv @@ -0,0 +1,6 @@ +name| value +lnComponentTest| Тестування компонент +lnPaymentSystems| Платіжні системи +lnElectronicSignature| Електронний підпис +lnTesting| Тестування +lnVidgets| Віджети \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2test/res/info.yml b/k2shop/k2shop/app/app/k2/k2test/res/info.yml new file mode 100644 index 0000000..20420c4 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2test" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2test/res/social.yml b/k2shop/k2shop/app/app/k2/k2test/res/social.yml new file mode 100644 index 0000000..25f0ced --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2test/res/social.yml @@ -0,0 +1,51 @@ +select: SELECT socid, soc_name, soc_link, soc_icon, active FROM k2social +table: k2social +sortname: socid +typeid: 1 +sortorder: asc +caption: Социальные иконки + + +height: 250 + + +fields: + 0: + field: socid + caption: ID + width: 60 + readonly: true + align: center + hidden: true +# required: true + + 1: + field: soc_name + caption: Имя + width: 250 + readonly: false + align: left + + 2: + field: soc_link + caption: Ссылка + width: 250 + readonly: false + align: left +# type_field: textarea + + 3: + field: soc_icon + caption: Иконка + width: 100 + readonly: false + align: center + + 12: + field: active + caption: Актив. + width: 50 + readonly: false + align: center + type_field: checkbox + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/--k2updates_route.php b/k2shop/k2shop/app/app/k2/k2updates/--k2updates_route.php new file mode 100644 index 0000000..e051a49 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/--k2updates_route.php @@ -0,0 +1,244 @@ +arr_comppath as $path) { + $rdi = new RecursiveDirectoryIterator($path); + $rit = new RecursiveIteratorIterator($rdi); + foreach( $rit as $path=>$info ) { + if ( $this->seach_file === $info->getFilename() ) { + $comppath = nslashe($info->getPath()); + $compname = $this->getFolderName($comppath); +// echo $compname.'
      '; + $arr_info = $this->loadInfoYML($path); + //print_r($rez); + + $filepath = nslashe($info->getPathname()); + + //$this->fillFile($filepath, $compname); + //$this->insCompVer($arr_info); + } + } + } +// $data = file_get_contents("http://update.corp2.net/info.yml"); +// //echo "
      " . $data . "
      "; +// //$qwe = json_decode($data, true); +// $qwe = Yaml::parse($data); + //print_r($qwe); + return $rez; + } + + + /** + * создание файла info + * @param type $file + * @param type $compname + */ + function fillFile($file, $compname) + { + $output = 'comp_name: "'.$compname.'"'."\n"; + $output .= 'version: 1.1.1.1'."\n"; + $output .= 'short_descr: '."\n"; + $output .= 'description: '."\n"; + $output .= 'comment: '."\n"; + $output .= 'cena: '."\n"; + + file_put_contents($file, $output); + } + + + + function showUpdateTables($route = '') + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $route = $k2->get('r'); + if($route == 'updSys'){ + +// $arr2 = $this->loadResYML('updVersion'); +// $rez .= $grid->simpleTable($arr2); + + $rez .= $this->showSysTree(); + } elseif ($route == 'updCompName') { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr2 = $this->loadResYML('updCompVer'); + $rez .= $grid->simpleTable($arr2); + } else { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + } + //$this->searchInfoFile(); + return $rez; + } + + + function showTable($route) + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + + function showSysTree() + { + global $k2; + + $arr_tree = $this->loadResYML('updSys'); + + //$report_data = $this->showTable('updSys'); + + $params=[ + 'name'=>'SysTree', + + 'tree'=>[ + 'select' => 'SELECT s.sysid, s.sysname, s.parent_sysid, s.short_descr, s.description, s.comment, s.cena, (select count(*) from updSys tc where tc.parent_sysid=s.sysid) as ccount FROM updSys s where (1=1)', + 'id' => 'sysid', + 'name' => 'sysname', + 'parentid' => 'parent_sysid', + 'tablename' => 'updSys', + 'caption' => 'Система', + 'sortname' => 'sysname', + 'divtable' => 'updSys', + 'sortorder' => 'asc', + 'fields' => $arr_tree['fields'], + + + ], + 'height'=>'395', 'panel_size'=>'1550', 'panel_size2'=>'600', + 'resize_objs'=>[ + ], + + //'bootom_buttons'=>$report_data, + 'table' => $this->loadResYML('updVersion') + ]; + $report = $k2->ins_comp('k2tree_frame'); + + $rez = $report->getTreeTable($params); + + return $rez; + } + + function insCompVer($arr_info) + { + global $k2; + $compnameid = $this->getID(); + + $find = $k2->sql->sel('SELECT * FROM updCompName WHERE (comp_name=:comp_name);', ['comp_name'=>$arr_info['comp_name']]); + + //если данных нет то вставляем + if ($find['data'] == []){ + + $r = $k2->sql->ins_arr( + ['table' => 'updCompName', + 'fields' => [ + 'compnameid' => $compnameid, + 'sysid' => '1', + 'comp_name' => $arr_info['comp_name'], + 'short_descr' => $arr_info['short_descr'], + 'description' => $arr_info['description'], + 'datecreate' => '{now}', + 'dateupdate' => '{now}', + 'typecompid' =>'f6a87db0c71986924d64e71e2ca291f9', + 'ordnum' => 'SELECT MAX(ordnum)+1', + 'is_del' => 0 + ] + ] + ); + if($r['err']!==''){ + $rez['err'] = $rez['err']; + return $rez; + } + +// $find1 = $k2->sql->sel('SELECT * FROM updCompName WHERE (comp_name=:comp_name);', ['comp_name'=>$arr_info['comp_name']]); +// +// //если данных нет то вставляем +// if ($find1['data'] == []){ + $compid = $this->getID(); + + $arr_ver = explode('.', $arr_info['version']); + + $r = $k2->sql->ins_arr( + ['table' => 'updCompVer', + 'fields' => [ + 'compid' => $compid, + 'compnameid' => $compnameid, + 'versionid' => '1', + 'short_descr' => $arr_info['short_descr'], + 'description' => $arr_info['description'], + 'datecreate' => '{now}', + 'dateupdate' => '{now}', + 'ver1' => $arr_ver[0], + 'ver2' => $arr_ver[2], + 'ver3' => $arr_ver[3], + 'ver4' => $arr_ver[4], + 'ordnum' => 'SELECT MAX(ordnum)+1', + 'is_del' => 0 + ] + ] + ); + if($r['err']!==''){ + $rez['err'] = $rez['err']; + return $rez; + } +// } + } + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + + //echo $this->version; + $event = $k2->get('event'); + + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/k2updates.php b/k2shop/k2shop/app/app/k2/k2updates/k2updates.php new file mode 100644 index 0000000..b313bb3 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/k2updates.php @@ -0,0 +1,52 @@ +auth->isSuperAdmin()){ + $arr = []; + }else{ + $arr = $this->loadResYML('menu'); + } + + return $arr; + } + + + // Обработка команд + function admCommands($comm){ + + global $k2; + $rez=false; + + $s=$k2->getComp($comm); + if ($s[0]<>'k2updates'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>'') + echo $comp->content(); + + return $rez; + + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/k2updates_client.php b/k2shop/k2shop/app/app/k2/k2updates/k2updates_client.php new file mode 100644 index 0000000..f57ffbc --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/k2updates_client.php @@ -0,0 +1,149 @@ +arr_comppath as $path) { + $rdi = new RecursiveDirectoryIterator($path); + $rit = new RecursiveIteratorIterator($rdi); + foreach( $rit as $path=>$info ) { + if ( $this->seach_file === $info->getFilename() ) { + $comppath = nslashe($info->getPath()); + $compname = $this->getFolderName($comppath); +// echo $compname.'
      '; + $arr_info = $this->loadInfoYML($path); + //print_r($rez); + + $filepath = nslashe($info->getPathname()); + + //$this->fillFile($filepath, $compname); + //$this->insCompVer($arr_info); + } + } + } +// $data = file_get_contents("http://update.corp2.net/info.yml"); +// //echo "
      " . $data . "
      "; +// //$qwe = json_decode($data, true); +// $qwe = Yaml::parse($data); + //print_r($qwe); + return $rez; + } + + function readUpdFile() + { + global $k2; + $data = file_get_contents("http://update.corp2.net/update.json"); + //echo "
      " . $data . "
      "; + $qwe = json_decode($data, true); + print_r($qwe); + } + + function showUpdateTables() + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $route = $k2->get('r'); + + if($route == 'updSys'){ + +// $arr2 = $this->loadResYML('updVersion'); +// $rez .= $grid->simpleTable($arr2); + $rez .= $this->sysTree(); + //$rez .= $this->showSysTree(); + } elseif ($route == 'updCompName') { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr2 = $this->loadResYML('updCompVer'); + $rez .= $grid->simpleTable($arr2); + } else { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + } + //$this->searchInfoFile(); + return $rez; + } + + function sysTree(){ + global $k2; + $tree = $k2->ins_comp('k2tree'); + $arr = $this->loadResYML('updSys'); + $arr_tree = + ['select' => 'SELECT s.sysid, s.sysname, s.parent_sysid, s.short_descr, s.description, s.is_del, s.ordnum, s.comment, s.cena, (select count(*) from updSys tc where tc.parent_sysid=s.sysid) as ccount FROM updSys s where (1=1)', + 'id' => 'sysid', + 'name' => 'sysname', + 'table' => 'updSys', + 'parentid' => 'parent_sysid', + 'tablename' => 'updSys', + 'caption' => 'Система', + 'sortname' => 'sysname', + 'divtable' => 'updSys4', + 'sortorder' => 'asc', + 'detile' => 'updVersion', + 'height' => '375', + 'fields' => $arr['fields'], + 'is_edit' => true + ]; + + + $rez.=$tree->getTree($arr_tree); + $rez.=$this->showTable('updVersion'); + return $rez; + } + + function showTable($route) + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + + + + + // Возвращаем контент + function content(){ + global $k2; + + + + $event = $k2->get('event'); + + + $rez .= $this->readUpdFile(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/k2updates_route.php b/k2shop/k2shop/app/app/k2/k2updates/k2updates_route.php new file mode 100644 index 0000000..1a30299 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/k2updates_route.php @@ -0,0 +1,303 @@ +arr_comppath as $path) { + $rdi = new RecursiveDirectoryIterator($path); + $rit = new RecursiveIteratorIterator($rdi); + foreach( $rit as $path=>$info ) { + if ( $this->seach_file === $info->getFilename() ) { + $comppath = nslashe($info->getPath()); + $compname = $this->getFolderName($comppath); +// echo $compname.'
      '; + $arr_info = $this->loadInfoYML($path); + //print_r($rez); + + $filepath = nslashe($info->getPathname()); + + //$this->fillFile($filepath, $compname); + //$this->insCompVer($arr_info); + } + } + } +// $data = file_get_contents("http://update.corp2.net/info.yml"); +// //echo "
      " . $data . "
      "; +// //$qwe = json_decode($data, true); +// $qwe = Yaml::parse($data); + //print_r($qwe); + return $rez; + } + + + /** + * создание файла info + * @param type $file + * @param type $compname + */ + function fillFile($file, $compname) + { + $output = 'comp_name: "'.$compname.'"'."\n"; + $output .= 'version: 1.1.1.1'."\n"; + $output .= 'short_descr: '."\n"; + $output .= 'description: '."\n"; + $output .= 'comment: '."\n"; + $output .= 'cena: '."\n"; + + file_put_contents($file, $output); + } + + + + function showUpdateTables() + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $route = $k2->get('r'); + + if($route == 'updSys'){ + +// $arr2 = $this->loadResYML('updVersion'); +// $rez .= $grid->simpleTable($arr2); + //$rez .= $this->sysTree(); + $rez .= $this->showSysTree(); + } elseif ($route == 'updCompName') { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + $arr2 = $this->loadResYML('updCompVer'); + $rez .= $grid->simpleTable($arr2); + } else { + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + } + //$this->searchInfoFile(); + return $rez; + } + +// function sysTree(){ +// global $k2; +// $tree = $k2->ins_comp('k2tree'); +// $arr = $this->loadResYML('updSys'); +// $arr_tree = +// ['select' => 'SELECT s.sysid, s.sysname, s.parent_sysid, s.short_descr, s.description, s.is_del, s.ordnum, s.comment, s.cena, (select count(*) from updSys tc where tc.parent_sysid=s.sysid) as ccount FROM updSys s where (1=1)', +// 'id' => 'sysid', +// 'name' => 'sysname', +// 'table' => 'updSys', +// 'parentid' => 'parent_sysid', +// 'tablename' => 'updSys', +// 'caption' => 'Система', +// 'sortname' => 'sysname', +// 'divtable' => 'updSys4', +// 'sortorder' => 'asc', +// 'detile' => 'updVersion', +// 'height' => '375', +// 'fields' => $arr['fields'], +// 'is_edit' => true +// ]; +// +// +// $rez.=$tree->getTree($arr_tree); +// $rez.=$this->showTable('updVersion'); +// return $rez; +// } + + function showTable($route) + { + global $k2; + $grid = $k2->ins_comp2('k2phpgrid', $this); + $arr = $this->loadResYML($route); + $rez .= $grid->simpleTable($arr); + return $rez; + } + + function showSysTree() + { + global $k2; + + $arr_tree = $this->loadResYML('updSys'); + + //$report_data = $this->showTable('updVersion'); + //$report_data .= $this->showTable('updCompVer'); + $updVersion = $this->showTable('updVersion'); + $updCompVer = $this->showTable('updCompVer'); + $params=[ + 'name'=>'SysTree', + 'tabs'=>[ + 'treenav' => ' ', + 'tree-tab-content'=>[ + 'id'=>'sys', + 'content'=>'
      '.$updVersion.'
      ', + ], + 'tablenav' => ' ', + 'table-tab-content'=>[ + 'id'=>'comp', + 'content'=>'
      '.$updCompVer.'
      ', + ], + ], + 'tree'=>[ + 'select' => 'SELECT s.sysid, s.sysname, s.parent_sysid, (select count(*) from updSys tc where tc.parent_sysid=s.sysid) as ccount FROM updSys s where (1=1)', + 'id' => 'sysid', + 'name' => 'sysname', + 'parentid' => 'parent_sysid', + 'tablename' => 'updSys', + 'caption' => 'Система', + 'sortname' => 'sysname', + //'divtable' => 'updSys1', + 'sortorder' => 'asc', + 'detile' => 'updVersion,updCompName', + //'fields' => $arr_tree['fields'], + ], + + 'table' => $this->loadResYML('updCompName'), + 'bootom_buttons'=>$report_data, + ]; + $report = $k2->ins_comp('k2tree_frame'); + + $rez = $report->getTreeTable($params); + + $rez .= ''; + + return $rez; + } + + function insCompVer($arr_info) + { + global $k2; + $compnameid = $this->getID(); + + $find = $k2->sql->sel('SELECT * FROM updCompName WHERE (comp_name=:comp_name);', ['comp_name'=>$arr_info['comp_name']]); + + //если данных нет то вставляем + if ($find['data'] == []){ + + $r = $k2->sql->ins_arr( + ['table' => 'updCompName', + 'fields' => [ + 'compnameid' => $compnameid, + 'sysid' => '1', + 'comp_name' => $arr_info['comp_name'], + 'short_descr' => $arr_info['short_descr'], + 'description' => $arr_info['description'], + 'datecreate' => '{now}', + 'dateupdate' => '{now}', + 'typecompid' =>'f6a87db0c71986924d64e71e2ca291f9', + 'ordnum' => 'SELECT MAX(ordnum)+1', + 'is_del' => 0 + ] + ] + ); + if($r['err']!==''){ + $rez['err'] = $rez['err']; + return $rez; + } + +// $find1 = $k2->sql->sel('SELECT * FROM updCompName WHERE (comp_name=:comp_name);', ['comp_name'=>$arr_info['comp_name']]); +// +// //если данных нет то вставляем +// if ($find1['data'] == []){ + $compid = $this->getID(); + + $arr_ver = explode('.', $arr_info['version']); + + $r = $k2->sql->ins_arr( + ['table' => 'updCompVer', + 'fields' => [ + 'compid' => $compid, + 'compnameid' => $compnameid, + 'versionid' => '1', + 'short_descr' => $arr_info['short_descr'], + 'description' => $arr_info['description'], + 'datecreate' => '{now}', + 'dateupdate' => '{now}', + 'ver1' => $arr_ver[0], + 'ver2' => $arr_ver[2], + 'ver3' => $arr_ver[3], + 'ver4' => $arr_ver[4], + 'ordnum' => 'SELECT MAX(ordnum)+1', + 'is_del' => 0 + ] + ] + ); + if($r['err']!==''){ + $rez['err'] = $rez['err']; + return $rez; + } +// } + } + return $rez; + } + + + // Возвращаем контент + function content(){ + global $k2; + + + + $event = $k2->get('event'); + + + $rez .= $this->showUpdateTables(); + + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/info.yml b/k2shop/k2shop/app/app/k2/k2updates/res/info.yml new file mode 100644 index 0000000..bc2ca2c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2updates" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/menu.yml b/k2shop/k2shop/app/app/k2/k2updates/res/menu.yml new file mode 100644 index 0000000..6c9c008 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/menu.yml @@ -0,0 +1,68 @@ +0: + category: + parent: root + name: k2updates + caption: Обновления + iconclass: fa fa-database + + elements: + updSys: + name: updSys + caption: Системы + url: "?adm=k2updates_route&r=updSys" + command: + iconclass: +# updVersion: +# name: updVersion +# caption: Версии +# url: "?adm=k2updates_route&r=updVersion" +# command: +# iconclass: +# updCompName: +# name: updCompName +# caption: Компоненты +# url: "?adm=k2updates_route&r=updCompName" +# command: +# iconclass: +# updCompVer: +# name: updCompVer +# caption: Версии компонент +# url: "?adm=k2updates_route&r=updCompVer" +# command: +# iconclass: +# updFiles: +# name: updFiles +# caption: Файлы +# url: "?adm=k2updates_route&r=updFiles" +# command: +# iconclass: +# updTypeComp: +# name: updTypeComp +# caption: Типы компонент +# url: "?adm=k2updates_route&r=updTypeComp" +# command: +# iconclass: + +1: + category: + parent: root + name: k2updates + caption: Обновления Клиент + iconclass: fa fa-database + + elements: + + clentsys: + name: clentsys + caption: Клиент Системы + url: "?adm=k2updates_client&r=updSys" + command: + iconclass: + + clentcomp: + name: clentcomp + caption: Клиент Компонеты + url: "?adm=k2updates_client&r=updCompName" + command: + iconclass: + diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/updCompName.yml b/k2shop/k2shop/app/app/k2/k2updates/res/updCompName.yml new file mode 100644 index 0000000..6478360 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/updCompName.yml @@ -0,0 +1,126 @@ +select: SELECT compnameid, sysid, comp_name, short_descr, description, datecreate, dateupdate, ordnum, icon, is_del, comment, cena, typecompid FROM updCompName +#where: +where: "where (sysid='{masterid}')" +getmaster: true +masterid: sysid +table: updCompName +height: 450 +rows: 50 +sortname: comp_name +detile: updCompVer +sortorder: asc +caption: Названия компонент +fields: + compnameid: + field: compnameid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + sysid: + field: sysid + caption: Система + width: 100 + readonly: false + hidden: false + align: left + hidden: true + type_field: DropDown + multy: false + sql: SELECT sysid AS k, sysname AS v FROM updSys + + comp_name: + field: comp_name + caption: Название + width: 100 + readonly: false + hidden: false + align: left + + short_descr: + field: short_descr + caption: Короткое описание + width: 250 + readonly: false + hidden: false + align: left + type_field: textarea + + description: + field: description + caption: Описание + width: 250 + readonly: false + hidden: false + align: left + type_field: textarea + + cena: + field: cena + caption: Цена + width: 130 + readonly: true + align: right + + datecreate: + field: datecreate + caption: Дата создания + width: 130 + readonly: true + align: center + daf_value: date("d.m.Y") + type_field: datetime + + dateupdate: + field: dateupdate + caption: Дата обновления + width: 130 + readonly: true + align: center + type_field: datetime + + icon: + field: icon + caption: Изображение + width: 100 + readonly: false + params: + height: 100 + type_field: file + upload_dir: public/img + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox + ordnum: + field: ordnum + caption: № вставки + width: 50 + readonly: false + align: right + comment: + field: comment + caption: Комментарий + width: 250 + readonly: false + hidden: false + align: left + + + +# typecompid: +# field: typecompid +# caption: Тип компоненты +# width: 130 +# readonly: true +# align: left +# type_field: DropDown +# multy: false +# sql: SELECT typecompid AS k, typename AS v FROM updTypeComp \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/updCompVer.yml b/k2shop/k2shop/app/app/k2/k2updates/res/updCompVer.yml new file mode 100644 index 0000000..c1bf415 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/updCompVer.yml @@ -0,0 +1,142 @@ +select: + SELECT cv.compverid, cv.versionid, ver1, ver2, ver3, ver4, + cv.datecreate, cv.dateupdate, cv.short_descr, cv.description, + cv.ordnum, cv.is_del, cv.compnameid, cv.comment, cn.comp_name + + FROM updCompVer cv + + LEFT JOIN updCompName cn + ON cn.compnameid = cv.compnameid + +where: "where (cv.compnameid='{masterid}')" +getmaster: true +masterid: compnameid +table: updCompVer +height: 250 +sortname: compverid +sortorder: asc +caption: Версии компонент +fields: + compid: + field: compverid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + versionid: + field: versionid + caption: Версия
      системы + width: 100 + readonly: true + hidden: false + align: center + hidden: true + comp_name: + field: comp_name + caption: Название + width: 100 + readonly: true + hidden: false + align: left + ver1: + field: ver1 + caption: ver1 + width: 50 + readonly: false + hidden: false + align: right + + ver2: + field: ver2 + caption: ver2 + width: 50 + readonly: false + hidden: false + align: right + + ver3: + field: ver3 + caption: ver3 + width: 50 + readonly: false + hidden: false + align: right + + ver4: + field: ver4 + caption: ver4 + width: 50 + readonly: false + hidden: false + align: right + + datecreate: + field: datecreate + caption: Дата создания + width: 130 + readonly: false + align: center + daf_value: date("d.m.Y") + type_field: datetime + + dateupdate: + field: dateupdate + caption: Дата обновления + width: 130 + readonly: false + align: center + daf_value: date("d.m.Y") + type_field: datetime + disabled: true + + short_descr: + field: short_descr + caption: Краткое описание + width: 250 + readonly: false + hidden: false + align: center + type_field: textarea + + description: + field: description + caption: Описание + width: 250 + readonly: false + hidden: false + align: right + type_field: textarea + + ordnum: + field: ordnum + caption: № вставки + width: 75 + readonly: false + align: right + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox + +# compnameid: +# field: compnameid +# caption: Компонента +# width: 150 +# readonly: false +# align: right + + comment: + field: comment + caption: Комментарий + width: 150 + readonly: false + hidden: false + align: left + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/updFiles.yml b/k2shop/k2shop/app/app/k2/k2updates/res/updFiles.yml new file mode 100644 index 0000000..088d400 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/updFiles.yml @@ -0,0 +1,57 @@ +select: SELECT sysid, filename, comment, datecreate, dateupdate, is_del, versionid, compverid FROM updFiles +where: +table: updFiles +height: 250 +sortname: sysid +sortorder: asc +caption: Файлы обновления +fields: + sysid: + field: sysid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + filename: + field: filename + caption: Название + width: 250 + readonly: false + hidden: false + align: left + + comment: + field: comment + caption: Комментарий + width: 250 + readonly: false + hidden: false + align: left + + datecreate: + field: datecreate + caption: Дата создания + width: 130 + readonly: true + align: center + daf_value: date("d.m.Y") + type_field: datetime + + dateupdate: + field: dateupdate + caption: Дата обновления + width: 130 + readonly: true + align: center + type_field: datetime + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/updSys.yml b/k2shop/k2shop/app/app/k2/k2updates/res/updSys.yml new file mode 100644 index 0000000..585a382 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/updSys.yml @@ -0,0 +1,84 @@ +select: SELECT sysid, parent_sysid, sysname, short_descr, description, is_del, ordnum, comment, cena FROM updSys +where: +table: updSys +height: 250 +sortname: sysid +detile: updVersion,updCompName +sortorder: asc +caption: Системы +fields: + sysid: + field: sysid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + parent_sysid: + field: parent_sysid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + sysname: + field: sysname + caption: Название + width: 150 + readonly: false + hidden: false + align: left + + short_descr: + field: short_descr + caption: Короткое описание + width: 250 + readonly: false + hidden: false + align: left + + description: + field: description + caption: Описание + width: 250 + readonly: false + hidden: false + align: left + type_field: textarea + + +# ordnum: +# field: ordnum +# caption: № вставки +# width: 75 +# readonly: false +# align: right + + + + cena: + field: cena + caption: Цена + width: 130 + readonly: false + align: right + + comment: + field: comment + caption: Комментарий + width: 130 + readonly: false + align: left + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox + \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/updTypeComp.yml b/k2shop/k2shop/app/app/k2/k2updates/res/updTypeComp.yml new file mode 100644 index 0000000..af64660 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/updTypeComp.yml @@ -0,0 +1,24 @@ +select: SELECT typecompid, typename FROM updTypeComp +where: +table: updTypeComp +height: 250 +sortname: typecompid +sortorder: asc +caption: Тип компонеты +fields: + typecompid: + field: typecompid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + typename: + field: typename + caption: Название + width: 250 + readonly: false + hidden: false + align: left \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/updVersion.yml b/k2shop/k2shop/app/app/k2/k2updates/res/updVersion.yml new file mode 100644 index 0000000..f3fe1be --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/updVersion.yml @@ -0,0 +1,154 @@ +select: SELECT versionid, sysid, ver1, ver2, ver3, ver4, datecreate, dateupdate, short_descr, description, ordnum, is_del, comment FROM updVersion +where: "where (sysid='{masterid}')" +getmaster: true +masterid: sysid +table: updVersion +height: 250 +rows: 10 +sortname: versionid +sortorder: asc +caption: Версии систем +fields: + versionid: + field: versionid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + +# sysid: +# field: sysid +# caption: Система +# width: 100 +# readonly: false +# hidden: false +# align: center +# type_field: DropDown +# multy: false +# sql: SELECT sysid AS k, sysname AS v FROM updSys + + ver1: + field: ver1 + caption: ver1 + width: 50 + readonly: false + hidden: false + align: right + + ver2: + field: ver2 + caption: ver2 + width: 50 + readonly: false + hidden: false + align: right + + ver3: + field: ver3 + caption: ver3 + width: 50 + readonly: false + hidden: false + align: right + + ver4: + field: ver4 + caption: ver4 + width: 50 + readonly: false + hidden: false + align: right + + datecreate: + field: datecreate + caption: Дата создания + width: 130 + readonly: true + align: right + daf_value: date("d.m.Y") + type_field: datetime + + dateupdate: + field: dateupdate + caption: Дата обновления + width: 130 + readonly: true + align: right + type_field: datetime + + short_descr: + field: short_descr + caption: Короткое описание + width: 250 + readonly: false + hidden: false + align: left + type_field: textarea + + description: + field: description + caption: Описание + width: 250 + readonly: false + hidden: false + align: left + type_field: textarea + + ordnum: + field: ordnum + caption: № вставки + width: 50 + readonly: false + align: right + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox + + comment: + field: comment + caption: Комментарий + width: 150 + readonly: false + hidden: false + align: left + +# file: +# field: file +# caption: Upload +# width: 50 +# readonly: true +# align: left +## type_field: file +## upload_dir: var/updates +# hidden: true +# +# download: +# field: download +# caption: Download +# width: 100 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: '(false)' +# target2: _self +# caption2: "" +# +# upload: +# field: upload +# caption: Upload +# width: 100 +# readonly: true +# align: center +# type_field: condition +# cond: +# exp: '(false)' +# target2: _self +# caption2: "" \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/res/update.yml b/k2shop/k2shop/app/app/k2/k2updates/res/update.yml new file mode 100644 index 0000000..bfaebe2 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/res/update.yml @@ -0,0 +1,74 @@ +select: SELECT updateid, update_name, version, description, icon, datecreate, dateupdate, is_del FROM k2update +where: +table: k2update +height: 250 +sortname: updateid +sortorder: asc +caption: Обновления +fields: + updateid: + field: updateid + caption: ID + width: 60 + hidden: true + readonly: true + align: center + required: true + + update_name: + field: update_name + caption: Название + width: 250 + readonly: false + hidden: false + align: center + + version: + field: version + caption: Версия + width: 250 + readonly: false + hidden: false + align: center + + description: + field: description + caption: Описание + width: 450 + readonly: false + hidden: false + align: center + type_field: textarea + + icon: + field: icon + caption: Изображение + width: 150 + readonly: false + params: + height: 100 + type_field: file + upload_dir: public/img + + datecreate: + field: datecreate + caption: Дата создания + width: 130 + readonly: true + align: center + daf_value: date("d.m.Y") + + dateupdate: + field: dateupdate + caption: Дата обновления + width: 130 + readonly: true + align: center + + is_del: + field: is_del + caption: Del + width: 50 + readonly: false + align: center + type_field: checkbox \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2updates/ver.yml b/k2shop/k2shop/app/app/k2/k2updates/ver.yml new file mode 100644 index 0000000..582c55f --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2updates/ver.yml @@ -0,0 +1,2 @@ +comp_name: "k2updates" +version: 1.1.1.1 diff --git a/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets.php b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets.php new file mode 100644 index 0000000..c7edc7a --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets.php @@ -0,0 +1,48 @@ +get('comp'); + $c=$k2->get('c'); + + $s=$k2->getComp($comm); + if ($s[0]<>'k2vidgets'){ + return; + } + + $comp=$k2->ins_comp($s[0], $s[1], true); + if ($comp<>''){ + $rez.=$comp->content(); + + return $rez; + } + } + + + + // Возвращаем контент + function content(){ + $rez=$this->oper(); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_box.php b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_box.php new file mode 100644 index 0000000..413f04c --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_box.php @@ -0,0 +1,131 @@ + +
      +
      +

      {value}

      +

      {title}

      +
      +
      + +
      + More info +
      + '; + + public $tempInfoBox=' +
      +
      + +
      + {title} + {value} +
      +
      +
      '; + + public $tempBox=' +
      +
      +
      +

      {title}

      +
      + +
      +
      +
      + {text} +
      +
      +
      '; + +// public $button_params=array( +// 'size'=>3, +// 'value'=>0, +// 'title'=>'New', +// 'icon'=>'bag', +// 'link'=>'#', +// 'bg'=>'green' +// ); + + protected function init_obj(){ + global $k2; + $k2->site->addCSS('bootstrap.min.css', '/k2shop/usr/admin_lte/php/bootstrap/css/bootstrap.min.css'); + $k2->site->addCSS('ionicons.min.css', 'http://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css'); + $k2->site->addCSS('AdminLTE.min.css', '/k2shop/usr/admin_lte/php/dist/css/AdminLTE.css'); + $k2->site->addCSS('_all-skins.min.css', '/k2shop/usr/admin_lte/php/dist/css/skins/_all-skins.min.css'); + + + //$k2->site->addJS('jquery-ui.min.js', 'https://code.jquery.com/ui/1.11.4/jquery-ui.min.js'); + + } + + /** + * Show small boxes + * @param type $size + * @param type $value + * @param type $title + * @param type $icon + * @param type $link + * @param type $bg + * @return type + */ + function showSmallBox($size=3, $value=0, $title='New', $icon='ion ion-stats-bars', $link='#', $bg='bg-yellow'){ + $rez=$this->tempSmallBox; + $params_fm = array('{size}', '{value}', '{title}', '{icon}', '{link}', '{bg}'); + $params_to = array($size, $value, $title, $icon, $link, $bg); + $rez= str_replace($params_fm, $params_to, $rez); + return $rez; + } + + /** + * Show info boxes + * @param type $size + * @param type $value + * @param type $title + * @param type $icon + * @param type $bg + * @return type + */ + function showInfoBox($size=3, $value=0, $title='New', $icon='fa fa-blind', $bg='bg-yellow'){ + $rez=$this->tempInfoBox; + $params_fm = array('{size}', '{value}', '{title}', '{icon}', '{bg}'); + $params_to = array($size, $value, $title, $icon, $bg); + $rez= str_replace($params_fm, $params_to, $rez); + return $rez; + } + + /** + * Show box + * @param type $size + * @param type $type + * @param type $title + * @param type $text + * @return type + */ + function showBox($size=3, $type='box-warning', $title='New', $text='www'){ + $rez=$this->tempBox; + $params_fm = array('{size}', '{type}', '{title}', '{text}'); + $params_to = array($size, $type, $title, $text); + $rez= str_replace($params_fm, $params_to, $rez); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_calendar.php b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_calendar.php new file mode 100644 index 0000000..127b750 --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_calendar.php @@ -0,0 +1,278 @@ + +
      +
      +
      +
      +
      +

      Draggable Events

      +
      +
      + +
      +
      Lunch
      +
      Go home
      +
      Do homework
      +
      Work on UI design
      +
      Sleep tight
      +
      + +
      +
      +
      + +
      + +
      +
      +

      Create Event

      +
      +
      +
      + +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
      + +
      + + +
      + +
      + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      + +
      + +
      + +
      '; + + + protected function init_obj(){ + global $k2; + $k2->site->addCSS('ionicons.min.css', 'http://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css'); + $k2->site->addCSS('AdminLTE.min.css', '/k2shop/usr/admin_lte/php/dist/css/AdminLTE.min.css'); + $k2->site->addCSS('_all-skins.min.css', '/k2shop/usr/admin_lte/php/dist/css/skins/_all-skins.min.css'); + + $k2->site->addCSS('fullcalendar.print.css', '/k2shop/usr/admin_lte/php/plugins/fullcalendar/fullcalendar.print.css'); + $k2->site->addCSS('fullcalendar.min.css', '/k2shop/usr/admin_lte/php/plugins/fullcalendar/fullcalendar.min.css'); + $k2->site->addCSS('dataTables.bootstrap.css', '/k2shop/usr/admin_lte/php/plugins/datatables/dataTables.bootstrap.css'); + $k2->site->addJSEnd('jquery.dataTables.min.js', '/k2shop/usr/admin_lte/php/plugins/datatables/jquery.dataTables.min.js'); + $k2->site->addJSEnd('fullcalendar.min.js', '/k2shop/usr/admin_lte/php/plugins/fullcalendar/fullcalendar.min.js'); + $k2->site->addJSEnd('fastclick.js', '/k2shop/usr/admin_lte/php/plugins/fastclick/fastclick.js'); + $k2->site->addJSEnd('app.min.js', '/k2shop/usr/admin_lte/php/dist/js/app.min.js'); + $k2->site->addJSEnd('demo.js', '/k2shop/usr/admin_lte/php/dist/js/demo.js'); + // $k2->site->addJS('moment.min.js', 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js'); + } + + + function showCalendar(){ + global $k2; + + $rez=$this->tempCalendar; + + + $rez.=''; + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_table.php b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_table.php new file mode 100644 index 0000000..4704cea --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2vidgets/k2vidgets_table.php @@ -0,0 +1,77 @@ + +
      +

      {title}

      +
      + +
      +
      + '; + + + + // Инициализация + function init_obj(){ + global $k2; + $k2->site->addCSS('ionicons.min.css', 'http://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css'); + $k2->site->addCSS('dataTables.bootstrap.css', '/k2shop/usr/admin_lte/php/plugins/datatables/dataTables.bootstrap.css'); + $k2->site->addCSS('jquery.dataTables.min.css', '/k2shop/usr/admin_lte/php/plugins/datatables/jquery.dataTables.min.css'); + $k2->site->addCSS('bootstrap.min.css', '/k2shop/usr/admin_lte/php/bootstrap/css/bootstrap.min.css'); + $k2->site->addJS('app.min.js', '/k2shop/usr/admin_lte/php/dist/js/app.min.js'); + $k2->site->addJS('bootstrap.min.js', '/k2shop/usr/admin_lte/php/bootstrap/js/bootstrap.min.js'); + $k2->site->addJS('dataTables.bootstrap.min.js', '/k2shop/usr/admin_lte/php/plugins/datatables/dataTables.bootstrap.min.js'); + $k2->site->addJS('jquery.dataTables.min.js', '/k2shop/usr/admin_lte/php/plugins/datatables/jquery.dataTables.min.js'); + } + + + function showTable($table, $title='', $tableclass='', $thclass='', $tdclass=''){ + global $k2; + $rez=$this->tempTable; + + $sqlH='SHOW COLUMNS FROM '.$table.' '; + $sql='SELECT * FROM '.$table.' '; + $n=0; + $rez.=''; + $rez .= ''; + foreach($k2->db->query($sqlH) as $head){ + $rez.=''; + $n++; + } + $rez .= ''; + foreach($k2->db->query($sql) as $row){ + $rez .= ''; + for($i=0; $i<$n; $i++){ + $rez .= ''; + } + $rez .= ''; + } + + $rez.='
      '.$head[0].'
      '.$row[$i].'
      ' + ; + + $rez= str_replace('{title}', $title, $rez); + return $rez; + } + + +} \ No newline at end of file diff --git a/k2shop/k2shop/app/app/k2/k2vidgets/res/info.yml b/k2shop/k2shop/app/app/k2/k2vidgets/res/info.yml new file mode 100644 index 0000000..e83f4db --- /dev/null +++ b/k2shop/k2shop/app/app/k2/k2vidgets/res/info.yml @@ -0,0 +1,6 @@ +comp_name: "k2vidgets" +version: 1.1.1.1 +short_descr: +description: +comment: +cena: