LiveStreet Mod Installer v0.3


Вот и новая версия подоспела.
Кто не в курсе, LiveStreet Mod Installer — это OpenSource система управления пакетами модификаций и модулей для LiveStreet CMS. Распространяется по стандартной общественной лицензии ограниченного применения GNU/LGPL.

Тема версии 0.1
Тема версии 0.2

Изменения в новой версии v0.3.90618
— Оптимизирован код.
— Новый дизайн.
— Обновлены и добавлены новые обработчики событий и ошибок, а так же новая система контроля модифицирования.
— Изменено отображение лога инсталляции и дизайн при установке.
— Система не даст установить модификацию, если указанная в инсталляторе версия не поддерживается версией установленного LiveStreet.
— Теперь вся служебная информация об установленных модифкациях хранится в базе (установка служебной таблицы БД проводится автоматически в фоновом режиме при попытке установить модификацию).
— Добавлен тег readme для уведомлений пользователя при установке. См. спецификацию.
— Добавлен тег author для регистрации автора модификации. Так же отображается при установке. См. спецификацию.
— Перевод XML парсера системы на нативный парсер PHP5 — SimpleXML.
— Файл модуля перемещен в директорию внешних библиотек.
— Система ведёт учёт установленных модификаций и не позволяет устанавливать модификацию с той же или более ранней версией.
— В разделе «Установленные пакеты» показывается листинг установленных модификаций.

Скачать модуль
Установка как всегда — скопировать все папки в корень.

Замечу пункт с «установка служебной таблицы БД проводится автоматически в фоновом режиме при попытке установить модификацию». Подобную систему я встречаю впервые и хвалюсь хвалюсь :)

Выкладываю новую версию, ибо не вижу смысла зажимать. Теперь это действительно полноценный инсталлятор, почти что заново переписанный. Но пока еще не реализовано удаление модификаций, это я обещаю сделать в следующей версии (скорее это будет чуть ли не единственное дополнение).

Ну и дополнение к спецификации.
<author></author>

Технический тег, указывающий на автора модификации. С данным тегом существует еще одна интересная вкусность, увидите сами.

<readme></readme>

Тег для показа сообщения, появляющееся при установке модификации.

Ну и по традиции. Модификация Хак «Валидация форм при регистрации», с новыми фичами новой версии. Напомню, что прежние модификации (если они есть) так же полностью совместимы с текущей версией.

Ну и напоследок поделюсь планами на будущее:
— Возможность удаления модификации;
— Поддержка пакетов *.zip и *.tar.gz для крупных модификаций в т.ч. с графикой (шаблоны?);
— Собственный сервис для онлайн установки модификаций из вашей админ-панели;
— Интеграция в модуль «Админпанель». Постараюсь договориться с автором;
— Локализация листинга установки;
— Автоматическая подставновка префикса в теге sql;

Ну и попрошу на этот раз поактивней поучаствовать в обсуждении проекта. Я уже вышел на релизную прямую :)



UPD1: Сделал инсталлятор для хака Скрытие профиля от посторонних. Скачать (проверьте пожалуйста работоспособность модификации, могут возникнуть проблемы с шаблонами).

UPD2: Сделал инсталлятор для хака Заряд пользователя. Скачать (так же не советую ставить на рабочие системы, могут быть баги в самой модификации).

58 комментариев

avatar
полезная штука, спасибо!
  • F-5
  • 0
avatar
Осталось только наклепать сами модификации…
avatar
Придумал. Пишите здесь в каких модификациях вы нуждаетесь/нуждались. Сделаю инсталляторы…
avatar
UPD: Сделал инсталлятор для хака Скрытие профиля от посторонних. Добавил в пост.
avatar
UPD: Сделал инсталлятор для хака Заряд пользователя. Добавил в пост.

зы. ещё раз напомню: не устанавливайте модификации на рабочие проекты, пока инсталляторы не обкатаны.
avatar
офигенски =)

в порядке бреда — надо написать какое-нибудь десктоп приложение, которое позволяло бы писать «моды» не погружаясь в синтаксис хмл…
avatar
хм… а чем вам xml плох?)) Это самая логичная вещь на свете :)
А кто делает XML? Правильно. Разработчики. Делаем выводы.
avatar
ну в порядке бреда же… хотя да… разработчику проще руками сделать, надёжнее
надо свой «хак» таки перезалить
avatar
Попробуйте написать XML для своей модификации) Думаю будет даже приятно хД
avatar
да да -) именно это я и имею ввиду только их там 4 будет, отдельно для каждого из кусков
avatar
В каком смысле кусков? На одну модификацию один файл как бэ…
avatar
я не хочу сейчас тут разглагольствовать на невтему. просто «хак изменение оценки» включает в себя возможность менять оценку для 4 разных рейтингов, юзера\поста\комментария\блога… поэтому лучше сделать 4 хмл, отдельно для каждой =) вот
avatar
ясно.
avatar
Предлагаю текущее описание XML в комплект модуля класть. А то скачал 0.3, по ссылке пришел сюда, увидел пару тегов, пошел в тему 0.2, что-то увидел там, пошел в тему 0.1

А если еще пара-другая версий выйдет с добавлением новых тегов?
avatar
Есть спецификация. Я пока не успеваю сделать сайт для неё. Но примеры положу.
avatar
Ой, сайт — долгая история, просто положи в комплект будет очень краткое описание, как в теме 0.1, чтоб список всех тегов в одном месте был. Ну и примерчик какой-нить — у тебя же их много уже :)
avatar
Пока три. И две не рабочие (сами модификации, ибо перепроверял, все файлы пропатчены как было задумано, но не работает) так-то!
avatar
А вообще примеры есть в каждом посту. Качай и рассматривай))
avatar
что будет если в одном файле есть две одинаковые конструкции, но в инсталляторе нужно заменить только одну?
  • ort
  • 0
avatar
значит, флаг должен быть — делать первую замену или все
avatar
В каком смыле? От чего зависит замена/не замена?
avatar
в простом варианте — заменить строчку «vasy» на «pety», но «vasy» встречается несколько раз, а заменить нужно только в определенных местах
avatar
Понял. Делается это очень даже логично. Допустим есть идеал в виде двух абсолютно одинаковых строк:

<nothing name="nofing">

<nothing name="nofing">


Нам, допустим, нужно вставить после второго тега, догда пишем нечто
<file name="nothing.tlp">
		<operation>
			<search position="after"><![CDATA[<nothing name="nofing">

<nothing name="nofing"]]></search>
			<add><![CDATA[//Display this ads]]></add>
		</operation>
	</file>


Если массив данных очень большой, то там есть такие конструкции поблизости, которые не повторяются. Посмотрите как я делал модификации, вы зиметите, что я пишу не одну и часто даже не 3 строки в поиске.
avatar
заметите*

ну и ещё добавлю: пока ни разу не встречался даже намёки с сложностями по данному поводу.
avatar
чем больше регулярка для поиска, тем меньше вероятность удачной инсталяции при кастомных файлах
avatar
Это понятно. Но я уже написал, что проблем не было с этим. Готов рассмотреть этот момент когда будет наглядная проблема. Да и код далеко не в 1000 строк.
avatar
проблема то наглядная :) если два модуля при инсталяции будут в качестве опорного текста использовать одинаковые куски, то велика вероятность того, что их инсталяции будут не совместимы. Такие задачи нужно решать на раннем этапе, а не когда при наличии более 1000 модулей у большинства что то начнет отваливаться.
avatar
Я подумаю над этим, но пока не нравится) Позже скажу почему.
avatar
не нравится думать? )
avatar
Ну… не сказал бы)) А вообще я взял за основу уже существующий синтаксис, который работает с тысячами модификаций и не имеет данных проблем.
avatar
И еще одна вещь:
<sql>INSERT INTO `prefix_user` VALUES (...);</sql>

Это классно. А как быть тем, у кого префикс другой?
avatar
пока ручками… кстати не помню, указывается префикс в конфиге? если да, то без проблем…
avatar
В config.table.php
define('DB_PREFIX_TABLE','zls_');
avatar
принято.
avatar
Решил, наконец, поставить Мод. Скопировал, как велено. То, что дефолтный скин у меня не new, это ладно, фигня, скопировал, куда надо.

Но дальше пошли какие-то чудесатости.
Иду по адресу /mod/list/. И вдруг получаю ошибку:

