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

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

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


Код PHP:
<?php

###########################################################################
#	патч: реализовано установку компонентов из админ панели           #
#   тип патча: дополнение функционала                                     #
#   автор: alter.ego (он же xxor), e-mail: xxor@ukr.net icq: 464669413    #
###########################################################################

//////////////////////////////////////////////
#	файл: core/cms.php
# 	добавить:
#

	public function removeСomponent($component_id) {
        $inDB = cmsDatabase::getInstance();

        //если компонент не был установлен, выходим
        if (!$component_id) { return false; }

        //удаляем плагин из базы
		$query = "SELECT * FROM `cms_components` WHERE id=".$component_id;
		$result = $inDB->fetch_assoc($inDB->query($query)); 
		
        $delete_query  = "DELETE FROM cms_components WHERE id=".$component_id;

        $inDB->query($delete_query);
		
		
		////////////////////////////
		/*
		** пересмотреть и пофиксить
		** суть - вынуть запись о доступе к компонентам и катнуть оттуда имя удаляемого
		*/
		
		$query = "SELECT access FROM `cms_user_groups` WHERE is_admin=1";
		$access = $inDB->fetch_assoc($inDB->query($query));
		
		$access = explode(',',$access['access']);
		
		
		foreach($access as $item){
			if($item != 'admin/com_'.$result['link']){
				$new_access .= trim($item).', ';
			}
		}
		
		$delete_query = "UPDATE cms_user_groups SET access='".$new_access."' WHERE is_admin=1";
		$inDB->query($delete_query);

		////////////////////////////
		
        //компонент успешно удален
        return true;
    }
	
	public function getNewComponents() {
        
        $inDB = cmsDatabase::getInstance();

        $new_components    = array();
        $all_components    = $this->getComponentsDirs();

        if (!$all_components) { return false; }

        foreach($all_components as $component){            
			$installed = $inDB->rows_count('cms_components', "link='{$component}'", 1);
            if (!$installed){
                $new_components[] = $component;
            }
        }
		
        if (!$new_components) { return false; }

        return $new_components;
    }
	
	public function getComponentsDirs() {
        $dir    = PATH . '/components';
        $pdir   = opendir($dir);

        $components = array();

        while ($nextfile = readdir($pdir)){
            if (
                    ($nextfile != '.')  &&
                    ($nextfile != '..') &&
                    is_dir($dir.'/'.$nextfile)
               ) {
                $components[$nextfile] = $nextfile;
            }
        }

        if (!sizeof($components)){ return false; }

        return $components;
    }
	
	public function loadComponent($component) {
        $component_file = PATH.'/components/'.$component.'/model.php';
        if (file_exists($component_file)){
            include_once($component_file);
			$component = 'cms_model_'.$component;
            $component_obj = new $component();
            return $component_obj;
        }
        return false;
    }

//////////////////////////////////////////////
#	файл: admin/applets/components.php
# 	раскоментировать: 

	$toolmenu = array();
	$toolmenu[0]['icon'] = 'install.gif';
	$toolmenu[0]['title'] = 'Установить компонент';
	$toolmenu[0]['link'] = '?view=install&do=component';

	cpToolMenu($toolmenu);
	
#	после строки №87  добавить:

	$actions[1]['title'] = 'Удалить';
	$actions[1]['icon']  = 'delete.gif';
	$actions[1]['confirm'] = 'Удалить компонент из системы?';
	$actions[1]['link']  = '?view=install&do=remove_component&id=%id%';

//////////////////////////////////////////////
#	файл: admin/applets/install.php

#	убрать:

		if ($do != 'plugin' && $do != 'install_plugin' && $do != 'upgrade_plugin' && $do != 'finish_plugin' && $do != 'remove_plugin'){

			echo '<p><b>В текущей версии системы установка указанных расширений не доступна.</b></p>';
			echo '<p>Обратитесь на <a href="http://www.instantcms.ru">официальный сайт</a>.</p>';
			echo '<p><a href="javascript:window.history.go(-1);">Назад</a></p>';

			return;

		}

# 	добавить: 
	
	function componentsList($new_components, $action_name, $action){

		$inCore = cmsCore::getInstance();

		echo '<table cellpadding="3" cellspacing="0" border="0" style="margin-left:40px">';
		foreach($new_components as $component){
			$component_obj = $inCore->loadComponent($component);

			if ($action == 'install_component') { $version = $component_obj->info['version']; }

			if($component_obj->info['title']!=''){
				echo '<tr>';
				echo '<td width="16"><img src="/admin/images/icons/hmenu/plugins.png" /></td>';
				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>';
				echo '<tr>';
				echo '<tr>';
				echo '<td width="16"> </td>';
				echo '<td>
							<div style="margin-bottom:6px;">'.$component_obj->info['description'].'</div>
							<div style="color:gray"><strong>Автор:</strong> '.$component_obj->info['author'].'</div>
							<div style="color:gray"><strong>Папка:</strong> /components/'.$component_obj->info['component'].'</div>
						</td>';
				echo '<tr>';
			}
		}
		echo '</table>';

		return;

	}

	
