Планирование тикет системы
02.03.2010Можно сказать, что стабильная версия выпущена до тех по пока не доказано обратное, а я начинаю думать о тикет системе на базе новой версии. Что же такое тикет? Это пост с новыми дополнительными свойствами, и поддержкой этих свойств в шаблоне и редакторе. Предположу, что я уже формализовал эти свойства (назначил имена, типы, связи). Как же можно внедрить эти свойства в существующий класс поста? Я уже как то рассуждал на эту тему и в новой версии придумал систему соклассов для обслуживания этих свойств. Где же хранит эти свойства? Если исходить из идеи соклассов, то данные должен хранить и обслуживать автономно от самого поста сокласс. То есть в бд он должен сам завести и обслуживать свои собственные таблицы. Единственная проблема - синхронизация данных с постами: добавление и удаление постов обязано сопровождаться симметричными событиями в соклассе. Но синхронизация это не задача поста, так как пост сам себя не создает и не удаляет, а этим занимается владелец постов - в частности это tposts, который выполняет целый ряд дополнительных задач, таких как добавление и удаление урла в таблице урлов.
Конечно, у владельца постов имеются события added, edited, deleted по которым можно было бы выполнять синхронизацию, но отчего то мне кажется что для соклассов механизм синхронизации через события (точнее через подписывание на события) не является оптимальным. Почему? Из за дробности этих отдельных событий. Мне кажется, по ощущениям, что необходим специальный интерфейс для соклассов. Подобный интерфейс должен как раз поддерживать все эти события. Предположу, что такой интерфейс написан, то каким образом необходимо изменить существующий php код для поддержки этого интерфейса?
Следует более строго формализовать соклассы и отношения постов и владельца постов. Либо понять, что имеется в виду два отдельных сокласса для постов и владельца постов (по простому список постов). То есть один сокласс обслуживает новые свойства поста, а другой сокласс должен обслуживать список постов. Так будет более правильно. Соответственно надо вести разговор о не синхронизации данных между соклассом поста, а соклассе для списка постов. Таким образом задача сводится о разработке сокласса для списка постов. Сокласс оперирует тикетами, и для него достаточно (предположительно) трех событий added, edited, deleted, обернутых в интерфейс.
Собственно, я могу гордится собой и преподавать теоретическую магию, поскольку знаю много умных слов.
Комментарии (12) на запись “Планирование тикет системы”
Оставить комментарий
Если ты еще и понимаешь, можешь осуществить задуманное, то ты гений... Может пока еще не признанный. Но мне нравится твой ход мыслей, если ты сможешь реализовать, то я думаю многие найдут достойное применение твоему изобретению.
Так держать, продолжай развиваться, сделай футуре лист что бы хотелось в будующем. И находи постепенное решение.
А там глядишь и на коммерческую основу можно будет платформу перевести. Немножко рекламмы, создать коолектив, сообщество. И все коробочный продукт.
Или это - СЕКРЕТ ФИРМЫ???
;-)
Вот черт... ставлю последнюю известную мне версию (3.19) на новый хостинг. Выбираю вариант с базой данных - получаю ошибку. Выбираю без базы данных - получаю ту же ошибку.
Вот такую:
<b>Fatal error</b>: Uncaught exception 'Exception' with message 'widget categories already exists' in /hermes/web08/b1143/pow.savos/htdocs/lib/kernel.php:86
Stack trace:
0 /hermes/web08/b1143/pow.savos/htdocs/lib/widgets.standarts.class.php(26): tdata->error('widget categor...')
1 /hermes/web08/b1143/pow.savos/htdocs/lib/install/widgets.standarts.class.install.php(18): tstdwidgets->add('categories', true, 0)
2 /hermes/web08/b1143/pow.savos/htdocs/lib/kernel.php(121): tstdwidgetsInstall(Object(tstdwidgets), NULL)
3 /hermes/web08/b1143/pow.savos/htdocs/lib/kernel.php(94): tdata->CallSatellite('install')
4 /hermes/web08/b1143/pow.savos/htdocs/lib/install/classes.install.php(57): tdata->install()
5 /hermes/web08/b1143/pow.savos/htdocs/lib/install/classes.install.php(15): doinstallclasses()
6 /hermes/web08/b1143/pow.savos/htdocs/lib/installer.class.php(141): installclasses()
7 /hermes/web08/b1143/pow.savos/htdocs/lib/installer.class.php(168): tinstaller->FirstStep('en')
8 /hermes/web08/b1143/pow.savos/htdocs/lib/install/in in <b>/hermes/web08/b1143/pow.savos/htdocs/lib/kernel.php</b> on line <b>86</b><br />
;-((
Ставлю эту же версию на тот хостинг, где в прошлый раз благополучно установил 3.17 с базой данных. Вроде бы установка произошла, но в конце после поздравления - вот такой мессидж:
<b>Warning</b>: parse_ini_file(home/savos/data/www/savos-host.com/plugins/oldestposts/about.ini) [<a href='function.parse-ini-file'>function.parse-ini-file</a>]: failed to open stream: No such file or directory in <b>/home/savos/data/www/savos-host.com/lib/plugins.class.php</b> on line <b>27</b><br />
<br />
<b>Fatal error</b>: Uncaught exception 'Exception' with message 'Class not found' in /home/savos/data/www/savos-host.com/lib/kernel.php:86
Stack trace:
0 /home/savos/data/www/savos-host.com/lib/kernel.php(619): tdata->error('Class not foun...')
1 /home/savos/data/www/savos-host.com/lib/kernel.php(654): tclasses->getinstance(NULL)
2 /home/savos/data/www/savos-host.com/lib/plugins.class.php(48): tclasses->add(NULL, NULL, 'oldestposts')
3 /home/savos/data/www/savos-host.com/lib/plugins.class.php(38): tplugins->AddExt('oldestposts', NULL, NULL)
4 /home/savos/data/www/savos-host.com/lib/installer.class.php(301): tplugins->add('oldestposts')
5 /home/savos/data/www/savos-host.com/lib/installer.class.php(119): tinstaller->CreateFirstPost()
6 /home/savos/data/www/savos-host.com/lib/installer.class.php(176): tinstaller->CreateDefaultItems('9e5843d6124dd44...')
7 /home/savos/data/www/savos-host.com/lib/install/install.php(16): tinstaller->install()
8 /home/savos/data/www/savos-host.com/index.php(60): require_once('/home/savos/da in <b>/home/savos/data/www/savos-host.com/lib/kernel.php</b> on line <b>86</b><br />
Ну и, разумеется, после попытки войти на блог - запускается установка с начала... То есть - не установился...
Права и все прочее выставлено как надо. Упомянутый файл
home/savos/data/www/savos-host.com/plugins/oldestposts/about.ini
лежит в положенном ему месте, но мне кажется, что обращение к нему по идее должно было быть с изначальным "слэшем", то есть вот так:
/home/savos/data/www/savos-host.com/plugins/oldestposts/about.ini
Пришло в голову, что надо поправить упомянутую 27-ю строчку в файле lib/plugins.class.php и вместо
$about = parse_ini_file($filename, true);
написать вот так:
$about = parse_ini_file('/'.$filename, true);
В этом случае при попытке установки - та же ошибка, что в моем комментарии выше (с другого хостинга). То есть:
<b>Fatal error</b>: Uncaught exception 'Exception' with message 'widget categories already exists' in /home/savos/data/www/savos-host.com/lib/kernel.php:86
Stack trace:
0 /home/savos/data/www/savos-host.com/lib/widgets.standarts.class.php(26): tdata->error('widget categor...')
1 /home/savos/data/www/savos-host.com/lib/install/widgets.standarts.class.install.php(18): tstdwidgets->add('categories', true, 0)
2 /home/savos/data/www/savos-host.com/lib/kernel.php(121): tstdwidgetsInstall(Object(tstdwidgets), NULL)
3 /home/savos/data/www/savos-host.com/lib/kernel.php(94): tdata->CallSatellite('install')
4 /home/savos/data/www/savos-host.com/lib/install/classes.install.php(57): tdata->install()
5 /home/savos/data/www/savos-host.com/lib/install/classes.install.php(15): doinstallclasses()
6 /home/savos/data/www/savos-host.com/lib/installer.class.php(141): installclasses()
7 /home/savos/data/www/savos-host.com/lib/installer.class.php(168): tinstaller->FirstStep('ru')
8 /home/savos/data/www/savos-host.com/lib/install/install.php( in <b>/home/savos/data/www/savos-host.com/lib/kernel.php</b> on line <b>86</b><br />
Грешил на то, что в базе остались записи от предыдущей неудачной инсталляции (а я ставлю вариант с базой) - залез через PhpMyAdmin и удалил ВСЕ таблицы. Перезапуск установки ничего не дал - результат тот же...