Забираем патч инсталера компонент

 
какова полезность данного патча?
Для голосования необходима регистрация на сайте
Всего голосов: 8
Дата окончания опроса: 15-09-2009
Опрос закончен.
Sometime CMS Community
Посетитель
no avatar
Сообщений: 3
дайте чтото типа CVS или какойто онлайн пастебин, ато сюда неудобно выкладывать

под катом код и пояснения в коментах, что куда вставлять


Код PHP:
  1. <?php
  2.  
  3. ###########################################################################
  4. # патч: реализовано установку компонентов из админ панели #
  5. # тип патча: дополнение функционала #
  6. # автор: alter.ego (он же xxor), e-mail: [email protected] icq: 464669413 #
  7. ###########################################################################
  8.  
  9. //////////////////////////////////////////////
  10. # файл: core/cms.php
  11. # добавить:
  12. #
  13.  
  14. public function removeСomponent($component_id) {
  15. $inDB = cmsDatabase::getInstance();
  16.  
  17. //если компонент не был установлен, выходим
  18. if (!$component_id) { return false; }
  19.  
  20. //удаляем плагин из базы
  21. $query = "SELECT * FROM `cms_components` WHERE id=".$component_id;
  22. $result = $inDB->fetch_assoc($inDB->query($query));
  23.  
  24. $delete_query = "DELETE FROM cms_components WHERE id=".$component_id;
  25.  
  26. $inDB->query($delete_query);
  27.  
  28.  
  29. ////////////////////////////
  30. /*
  31. ** пересмотреть и пофиксить
  32. ** суть - вынуть запись о доступе к компонентам и катнуть оттуда имя удаляемого
  33. */
  34.  
  35. $query = "SELECT access FROM `cms_user_groups` WHERE is_admin=1";
  36. $access = $inDB->fetch_assoc($inDB->query($query));
  37.  
  38. $access = explode(',',$access['access']);
  39.  
  40.  
  41. foreach($access as $item){
  42. if($item != 'admin/com_'.$result['link']){
  43. $new_access .= trim($item).', ';
  44. }
  45. }
  46.  
  47. $delete_query = "UPDATE cms_user_groups SET access='".$new_access."' WHERE is_admin=1";
  48. $inDB->query($delete_query);
  49.  
  50. ////////////////////////////
  51.  
  52. //компонент успешно удален
  53. return true;
  54. }
  55.  
  56. public function getNewComponents() {
  57.  
  58. $inDB = cmsDatabase::getInstance();
  59.  
  60. $new_components = array();
  61. $all_components = $this->getComponentsDirs();
  62.  
  63. if (!$all_components) { return false; }
  64.  
  65. foreach($all_components as $component){
  66. $installed = $inDB->rows_count('cms_components', "link='{$component}'", 1);
  67. if (!$installed){
  68. $new_components[] = $component;
  69. }
  70. }
  71.  
  72. if (!$new_components) { return false; }
  73.  
  74. return $new_components;
  75. }
  76.  
  77. public function getComponentsDirs() {
  78. $dir = PATH . '/components';
  79. $pdir = opendir($dir);
  80.  
  81. $components = array();
  82.  
  83. while ($nextfile = readdir($pdir)){
  84. if (
  85. ($nextfile != '.') &&
  86. ($nextfile != '..') &&
  87. is_dir($dir.'/'.$nextfile)
  88. ) {
  89. $components[$nextfile] = $nextfile;
  90. }
  91. }
  92.  
  93. if (!sizeof($components)){ return false; }
  94.  
  95. return $components;
  96. }
  97.  
  98. public function loadComponent($component) {
  99. $component_file = PATH.'/components/'.$component.'/model.php';
  100. if (file_exists($component_file)){
  101. include_once($component_file);
  102. $component = 'cms_model_'.$component;
  103. $component_obj = new $component();
  104. return $component_obj;
  105. }
  106. return false;
  107. }
  108.  
  109. //////////////////////////////////////////////
  110. # файл: admin/applets/components.php
  111. # раскоментировать:
  112.  
  113. $toolmenu = array();
  114. $toolmenu[0]['icon'] = 'install.gif';
  115. $toolmenu[0]['title'] = 'Установить компонент';
  116. $toolmenu[0]['link'] = '?view=install&do=component';
  117.  
  118. cpToolMenu($toolmenu);
  119.  
  120. # после строки №87 добавить:
  121.  
  122. $actions[1]['title'] = 'Удалить';
  123. $actions[1]['icon'] = 'delete.gif';
  124. $actions[1]['confirm'] = 'Удалить компонент из системы?';
  125. $actions[1]['link'] = '?view=install&do=remove_component&id=%id%';
  126.  
  127. //////////////////////////////////////////////
  128. # файл: admin/applets/install.php
  129.  
  130. # убрать:
  131.  
  132. if ($do != 'plugin' && $do != 'install_plugin' && $do != 'upgrade_plugin' && $do != 'finish_plugin' && $do != 'remove_plugin'){
  133.  
  134. echo '<p><b>В текущей версии системы установка указанных расширений не доступна.</b></p>';
  135. echo '<p>Обратитесь на <a href="http://instantcms.ru">официальный сайт</a>.</p>';
  136. echo '<p><a href="javascript:window.history.go(-1);">Назад</a></p>';
  137.  
  138. return;
  139.  
  140. }
  141.  
  142. # добавить:
  143.  
  144. function componentsList($new_components, $action_name, $action){
  145.  
  146. $inCore = cmsCore::getInstance();
  147.  
  148. echo '<table cellpadding="3" cellspacing="0" border="0" style="margin-left:40px">';
  149. foreach($new_components as $component){
  150. $component_obj = $inCore->loadComponent($component);
  151.  
  152. if ($action == 'install_component') { $version = $component_obj->info['version']; }
  153.  
  154. if($component_obj->info['title']!=''){
  155. echo '<tr>';
  156. echo '<td width="16"><img src="/admin/images/icons/hmenu/plugins.png" /></td>';
  157. echo '<td><a style="font-weight:bold;font-size:14px" title="'.$action_name.' '.$component_obj->info['title'].'" href="index.php?view=install&do='.$action.'&id='.$component.'">'.$component_obj->info['title'].'</a> v'.$component_obj->info['version'].'</td>';
  158. echo '<tr>';
  159. echo '<tr>';
  160. echo '<td width="16"> </td>';
  161. echo '<td>
  162. <div style="margin-bottom:6px;">'.$component_obj->info['description'].'</div>
  163. <div style="color:gray"><strong>Автор:</strong> '.$component_obj->info['author'].'</div>
  164. <div style="color:gray"><strong>Папка:</strong> /components/'.$component_obj->info['component'].'</div>
  165. </td>';
  166. echo '<tr>';
  167. }
  168. }
  169. echo '</table>';
  170.  
  171. return;
  172.  
  173. }
  174.  
  175.  
  176. # в тело функции applet_install() добавить:
  177.  
  178. if ($do == 'component'){
  179.  
  180. cpAddPathway('Установка компонет', 'index.php?view=install&do=component');
  181.  
  182. $new_components = $inCore->getNewComponents();
  183.  
  184. echo '<h3>Установка компонет</h3>';
  185.  
  186. if (!$new_components){
  187.  
  188. echo '<p>В системе не найдены компонеты, которые еще не установлены.</p>';
  189. echo '<p><a href="javascript:window.history.go(-1);">Вернуться назад</a></p>';
  190. return;
  191.  
  192. }
  193.  
  194. if ($new_components){
  195.  
  196. echo '<p><strong>Найдены компонеты, доступные для установки:</strong></p>';
  197. componentsList($new_components, 'Установить', 'install_component');
  198.  
  199. }
  200. }
  201.  
  202. if ($do == 'install_component'){
  203.  
  204. cpAddPathway('Установка компонент', 'index.php?view=install&do=component');
  205.  
  206. $error = '';
  207.  
  208. $component_id = $inCore->request('id', 'str', '');
  209.  
  210. if(!$component_id){
  211. $inCore->redirectBack();
  212. }
  213.  
  214. $component = $inCore->loadComponent($component_id);
  215.  
  216. if (!$component) { $error = 'Не удалось загрузить файл компонента.'; }
  217.  
  218. if (!$error && $component->install()) {
  219.  
  220. $query = "SELECT MAX(id) FROM `cms_components` LIMIT 1";
  221. $last_id = $inDB->fetch_assoc($inDB->query($query));
  222. $new_id = $last_id['MAX(id)']+1;
  223.  
  224. $install_query = "INSERT INTO cms_components (id, title, link, config, internal, author) VALUES (".$new_id.",'".$component->info['title']."','".$component->info['component']."','',1,'".$component->info['author']."')";
  225. $inDB->query($install_query);
  226.  
  227. $query = "SELECT access FROM `cms_user_groups` WHERE is_admin=1";
  228.  
  229. $last_access = $inDB->fetch_assoc($inDB->query($query));
  230. $new_access = $last_access['access'].', admin/com_'.$component->info['component'];
  231.  
  232. $install_query = "UPDATE cms_user_groups SET access='".$new_access."' WHERE is_admin=1";
  233. $inDB->query($install_query);
  234.  
  235. echo 'SSS';
  236.  
  237. $inCore->redirect('/admin/index.php?view=install&do=finish_component&id='.$component_id.'&task=install');
  238. }
  239.  
  240. if ($error){
  241. echo '<p style="color:red">'.$error.'</p>';
  242. }
  243.  
  244. echo '<p><a href="index.php?view=install&do=component">Назад</a></p>';
  245.  
  246. }
  247.  
  248. if ($do == 'remove_component'){
  249.  
  250. $component_id = $inCore->request('id', 'str', '');
  251.  
  252. if(!$component_id){
  253. $inCore->redirectBack();
  254. }
  255.  
  256. $inCore->removeСomponent($component_id);
  257.  
  258. $inCore->redirect('/admin/index.php?view=install&do=finish_component&id='.$component_id.'&task=remove');
  259.  
  260. }
  261.  
  262. if ($do == 'finish_component'){
  263.  
  264. $component_id = $inCore->request('id', 'str', '');
  265. $task = $inCore->request('task', 'str', 'install');
  266.  
  267. $inCore->redirect('/admin/index.php?view=components&installed='.$component_id.'&task='.$task);
  268.  
  269. }
  270. ?>
  271.  
  272.  
Редактировалось: 1 раз (Последний: 10 сентября 2009 в 16:08)
Посетитель
small user social cms
Медаль
Сообщений: 329
Вообще-то можно было просто файлик приаттачить. Форум это позволяет
Реклама
cms
Sometime CMS Community
Посетитель
no avatar
Сообщений: 3
Олег:

Вообще-то можно было просто файлик приаттачить. Форум это позволяет

приатачивание файликов способствует увеличению количества скрипткиддисов, ламеров, и прочих низких существ на форуме

я за то чтобы люди не просто копипасили, а и хотябы читали то что копипастят, тимболее что это ветка для разработчиков, имхо новичкам будет полезно патчить руками
Редактировалось: 1 раз (Последний: 10 сентября 2009 в 17:54)
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1176
впечатляет, но работать не будет
лучше напишите мне в личку как уже мудро советовал anonimus в другой похожей теме
Вопросы и ответы
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форумаПатриот InstantCMS ;-)
Сообщений: 3129
alter.ego, это радует что программистов на сайте становиться больше )))
Зарабатываю здесь - Хостинг здесь - Жить в обществе и быть свободным от общества нельзя!...
Sometime CMS Community
Посетитель
no avatar
Сообщений: 1
Господа, а есть ли хелп по написанию компонентов, или хотя бы описание структуры и принципа работы компонента? Я что-то не обнаружил такой инфы на сайте :)
Разбираться самому по готовым?
InstantCMS Team
small user social cms
МедальКубок зрительских симпатийАвторитет форумаПатриот InstantCMS ;-)
Сообщений: 3129
Berkut, пока такого help’а нет - есть только по модулям - http://instantcms.ru/blogs/49/1/post44.html#c...
Зарабатываю здесь - Хостинг здесь - Жить в обществе и быть свободным от общества нельзя!...
Посетитель
small user social cms
Медаль
Сообщений: 389
хотел написать автоудалялку компонента, а оказывается можно удалить только из списка. не гоже дело, надо бы дописать что бы и таблицы из базы удалять можно было и файлы с диска... например так:
function remove_component_name(){

$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$inConf = cmsConfig::getInstance();

include($_SERVER['DOCUMENT_ROOT'].'/includes/dbimport.inc.php');

dbRunSQL($_SERVER['DOCUMENT_ROOT'].'/components/name/uninstall.sql', $inConf->db_prefix);

и возможность удалить файлы компонента... и все следы его.
rm 'пути к файлу';

return true;

}
Посетитель
small user social cms
Медаль
Сообщений: 389
что бы это работало из файла install.php в папке компонента...
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.