#	в тело функции applet_install()  добавить:

	if ($do == 'component'){
	
		cpAddPathway('Установка компонет', 'index.php?view=install&do=component');
		
		$new_components = $inCore->getNewComponents();
		
		  echo '<h3>Установка компонет</h3>';
	
		if (!$new_components){

            echo '<p>В системе не найдены компонеты, которые еще не установлены.</p>';
            echo '<p><a href="javascript:window.history.go(-1);">Вернуться назад</a></p>';
            return;

        }
		
		if ($new_components){

            echo '<p><strong>Найдены компонеты, доступные для установки:</strong></p>';
            componentsList($new_components, 'Установить', 'install_component');

        }
	}
	
	if ($do == 'install_component'){

        cpAddPathway('Установка компонент', 'index.php?view=install&do=component');

        $error = '';

        $component_id = $inCore->request('id', 'str', '');

        if(!$component_id){
            $inCore->redirectBack();
        }

        $component = $inCore->loadComponent($component_id);

        if (!$component) { $error = 'Не удалось загрузить файл компонента.'; }
        
        if (!$error && $component->install()) {
           			
			$query = "SELECT MAX(id) FROM `cms_components` LIMIT 1";
			$last_id  = $inDB->fetch_assoc($inDB->query($query));
			$new_id = $last_id['MAX(id)']+1;
			
			$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']."')";
			$inDB->query($install_query);
			
			$query = "SELECT access FROM `cms_user_groups` WHERE is_admin=1";
			
			$last_access = $inDB->fetch_assoc($inDB->query($query));
			$new_access = $last_access['access'].', admin/com_'.$component->info['component'];
			
			$install_query = "UPDATE cms_user_groups SET access='".$new_access."' WHERE is_admin=1";
			$inDB->query($install_query);
			
			echo 'SSS';
			
			$inCore->redirect('/admin/index.php?view=install&do=finish_component&id='.$component_id.'&task=install');
		}

        if ($error){
            echo '<p style="color:red">'.$error.'</p>';
        }

        echo '<p><a href="index.php?view=install&do=component">Назад</a></p>';

    }
	
	if ($do == 'remove_component'){

        $component_id = $inCore->request('id', 'str', '');

        if(!$component_id){
            $inCore->redirectBack();
        }

        $inCore->removeСomponent($component_id);

        $inCore->redirect('/admin/index.php?view=install&do=finish_component&id='.$component_id.'&task=remove');

    }
	
	if ($do == 'finish_component'){

        $component_id  = $inCore->request('id', 'str', '');
        $task       = $inCore->request('task', 'str', 'install');

        $inCore->redirect('/admin/index.php?view=components&installed='.$component_id.'&task='.$task);

    }
?>

Редактировалось: 1 раз (Последний: 10 сентября 2009 в 16:08)
Медаль
Сообщений: 279
Вообще-то можно было просто файлик приаттачить. Форум это позволяет
Сообщений: 0
Олег:

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

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

я за то чтобы люди не просто копипасили, а и хотябы читали то что копипастят, тимболее что это ветка для разработчиков, имхо новичкам будет полезно патчить руками
Редактировалось: 1 раз (Последний: 10 сентября 2009 в 17:54)
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1227
впечатляет, но работать не будет
лучше напишите мне в личку как уже мудро советовал anonimus в другой похожей теме
Вопросы и ответы
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 2790
alter.ego, это радует что программистов на сайте становиться больше )))
Надежный хостинг - Жить в обществе и быть свободным от общества нельзя!...
Сообщений: 0
Господа, а есть ли хелп по написанию компонентов, или хотя бы описание структуры и принципа работы компонента? Я что-то не обнаружил такой инфы на сайте :)
Разбираться самому по готовым?
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 2790
Berkut, пока такого help’а нет - есть только по модулям - http://www.instantcms.ru/blogs/49/1/post44.html#c...
Надежный хостинг - Жить в обществе и быть свободным от общества нельзя!...
Сообщений: 41
хотел написать автоудалялку компонента, а оказывается можно удалить только из списка. не гоже дело, надо бы дописать что бы и таблицы из базы удалять можно было и файлы с диска... например так:
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;

}
Занимаюсь только им -> www.kotenok.ru
Игры для инстанта с записью в базу: -> http://instantcms.ru/blogs/podelki-nachinayushego-programista
Сообщений: 41
что бы это работало из файла install.php в папке компонента...
Занимаюсь только им -> www.kotenok.ru
Игры для инстанта с записью в базу: -> http://instantcms.ru/blogs/podelki-nachinayushego-programista
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.