SQL Error: Table 'avadim_db0.prefix_modifications' doesn't exist at U:\home\local\site.ru\comm\classes\modules\talk\mapper\Talk.mapper.class.php line 162
Array ( [code] => 1146 [message] => Table 'avadim_db0.prefix_modifications' doesn't exist [query] => SELECT COUNT(tc.talk_comment_id) as count_new FROM zls_talk_comment as tc, zls_talk_user as tu WHERE (tc.talk_comment_date>tu.date_last or tu.date_last IS NULL) AND tu.user_id = 1 AND tu.talk_id=tc.talk_id [context] => U:\home\local\site.ru\comm\classes\modules\talk\mapper\Talk.mapper.class.php line 162 )

Если был пьян, то решил бы, что белочка пришла. С чего вдруг ссылка на скрипт Talk.mapper.class.php, который никакого отношения к моду не имеет? И какое отношение таблица prefix_modifications имеет к SQL-запросу, который в тексте ошибки указывается?

Толи у библиотеки БД крыша едет, то ли у системного загрузчика модулей. Ничо не пойму. Куда хоть копать-то?
avatar
Поэтому поводу написан пост выше. Я не учёл кастомный префикс в SQL запросах. Уже данная пробелма исправлена. Думаю скоро выложу фикс.

зы. по поводу Talk.mapper.class.php -> движок основан на наследованности классов, тем самым существует «вложенность» классов. Дальше по логике…
avatar
по поводу Talk.mapper.class.php -> движок основан на наследованности классов, тем самым существует «вложенность» классов. Дальше по логике…
это уже фантастика
avatar
Не понял — ты что-то наследуешь от класса Mapper_Talk?: о
avatar
Нет, но цепока может быть длинной)
avatar
какая цепочка?
у меня складывается впечатление, что ты вообще не в теме устройства ЛС и пытаешься писать для него
avatar
только изучаю… а вы не понимаете меня)) Я пишу об одном, вы о другом.
avatar
Но ссылка-то в ошибке на конкретный модуль!
И я согласен с ort'ом, что проблема кроется в том, что поперек общей идеологии ЛС идешь. Дело-то не в том, что ошибка вылезает (это нормальный рабочий процесс), а в том, что при таком подходе резко усложняется локализация ошибки. Вот если взять этот конкретный пример: я же глянул, по логике идет проверка на наличие таблицы, если ее нет, то она создается, а потом уже идет селект. Но соврешенно неожиданно вылетает невообразимый баг, и смотришь на текст ошибки — крыша едет.
avatar
Я проанализирую эту ошибку.
avatar
это скорее всего глюк из-за создания нового объекта dbSimple, т.к. в этом инсталлере не понятно по какой причине не используется интерфейс модуля, а функционал вынесен в /lib/
avatar
Для меня так удобнее. По крайней мере на данный момент)
avatar
вопрос не об удобстве, а о стандарте, модуль ведь не для себя пишешь. Тем более, как видим кривое написание влечет за собой скрытые ошибки и т.п.
avatar
Баги есть и будут всегда. Кривое написание — с вашей точки зрения. Лично я не нарушаю идеологии структуры движка, ибо делаю в соответствии с существующей структурой и при этом как удобно МНЕ.
avatar
Но я прислушаюсь к вашим претензиям и подумаю над этим.
avatar
По поводу наследования классов, беру явный используемый и в нашем случае пример:
class ActionMod extends Action {}

Хотя и без меня вы это знаете, безусловно)) Я признаю, что не до конца ещё изучил движок, но изучение в процессе. Я об этом упоминал ранее. А про «вообще не в теме устройства ЛС» — я лишь высказал возможную догадку и не претендую на истину в последней инстанции. Действительно, очень странный баг и пока со всеми своими извращениями на версии 0.4 я так и не сумел «реализовать» эту ошибку.

Надеюсь на понимание и взаимное уважение =\

зы. avadim, сможешь приблизительно повторить то что делал? Про шаблон, я так понимаю, ты перекопировал файлы из new в свой шаблон?
зыы. пойду ещё поковыряю.
avatar
Пардон, пропустил как-то вопрос. Если еще актуально, то все просто банально:
1. Скопировал все файлы, как положено
2. Шаблоны для скина new скинул в папку с моим текущим скином
3. Запускаю Мод, кликаю по меню «Управление пакетами» — получаю описанную выше ошибку.

ЗЫ В версии 0.4 — то же самое
ЗЗЫ Возможно, это важно, ЛС у меня не в корне сайта лежит, а в папке, т.е. не сайт.ру, а сайт.ру/папка
avatar
Хорошо, проверю.
avatar
Проверил. Поставил сайт в субдиректорию, всё работает без проблем =\
Може потому, что я всё переписал уже?))
avatar
Есть коннект, получил ошибку, но немного в другой форме (ну это и понятно). Проблема в том, что не проверяется существование таблицы в листинге, а только при попытке установки. Так-то! Вобщем, исправлено…
avatar
Выложишь исправленную версию — попробую
avatar
Переписал весь код согласно вашей идеологии))
зы. а что не утвердил в модулях? Не, я понимаю что у одного проблема, но она не у всех))) Хотя тут риторики больше. Мне нужны тестеры вобщем :(
avatar
в той версии, что на модерации, не увидел исправлений
avatar
Один мааленький вопросик)
Как получить доступ к классу модуля в евенте экшена (по схеме евент вроде бы имеет доступ к модулям)?
avatar
Кажись доехал…
$this->[имя_модуля]_[паблик_ф-ия_класса_модуля]();

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