Atrus 0 Опубликовано 27 сентября, 2007 Жалоба Share Опубликовано 27 сентября, 2007 Копаюсь в кода VamShop 1.34, разбираюсь где - что, как работает и т.д. Попотно замечаю всякие "интересные" моменты. Если это никому не интересно, скажите, присылать не буду. ;) Файл inc/vam_create_password.inc.php, опечатка. Написано: $pass=vam_RandomString($lenght); а должно быть: $pass=vam_RandomString($length); Файл /inc/vam_db_free_result.inc.php. Функция не обрабатывает случай освобождения кешированного запроса. Полный вариант: function vam_db_free_result(&$db_query) { if (is_array($db_query)) { unset($db_query); return true; } else { return mysql_free_result($db_query); }}[/code] Файл includes/classes/class.inputfilter.php. Тут сложнее. Я, пока в деталях не разобрался, как там работает, но похоже с этим кодом проблема: [code] foreach ($source as $key => $value) // filter element for XSS and other 'bad' code etc. $tmp_key = $key; unset ($source[$key]); $key = $this->remove($this->decode($key)); if ($key != $tmp_key) { return $source; } else { if (is_string($value)) $source[$key] = $this->remove($this->decode($value)); } return $source; Судя по логике работы, пропущены блоки цикла, в результате выполняется (для всего массива) только "$tmp_key = $key;" Вероятно, правильный вариант должен выглядеть как: foreach ($source as $key => $value) { // filter element for XSS and other 'bad' code etc. $tmp_key = $key; unset ($source[$key]); $key = $this->remove($this->decode($key)); if ($key != $tmp_key) { return $source; } else { if (is_string($value)) $source[$key] = $this->remove($this->decode($value)); } } return $source;[/code]Файл lang/russian/russian.php, значение константы NAVBAR_TITLE_LOGIN зависит от "$navigation->snapshot['page']". Проблема в том, что единственная переменная "$navigation" ещё не объявлена, а где объявляется - не объект. Вариант, что это или экземпляр объекта navigationHistory, который нигде не создаётся или $_SESSION['navigation']->snapshot['page'], который в этот момент ещё тоже не существует.Ошибка или реликт прошлого? ;) Ссылка на сообщение Поделиться на другие сайты
Bububu 0 Опубликовано 28 сентября, 2007 Жалоба Share Опубликовано 28 сентября, 2007 Интересно. Присылай Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 28 сентября, 2007 Жалоба Share Опубликовано 28 сентября, 2007 Atrus Спасибо большое! Интересно конечно, даже очень. Внёс исправления в svn, спасибо. А вот насчёт russian.php я даже и не в курсе. Наверное нужно просто оставить одну NAVBAR_TITLE_LOGIN без условия, раз оно не работает! Ссылка на сообщение Поделиться на другие сайты
Atrus 0 Опубликовано 28 сентября, 2007 Автор Жалоба Share Опубликовано 28 сентября, 2007 Тогда продолжим... ;-) lang/russian/russian.php Константы JS_ERROR_NO_PAYMENT_MODULE_SELECTED и TEXT_CLOSE_WINDOW описаны дважды. В описании констант WARNING_INSTALL_DIRECTORY_EXISTS и WARNING_CONFIG_FILE_WRITEABLE используется устаревший массив $HTTP_SERVER_VARS NAVBAR_TITLE_LOGIN похоже и правда реликт. Вероятно стоит оставить лишь значение define('NAVBAR_TITLE_LOGIN', 'Вход'); admin/includes/functions/export_functions.php Функция vam_get_products_price_export. Не описана переменная $show_currencies. судя по всему - недобавлена в список параметров функции. Проверить невозможно, функция ни откуда не вызывается. admin/includes/functions/file_system.php Метод isExtensionSupported, опечатка, написано: $file_extension = substr($fileName, strrpos($file, '.')); должно быть: $file_extension = substr($fileName, strrpos($fileName, '.')); inc/vam_set_customer_status_upgrade.inc.php Переменная $customer_notified не объявлена глобальной. includes/classes/class.inputfilter.php вместо: if (function_exists(html_entity_decode)) { должно быть: if (function_exists('html_entity_decode')) { includes/modules/shipping/dhl.php Метод quote, опечатка, написано: $n == 0; должно быть: $n = 0; includes/modules/address_book_details.php написано: include_once('inc/vam_get_zone_name.inc.php'); include_once('inc/vam_get_country_list.inc.php');[/code] правильнее: [code] include_once(DIR_FS_INC.'vam_get_zone_name.inc.php'); include_once(DIR_FS_INC.'vam_get_country_list.inc.php'); includes/modules/checkout_new_address.php написано: include_once('inc/vam_get_zone_name.inc.php'); include_once('inc/vam_get_country_list.inc.php');[/code] правильнее: [code] include_once(DIR_FS_INC.'vam_get_zone_name.inc.php'); include_once(DIR_FS_INC.'vam_get_country_list.inc.php'); includes/header.php тоже самое, много include и require с путями без констант. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 28 сентября, 2007 Жалоба Share Опубликовано 28 сентября, 2007 Спасибо, все исправления добавил. Только по поводу: admin/includes/functions/export_functions.php Функция vam_get_products_price_export. Не описана переменная $show_currencies. судя по всему - недобавлена в список параметров функции. Проверить невозможно, функция ни откуда не вызывается. Я не стал ничего делать, раз функция не используется. Пусть пока файл поживёт, думаю как-нибудь заняться чисткой, удалить неиспользуемые файлы. inc/vam_set_customer_status_upgrade.inc.php Переменная $customer_notified не объявлена глобальной. А как правильно, просто после: function vam_set_customer_status_upgrade($customer_id){[/code] добавить: [code]global $customer_notified; ?! Ссылка на сообщение Поделиться на другие сайты
Atrus 0 Опубликовано 28 сентября, 2007 Автор Жалоба Share Опубликовано 28 сентября, 2007 Да, именно global... Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 28 сентября, 2007 Жалоба Share Опубликовано 28 сентября, 2007 Спасибо, также добавил в код. Ссылка на сообщение Поделиться на другие сайты
Bububu 0 Опубликовано 28 сентября, 2007 Жалоба Share Опубликовано 28 сентября, 2007 Atrus! Ты взялся за труд Геракла. Авди'евы конюшни огромны.... Берущийся за такое вызывает уважение. Удачи тебе, Atrus! Ссылка на сообщение Поделиться на другие сайты
Atrus 0 Опубликовано 28 сентября, 2007 Автор Жалоба Share Опубликовано 28 сентября, 2007 Браво, Atrus! Так держать! А куда мне деваться? ;-) В этом "ловушка" GPL. Если я не хочу большой гемморой, при накатывании каждого обновления, то я должен поделиться всеми общеполезными вещами. 8) В магазине используются функции такие как:system, exec, chown, chgrp, escapeshellcmd, escapeshellarg которые на некоторых хостингах отключаются, цитрую техподдержку одного из хостингов - "потому что их используют нехорошие люди" От части этих функция не избавиться, т.к. ими пользуются системы резервоного копирования. Впрочем, маленький магазин сможет обойтись и без них, одним phpMyAdmin... Просто предполагается, что раз кто-то ставить магазин, то и хостинг должен быть соответствующий. Не 5 у.е. в год или holm.ru. :) Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 29 сентября, 2007 Жалоба Share Опубликовано 29 сентября, 2007 По-моему, практически ничего из: system, exec, chown, chgrp, escapeshellcmd, escapeshellarg Не используется в магазине, может быть exec и то в резервном копировании только, как сказал Atrus. Так что, мне кажется, не так всё страшно. P.S. Я тут всё пробую magentocommmerce.com запустить, вот где проблема. Так и не могу его установить, не могу никак все необходимые для него системные требования выполнить. Ссылка на сообщение Поделиться на другие сайты
ABerezin 0 Опубликовано 29 сентября, 2007 Жалоба Share Опубликовано 29 сентября, 2007 Саша! А ты в application_top.php замени error_reporting(E_ALL & ~E_NOTICE); на @ini_set('display_errors', '1'); error_reporting(E_ALL); Узнаешь много интересного ;) Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 29 сентября, 2007 Жалоба Share Опубликовано 29 сентября, 2007 Я уже пробовал :) Многие ошибки мне пока не совсем ясны. Ссылка на сообщение Поделиться на другие сайты
Atrus 0 Опубликовано 29 сентября, 2007 Автор Жалоба Share Опубликовано 29 сентября, 2007 Многие ошибки там - это или двойное определение констант или ображение к несуществущей переменной или элементу массива. Ссылка на сообщение Поделиться на другие сайты
ABerezin 0 Опубликовано 29 сентября, 2007 Жалоба Share Опубликовано 29 сентября, 2007 Ага. Иногда это просто не инициализированная переменная, а иногда это Файл inc/vam_create_password.inc.php, опечатка. Написано: $pass=vam_RandomString($lenght); а должно быть: $pass=vam_RandomString($length); Но лучше когда таких сообщений вообще нет, когда код вычищен и вылизан :) Ссылка на сообщение Поделиться на другие сайты
Atrus 0 Опубликовано 5 октября, 2007 Автор Жалоба Share Опубликовано 5 октября, 2007 inc/vam_update_whos_online.inc.php Написано: $wo_full_name = 'Guest'; а можно: $wo_full_name = TEXT_GUEST; Эта функция вызывается только из includes/application_top.php, а там эта константа доступна. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 6 октября, 2007 Жалоба Share Опубликовано 6 октября, 2007 Спасибо, исправил. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 октября, 2007 Жалоба Share Опубликовано 11 октября, 2007 Atrus Твои изменения в /includes/classes/class.inputfilter.php убрал, из-за них в корзине не пересчитывалось количество товара, т.е. если зайти в корзину, указать количество и нажать кнопку обновить, всё оставалось как есть, без изменений. Ссылка на сообщение Поделиться на другие сайты
Atrus 0 Опубликовано 11 октября, 2007 Автор Жалоба Share Опубликовано 11 октября, 2007 Твои изменения в /includes/classes/class.inputfilter.php убрал, из-за них в корзине не пересчитывалось количество товара, т.е. если зайти в корзину, указать количество и нажать кнопку обновить, всё оставалось как есть, без изменений. Понял, буду посмотреть... Ссылка на сообщение Поделиться на другие сайты
author 0 Опубликовано 28 апреля, 2008 Жалоба Share Опубликовано 28 апреля, 2008 В файле admin\module_newsletter.php (Админка - Разное - Инструменты - Письмо с новостями) в SQL запросе CREATE TABLE... не указана кодировка, поэтому таблица module_newsletter_temp_N (N - номер рассылки) создаются в кодировке, указанной на сервере, а не в UTF8. Для устранения в SQL запрос добавил ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci P.S. Аналогично: файл admin\customers_status.php используется при создании группы клиентов (Админка - Покупатели - Группы клиентов), создается таблица personal_offers_by_customers_status_N (N - номер группы), хотя в этой таблице и нет текстовых полей, - все же у себя я исправил Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 28 апреля, 2008 Жалоба Share Опубликовано 28 апреля, 2008 author Спасибо большое, внёс исправления в код, в следующем патче будут исправленные файлы. Вот прицепил на всякий случай сейчас два этих исправленных файла. customers_status.php module_newsletter.php Ссылка на сообщение Поделиться на другие сайты
author 0 Опубликовано 28 апреля, 2008 Жалоба Share Опубликовано 28 апреля, 2008 Не за что :) Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 29 апреля, 2008 Жалоба Share Опубликовано 29 апреля, 2008 Если ещё какие-то ошибки заметите, обязательно сообщайте. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения