LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
28.05.2012, 02:05:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Деинсталляция компонентов  (Прочитано 1728 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Arkadiy
Moderator
*****

Репутация: +244/-5
Offline Offline

Сообщений: 4895


Былененький он зел.


« : 07.10.2009, 12:46:12 »

Столкнулся с такой проблемой: joostina 1.3.0 не удаляет таблицы компонента из БД при удалении компонента. Конкретно Виртуемарт.
за удаление таблиц отвечает функция com_uninstall() в файле \administrator\components\com_virtuemart\uninstall.virtuemart.php

Так вот, чтобы ее подключить надо проинклюдить этот файл. в Joostina за это
отвечает строка

Код:
// Try to find the uninstall file
$filesindir = mosReadDirectory($config->config_absolute_path.DS.ADMINISTRATOR_DIRECTORY.DS.'components'.DS.$row->option,'uninstall');
if(count($filesindir) > 0) {
$uninstall_file = $filesindir[0];
if(file_exists($mosConfig_absolute_path.DS.ADMINISTRATOR_DIRECTORY.DS.'components'.DS.$row->option.DS.$uninstall_file)) {
require_once ($mosConfig_absolute_path.DS.ADMINISTRATOR_DIRECTORY.DS.'components'.DS.$row->option.DS.$uninstall_file);
$uninstallret = com_uninstall();
}
}

в файле
\administrator\components\com_installer\component\component.class.php


Так вот здесь думаю собака и порылась, конкретно в
$uninstall_file = $filesindir[0];

Почему uninstall_file должен быть первым в списке файлов?
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #1 : 07.10.2009, 12:57:16 »

Ну если файлов, содержащих в имени uninstall несколько, то вполне можно взять первый. Хотя правильнее брать не файл по имени, а на основании информации в xml-файле компонента.
Записан
Arkadiy
Moderator
*****

Репутация: +244/-5
Offline Offline

Сообщений: 4895


Былененький он зел.


« Ответ #2 : 07.10.2009, 13:31:09 »

Извиняюсь, написал не разобравшись с функцией, в таком случае должно работать, но почему-то не цепляет файл. В чем может быть еще причина?
Записан
Arkadiy
Moderator
*****

Репутация: +244/-5
Offline Offline

Сообщений: 4895


Былененький он зел.


« Ответ #3 : 07.10.2009, 13:36:36 »

Проверил, все определяется нормально, значит не там роюсь.

Smart спасибо. Azn
Записан
Arkadiy
Moderator
*****

Репутация: +244/-5
Offline Offline

Сообщений: 4895


Былененький он зел.


« Ответ #4 : 07.10.2009, 13:41:56 »

$filesindir = mosReadDirectory($config->config_absolute_path
if(file_exists($mosConfig_absolute_path

Почему-то в первом случае абсолютный путь $config->config_absolute_path, во втором $mosConfig_absolute_path.
А объявления глобальной переменной $mosConfig_absolute_path нету в функции. Может здесь косяк?
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #5 : 07.10.2009, 13:43:13 »

А объявления глобальной переменной $mosConfig_absolute_path нету в функции. Может здесь косяк?
вполне возможно, надо послушать, что скажет boston.
Записан
boston
Moderator
*****

Репутация: +222/-3
Offline Offline

Пол: Мужской
Сообщений: 2699



« Ответ #6 : 07.10.2009, 13:44:08 »

Хех, наш косяк, спасибо что заметили, исправим Wink
Записан
Arkadiy
Moderator
*****

Репутация: +244/-5
Offline Offline

Сообщений: 4895


Былененький он зел.


« Ответ #7 : 07.10.2009, 13:46:19 »

Поправил
Код:
// Try to find the uninstall file
$filesindir = mosReadDirectory($config->config_absolute_path.DS.ADMINISTRATOR_DIRECTORY.DS.'components'.DS.$row->option,'uninstall');
if(count($filesindir) > 0) {
$uninstall_file = $filesindir[0];
if(file_exists($config->config_absolute_path.DS.ADMINISTRATOR_DIRECTORY.DS.'components'.DS.$row->option.DS.$uninstall_file)) {
require_once ($config->config_absolute_path.DS.ADMINISTRATOR_DIRECTORY.DS.'components'.DS.$row->option.DS.$uninstall_file);
$uninstallret = com_uninstall();
}
}
Заработало.
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #8 : 07.10.2009, 13:52:27 »

Хех, наш косяк, спасибо что заметили, исправим Wink
сделай ревизию, на использование таких переменных? А вообще, случаи использования необъявленных переменных (а в данном случае именно так и получается) очень легко увидеть в Zend Studio, там удобнейший Code Analyzer для этого есть
Записан
boston
Moderator
*****

Репутация: +222/-3
Offline Offline

Пол: Мужской
Сообщений: 2699



« Ответ #9 : 07.10.2009, 14:21:23 »

Уже качаю )))
Записан
boston
Moderator
*****

Репутация: +222/-3
Offline Offline

Пол: Мужской
Сообщений: 2699



« Ответ #10 : 07.10.2009, 22:30:44 »

Исправлено! Azn
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #11 : 07.10.2009, 23:24:43 »

Исправлено! Azn
позволь полюбопытствовать - много нашлось подобных ситуаций? в смысле насколько полезна и своевременна была ревизия?
Записан
boston
Moderator
*****

Репутация: +222/-3
Offline Offline

Пол: Мужской
Сообщений: 2699



« Ответ #12 : 08.10.2009, 08:38:39 »

Ревизию сделал пока тока начальную, избавился от глобальной переменной $mosConfig_absolute_path и добавил константу JPATH_BASE Wink

Но полная ревизия тока начата, таких штук еще много может быть в коде.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet