Убираем auxpage_ у дополнительныйх страниц

В стандартной конфигурации Webasyst Shop-Script ссылки на дополнительные страницы выглядят как {http://mystore.com/auxpage_about/ }

Не очень красиво.

Чтобы это убрать, нужно заменить 1 файл и пересохранить все информационные страницы.

Содержимое файла /published/SC/html/scripts/modules/auxpages/class.auxpages.php нужно заменить следующим:

[php]__getEnabledPages();
$params[‘options’] = array();
foreach ($pages as $page) {
$params[‘options’][$page[‘id’]] = $page[‘name’];
}
if (is_string($params[‘value’]))
$params[‘value’] = explode(‘:’, $params[‘value’]);
return cptsettingview_checkboxgroup($params);
}

function cptsettingserializer_auxpagegroup($params, $post) {
$Register = &Register::getInstance();
if (!$Register->is_set(‘__AUXNAV_SERIALIZED’) && is_array($post[$params[‘name’]])) {
$post[$params[‘name’]] = implode(‘:’, $post[$params[‘name’]]);
$reg = 1;
$Register->set(‘__AUXNAV_SERIALIZED’, $reg);
}
return cptsettingserializer_checkboxgroup($params, $post);
}

class AuxAdministrationController extends ActionsController {

function save_order() {
$scan_result = scanArrayKeysForID($_POST, ‘priority’);
$sql = ‘UPDATE ?#AUX_PAGES_TABLE SET aux_page_priority=? WHERE aux_page_ID=?’;
foreach ($scan_result as $aux_id => $scan_info) {
db_phquery($sql, $scan_info[‘priority’], $aux_id);
}
Message::raiseAjaxMessage(MSG_SUCCESS, ”, ‘order_saved’);
die;
}

function main() {
$moduleEntry = &$this->__params[‘module’];
/* @var $moduleEntry AuxPages */
global $smarty;
set_query(‘safemode=’, ”, true);
if (isset($_GET[‘delete’])) {
safeMode(true);
$moduleEntry->auxpgDeleteAuxPage($_GET[‘delete’]);
RedirectSQ(‘delete=’);
}
if (isset($_GET[‘add_new’])) {
if (isset($_POST[‘save’])) {
$AuxDivision = new Division();
$max_priority = db_phquery_fetch(DBRFETCH_FIRST, ‘SELECT MAX(aux_page_priority) FROM ?#AUX_PAGES_TABLE’) + 1;
if (!isset($_POST[‘aux_page_slug’]) || trim($_POST[‘aux_page_slug’]) == ”) {
$_POST[‘aux_page_slug’] = LanguagesManager::ml_getFieldValue(‘aux_page_name’, $_POST);
$_POST[‘aux_page_slug’] = make_clean_slug($_POST[‘aux_page_slug’], ”, AUX_PAGES_TABLE, ‘aux_page_slug’);
} else {
$_POST[‘aux_page_slug’] = make_clean_slug($_POST[‘aux_page_slug’], ”, AUX_PAGES_TABLE, ‘aux_page_slug’);
}
$AuxID = $moduleEntry->auxpgAddAuxPage($_POST, $_POST, $_POST, $_POST, isset($_POST[‘aux_page_enabled’]) ? 1 : 0, $max_priority, $_POST[‘aux_page_slug’]);
$TitlePageID = DivisionModule::getDivisionIDByUnicKey(‘TitlePage’);
$moduleEntry->addAuxPageNameLocal($AuxID, $_POST);
$AuxDivision->setName($moduleEntry->getAuxPageLocalID($AuxID));
$AuxDivision->setEnabled(0);
$AuxDivision->setParentID($TitlePageID);
$AuxDivision->setUnicKey($_POST[‘aux_page_slug’]);
//$AuxDivision->setUnicKey(‘auxpage_’.$AuxID);//or set aux_slug
$AuxDivision->save();
$AuxDivision->addInterface($moduleEntry->getConfigID() . ‘_auxpage_’ . $AuxID);
RedirectSQ(‘add_new=’);
}
$smarty->assign(‘add_new’, 1);
} elseif (isset($_GET[‘edit’])) {
if (isset($_POST[‘save’])) {
safeMode(true);
if (!isset($_POST[‘aux_page_slug’]) || strlen(trim($_POST[‘aux_page_slug’])) == 0) {
$_POST[‘aux_page_slug’] = LanguagesManager::ml_getFieldValue(‘aux_page_name’, $_POST);
$_POST[‘aux_page_slug’] = make_clean_slug($_POST[‘aux_page_slug’], ”, DIVISIONS_TBL, ‘xUnicKey’, ‘xName’, $moduleEntry->getAuxPageLocalID($_GET[‘edit’]));
} else {
$_POST[‘aux_page_slug’] = make_clean_slug($_POST[‘aux_page_slug’], ”, DIVISIONS_TBL, ‘xUnicKey’, ‘xName’, $moduleEntry->getAuxPageLocalID($_GET[‘edit’]));
}
$moduleEntry->auxpgUpdateAuxPage($_GET[‘edit’], $_POST, $_POST, $_POST, $_POST, isset($_POST[‘aux_page_enabled’]) ? 1 : 0, $_POST[‘aux_page_slug’]);
$moduleEntry->updateAuxPageNameLocal($_GET[‘edit’], $_POST);
RedirectSQ(‘edit=’);
}
$aux_page = $moduleEntry->auxpgGetAuxPage($_GET[‘edit’]);
$smarty->assign(‘aux_page’, $aux_page);
$smarty->assign(‘edit’, 1);
} else {
$aux_pages = $moduleEntry->auxpgGetAllPageAttributes();
$smarty->assign(‘aux_pages’, $aux_pages);
}
//set sub-department template
$smarty->assign(‘admin_sub_dpt’, ‘conf_aux_pages.tpl.html’);
}

}

class AuxPages extends ComponentModule {

function getInterface() {
$Args = func_get_args();
$_InterfaceName = array_shift($Args);
$Results = array();
if (isset($this->Interfaces[$_InterfaceName])) {
$SubPatterns = array();
if (preg_match(‘|auxpage_(d+)|’, $_InterfaceName, $SubPatterns)) {
global $smarty;
$AuxInfo = $this->auxpgGetAuxPage($SubPatterns[1]);
if (!$AuxInfo[‘aux_page_enabled’])
RedirectSQ(‘?’);
$page_title = $AuxInfo[“aux_page_name”] . ” | ” . CONF_SHOP_NAME;
$meta_tags = “”;
if ($AuxInfo[“meta_description”] != “”)
$meta_tags .= ‘‘ . “n”;
if ($AuxInfo[“meta_keywords”] != “”)
$meta_tags .= ‘‘ . “n”;
$smarty->assign(“page_title”, $page_title);
$smarty->assign(“page_meta_tags”, $meta_tags);
$smarty->assign(‘aux_page’, $AuxInfo[‘aux_page_text’]);
$smarty->assign(‘main_content_template’, $this->getTemplatePath(‘frontend/aux_page.html’));
return ”;
}
$ParamsNum = count($Args);
$EvalParams = array();
for ($_i = 0; $_i < $ParamsNum; $_i++) { $EvalParams[] = '$Args[' . $_i . ']'; } $this->__clearInterfaceStack();
$this->__pushToStack(‘info’, $this->Interfaces[$_InterfaceName]);
$this->__pushToStack(‘call_params’, $Args);
eval(‘$Results = $this->’ . $this->Interfaces[$_InterfaceName][‘method’] . ‘(‘ . implode(‘,’, $EvalParams) . ‘);’);
}
return $Results;
}

function initInterfaces() {
$this->Interfaces = array(
‘fauxpage’ => array(
‘name’ => ‘pgn_auxpages’,
‘method’ => ‘methodFAuxPage’,
),
‘bauxpage’ => array(
‘name’ => ‘pgn_auxpages_admin’,
‘method’ => ‘methodBAuxPage’,
),
);
$sql = ‘SELECT *, ‘ . LanguagesManager::sql_prepareField(‘aux_page_name’) . ‘ AS aux_page_name FROM ?#AUX_PAGES_TABLE ORDER BY aux_page_name ASC’;
$Result = $this->dbHandler->ph_query($sql);
while ($_Row = $Result->fetchAssoc()) {
$this->Interfaces[‘auxpage_’ . $_Row[‘aux_page_ID’]] = array(
‘name’ => $_Row[‘aux_page_name’],
‘method’ => ‘auxpage_’ . $_Row[‘aux_page_ID’],
);
}
$this->__registerComponent(‘auxpages_navigation’, ‘cpt_lbl_auxpages_navigation’, array(TPLID_GENERAL_LAYOUT), null, array(
‘select_pages’ => array(‘type’ => ‘select’, ‘params’ => array(‘name’ => ‘select_pages’, ‘title’ => ”, ‘options’ => array(‘all’ => ‘cpt_lbl_selectaux_type_all’, ‘selected’ => ‘cpt_lbl_selectaux_type_selected’), ‘onchange’ => ‘var objDiv = getLayer(“cpt-layer-auxpages”); objDiv.style.display=select_getCurrValue(this)==”all”?”none”:””;’, ‘default_value’ => ‘all’)),
‘auxpages’ => array(‘type’ => ‘auxpagegroup’, ‘params’ => array(‘name’ => ‘auxpages’, ‘title’ => ‘cpt_lbl_selectauxpages’, ‘value’ => ”, ‘options’ => array(), ‘before_load’ => ‘‘)),
‘view’ => array(‘type’ => ‘radiogroup’, ‘params’ => array(‘name’ => ‘view’, ‘title’ => ‘cpt_lbl_view’, ‘value’ => ‘vertical’, ‘options’ => array(‘vertical’ => ‘cpt_lbl_vertical’, ‘horizontal’ => ‘cpt_lbl_horizontal’))),
));
}

function __getEnabledPages() {
$sql = ‘SELECT ‘ . LanguagesManager::sql_prepareField(‘aux_page_name’) . ‘ AS name, `aux_page_ID` AS `id`, `aux_page_slug` FROM ?#AUX_PAGES_TABLE WHERE aux_page_enabled=1 ORDER BY `aux_page_priority` ASC’;
// return db_phquery_array($sql);
$Register = &Register::getInstance();
$DBHandler = &$Register->get(VAR_DBHANDLER);
/* @var $DBHandler DataBase */
$DBRes = $DBHandler->ph_query($sql);
$pages = $DBRes->fetchArrayAssoc();
return $pages;
}

function cpt_auxpages_navigation() {
list($local_settings) = $this->__getFromStack(‘call_params’);
if (isset($local_settings[‘local_settings’]))
$local_settings = $local_settings[‘local_settings’];
$pages = $this->__getEnabledPages();
if (!count($pages))
return;
$allowed_pages = explode(‘:’, $local_settings[‘auxpages’]);
print ‘

‘;
}

function methodBAuxPage() {
ActionsController::exec(‘AuxAdministrationController’, array(ACTCTRL_POST, ACTCTRL_GET, ACTCTRL_AJAX, ACTCTRL_CUST), array(‘module’ => &$this));
}

function methodFAuxPage() {
global $smarty;
$aux_page = $this->auxpgGetAuxPage($_GET[‘show_aux_page’]);
if ($aux_page) {
$smarty->assign(‘page_body’, $aux_page[‘aux_page_text’]);
$smarty->assign(‘show_aux_page’, $_GET[‘show_aux_page’]);
$smarty->assign(‘main_content_template’, ‘show_aux_page.tpl.html’);
} else {
$smarty->assign(‘main_content_template’, ‘page_not_found.tpl.html’);
}
}

function auxpgGetAllPageAttributes() {
$sql = ‘SELECT * FROM ?#AUX_PAGES_TABLE ORDER BY aux_page_priority ASC’;
$q = db_phquery($sql);
$data = array();
while ($row = db_fetch_row($q)) {
LanguagesManager::ml_fillFields(AUX_PAGES_TABLE, $row);
$data[] = $row;
}
return $data;
}

function auxpgGetAuxPage($aux_page_ID) {
$sql = ‘SELECT * FROM ?#AUX_PAGES_TABLE WHERE aux_page_ID=?’;
$q = db_phquery($sql, $aux_page_ID);
$row = db_fetch_row($q);
LanguagesManager::ml_fillFields(AUX_PAGES_TABLE, $row);
if (!strlen($row[‘aux_page_slug’])) {
$row[‘aux_page_slug’] = $row[‘aux_page_ID’];
}
return $row;
}

function auxpgUpdateAuxPage($aux_page_ID, $aux_page_name, $aux_page_text, $meta_keywords, $meta_description, $aux_page_enabled, $aux_page_slug) {
$fields = ”;
$name_inj = LanguagesManager::sql_prepareFields(‘aux_page_name’, $aux_page_name);
foreach ($name_inj[‘fields’] as $field)
$fields.=$field . ‘=?,’;
$text_inj = LanguagesManager::sql_prepareFields(‘aux_page_text’, $aux_page_text);
foreach ($text_inj[‘fields’] as $field)
$fields.=$field . ‘=?,’;
$mkeywords_inj = LanguagesManager::sql_prepareFields(‘meta_keywords’, $meta_keywords);
foreach ($mkeywords_inj[‘fields’] as $field)
$fields.=$field . ‘=?,’;
$mdescription_inj = LanguagesManager::sql_prepareFields(‘meta_description’, $meta_description);
foreach ($mdescription_inj[‘fields’] as $field)
$fields.=$field . ‘=?,’;
$sql = ‘UPDATE ?#AUX_PAGES_TABLE SET ‘ . $fields . ‘`aux_page_enabled`=?, `aux_page_slug`=? WHERE aux_page_ID=?’;
db_phquery_array($sql, $name_inj[‘values’], $text_inj[‘values’], $mkeywords_inj[‘values’], $mdescription_inj[‘values’], $aux_page_enabled, $aux_page_slug, $aux_page_ID);
}

function auxpgAddAuxPage($aux_page_name, $aux_page_text, $meta_keywords, $meta_description, $aux_page_enabled, $aux_page_priority, $aux_page_slug) {
$name_inj = LanguagesManager::sql_prepareFields(‘aux_page_name’, $aux_page_name, true);
$text_inj = LanguagesManager::sql_prepareFields(‘aux_page_text’, $aux_page_text, true);
$mkeywords_inj = LanguagesManager::sql_prepareFields(‘meta_keywords’, $meta_keywords, true);
$mdescription_inj = LanguagesManager::sql_prepareFields(‘meta_description’, $meta_description, true);
$fields = $name_inj[‘fields_list’] . ‘,’ . $text_inj[‘fields_list’] . ‘,’;
$fields.=$mkeywords_inj[‘fields_list’] . ‘,’ . $mdescription_inj[‘fields_list’];
$values_place = str_repeat(‘?,’, count($name_inj[‘values’]) + count($text_inj[‘values’]) +
count($mkeywords_inj[‘values’]) + count($mdescription_inj[‘values’]));

$sql = “INSERT ?#AUX_PAGES_TABLE ( {$fields}, aux_page_enabled, aux_page_priority, aux_page_slug ) “;
$sql.=”VALUES({$values_place}?,?,?)”;
db_phquery_array($sql, $name_inj[‘values’], $text_inj[‘values’], $mkeywords_inj[‘values’], $mdescription_inj[‘values’], $aux_page_enabled, $aux_page_priority, $aux_page_slug);
return db_insert_id();
}

function auxpgDeleteAuxPage($aux_page_ID) {
$DivIDs = DivisionModule::getDivisionIDsWithInterface($this->getConfigID() . ‘_auxpage_’ . $_GET[‘delete’]);
DivisionModule::disconnectInterfaces(array($this->getConfigID() => array($_GET[‘delete’])));
foreach ($DivIDs as $_ID) {
$Division = new Division($_ID);
$Division->delete();
}
$sql = ‘DELETE FROM ?#AUX_PAGES_TABLE WHERE aux_page_ID=?’;
db_phquery($sql, $aux_page_ID);
$languages = LanguagesManager::getLanguages();
foreach ($languages as $languageEntry) {
/* @var $languageEntry Language */
$languageEntry->deleteLocal($this->getAuxPageLocalID($aux_page_ID));
}
}

function updateAuxPageNameLocal($aux_page_ID, $data) {
$divisionID = DivisionModule::getDivisionIDByName(‘pgn_ap_’ . $aux_page_ID);
if ($divisionID) {
$AuxDivision = new Division();
/* @var $AuxDivision Division */
$AuxDivision->load($divisionID);
$AuxDivision->setUnicKey((strlen($data[‘aux_page_slug’]) ? $data[‘aux_page_slug’] : $aux_page_ID));
$AuxDivision->save();
}
$languages = LanguagesManager::getLanguages();
foreach ($languages as $languageEntry) {
/* @var $languageEntry Language */
$languageEntry->updateLocal($this->getAuxPageLocalID($aux_page_ID), isset($data[‘aux_page_name’ . ‘_’ . $languageEntry->iso2]) ? $data[‘aux_page_name’ . ‘_’ . $languageEntry->iso2] : ”);
}
}

function addAuxPageNameLocal($aux_page_ID, $data) {
$languages = LanguagesManager::getLanguages();
foreach ($languages as $languageEntry) {
/* @var $languageEntry Language */
$languageEntry->addLocal($this->getAuxPageLocalID($aux_page_ID), isset($data[‘aux_page_name’ . ‘_’ . $languageEntry->iso2]) ? $data[‘aux_page_name’ . ‘_’ . $languageEntry->iso2] : ”, LOCALTYPE_HIDDEN, ‘lsgr_general’);
}
}

function getAuxPageLocalID($aux_page_ID) {
return “pgn_ap_{$aux_page_ID}”;
}

}

?>[/php]

И не забудьте пересохранить все информационные страницы.

Comments (33)

  1. Pingback: EasyWeb.org.ua - html php css mysql joomla wordpress shop-script etc

  2. Дизайн

    Полезная информация

    Reply
  3. Артем (Post author)

    приятно видеть и вас тут :)

    Reply
  4. arriadna

    Возникла проблемка. Странички ссылочку поменяли, все с этим хорошо, а вот название странички приорело станный вид: Название ? Название магазина (например: Доставка ? Мега-ватт)
    Как это исправить, подскажите.

    Reply
  5. arriadna

    нашла в чем было дело. Может кому пригодится. В этом кусочке кода надо было поменять знак вопроса на дефис или вообще убрать. Уже исправленное на “-”

    global $smarty;
    $AuxInfo = $this->auxpgGetAuxPage($SubPatterns[1]);
    if(!$AuxInfo[‘aux_page_enabled’])RedirectSQ(‘?’);
    $page_title = $AuxInfo[“aux_page_name”].” – “.CONF_SHOP_NAME;
    $meta_tags = “”;

    Reply
  6. Артем (Post author)

    Спасибо!
    Я исправлял эту ошибку в магазинах, но не сообразил, что ее вызвала эта доработка.

    Reply
  7. SeoProfy

    спасибо, реально мне помогло, не мог решить эту задачу, решил погуглить и нашел

    теперь у меня на шопе нет shop.ua/auxpage_nazvanie

    еще раз спасибо

    Reply
  8. Артем (Post author)

    пожалуйста :)
    и не забудьте убрать из карты сайта http://easyweb.org.ua/?p=326

    Reply
  9. Михаил

    После внесения правки у меня появился какой то дурацкий пропуск строки, это сильно портит верстку, подскажите что делать!

    Reply
  10. Артем (Post author)

    дайте ссылку на страницу

    Reply
  11. Oleksandr

    Почему в качестве делимитера в title втулили вопросительный знак? Строка 136 $page_title = $AuxInfo[“aux_page_name”].” ? “.CONF_SHOP_NAME;
    Думаю многие захотят избавиться от него.
    $page_title = $AuxInfo[“aux_page_name”].” – или / или | “.CONF_SHOP_NAME;

    Reply
    1. Артем (Post author)
      1. Oleksandr

        Исправьте, пожалуйста, в коде, ведь меньшинство прочтет все комментарии.

        Reply
  12. Евгений

    Большое спасибо. Полезная весчь :)
    Хочу уточнить, у всех после сохраниения информационной страницы, вместо перечня инф. страниц вылазит пустой белый фон?

    Reply
  13. Артем (Post author)

    это какая-то ошибка. такого быть не должно

    Reply
  14. Анатолий

    Очень полезная статья.
    Только у меня возникла проблема с длинными именами.

    Для страниц с названиями: /payment-and-delivery/ в конец URL’а добавляется автоматически какой-то префикс.
    Например, /payment-and-delivery_mtf/

    Если дефисы убрать – всё работает чётко.

    Reply
  15. Анатолий

    Решил задачу.
    Пришлось удалить и создать заново страницы.
    Всё заработало.

    Спасибо Артёму за хорошие разработки!

    Reply
  16. SADUKEY

    Ай спасибо помогло. А то всё aux да aux. Рекомендую сделать собственные страницы ошибки. Довольно интересно получается.

    Reply
  17. iRedactor

    Скажите, а это решение для всех версия скрипта?

    Reply
  18. Mikke

    после замены файла при сохранении страницы в лог ошибок идет запись: 2010-12-10 10:14. mysql_free_result(): supplied resource is not a valid MySQL result resource File: /home/f/freshcomp/shop/public_html/published/SC/html/scripts/classes/class.database.php Line: 314 Error #: 2
    2010-12-10 10:14. in_array() [function.in-array]: Wrong datatype for second argument File: /home/f/freshcomp/shop/public_html/published/SC/html/scripts/core_functions/functions.php Line: 1383 Error #: 2

    Reply
  19. Назар

    Сделал на мебельном магазине, все сработало.
    Спасибо за помощь!

    Reply
  20. Catomaniac

    Большое спасибо! С Вами появляется интерес рыться в коде этого магазина самому!

    Reply
  21. Catomaniac

    Подскажите, после всех этих изменений наблюдаю глюки в формировании sitemap. Cсылки на все информационные таблицы выглядят как /index.php?ukey=auxpage_
    Не подскажете что поменять, чтобы формировало правильно?

    Reply
    1. Артем (Post author)
  22. Nikolay

    В версии 3.05 файл class.auxpages.php немного отличается.
    размер 15143 в 2.95 версии и 14836 в 3,05 версии.
    Не испортит ли данная доработка работу сайта?

    Reply
    1. Артем (Post author)

      на версии выше 300 эта доработка не проверялась

      Reply
  23. Денисовский Женя

    А вы могли бы указать места которые нужно исправить в файле class.auxpages.php.
    Или там очень много всего?
    Так бы было удобнее и не конфликтовало с новыми версиями магазинов.

    Спасибо большое за ваш сайт!

    Reply
    1. Артем (Post author)

      если честно, то я уже точно не помню
      там в одном или в двух местах встречается “auxpage_”
      просто эту часто строки нужно удалить, главное аккуратно там с кавычками

      Reply
      1. Денисовский Женя

        Спасибо!

        Reply
  24. Славка

    Всем привет. у меня WebAsyst. файл заменять нельзя, так как он отличается несколькими дополнениями. Изменить нужно следующии строчки в
    /public_html/published/SC/html/scripts/modules/auxpages/class.auxpages.php:


    1 - $AuxDivision->setUnicKey($_POST['aux_page_slug']); (~82 стр.)

    2 - $_POST['aux_page_slug'] = make_clean_slug($_POST['aux_page_slug'],'',DIVISIONS_TBL,'xUnicKey','xName',$moduleEntry->getAuxPageLocalID($_GET['edit'])); (~96 стр.)

    3 - $_POST['aux_page_slug'] = make_clean_slug($_POST['aux_page_slug'],'',DIVISIONS_TBL,'xUnicKey','xName',$moduleEntry->getAuxPageLocalID($_GET['edit'])); (~98 стр.)

    4 - $AuxDivision->setUnicKey((strlen($data['aux_page_slug'])?$data['aux_page_slug']:$aux_page_ID)); (~356 стр.)

    5 - print ''.xHtmlSpecialChars($page['name']).''; (~241 стр.)

    6 - DivisionModule::disconnectInterfaces(array($this->getConfigID()=>array($_GET['delete']))); (~333 стр.)

    и тут /public_html/published/SC/html/scripts/modules/adminscreens/_methods/google_sitemap.php:

    http://easyweb.org.ua/?p=326

    /**********************—–*****—–********************/

    принахождении различий в двух файлах пользовался TotalCommander . Файл -> сравнить по содержимому…
    П.С. Спасибо Автору и TC =)

    Reply
    1. аноним

      Славка,спасибо! На версии 3.02 все работает.
      давно собирался убрать этот auxpage.

      Reply
  25. The Best

    Большое человеческое спасибо.

    Reply
  26. Михаил

    Огромное спасибо за полезные советы.

    Вот только …. Трабл.

    Случилась такая неприятность .. после изменения в class.auxpages.php и редакции файла class.furl.php (что бы добавить расширение) появился бак с витриной в контакте. Система не видит больше данной страницы по адресу сайт/вконтакте

    умные люди .. Уважаемый автор .. подскажите пожалуйста … слезно умоляю спасти меня )

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *