Вход Регистрация
Файл: sys/inc/functions/ds-plugins.php
Строк: 237
<?php 

/**
* Возвращает путь до папки с плагином
* @return string
*/ 
function ds_plugin_directory_path($type) {
    if (
is_dir(PATH_PLUGINS DIRECTORY_SEPARATOR $type)) {
        return 
PATH_PLUGINS DIRECTORY_SEPARATOR $type
    }
}

/**
* Возвращает массив с плагинами
* @return array
*/ 
function ds_plugins() 
{
      if (
$plugins ds_get('ds_plugins')) {
            return 
$plugins;
      }

      
$json get_option('ds_plugins'); 

      if (
$json) {
            
$plugins json_decode($json1);
      }

      return 
is_array($plugins) ? $plugins : array(); 
}


/**
* Функция активирует плагин
* @return bolean
*/ 
function ds_plugin_activate($plug
{
    
$plugins ds_plugins();
    
$plugin_path ds_plugin_directory_path($plug) . '/' $plug '.php'

    if (!
defined('plugin_' $plug '_loaded') && is_file($plugin_path)) {
        require 
$plugin_path
    }

    
do_event('ds_plugin_pre_activation'$plug);
    
do_event('ds_plugin_' $plug '_pre_activation'$plug);

      if (isset(
$plugins[$plug]) && $plugins[$plug]['active'] != '1') {
        
$plugins[$plug]['active'] = '1'
        
update_option('ds_plugins'json_encode($plugins), 'plugins'); 

        
do_event('ds_plugin_activation'$plug);
        
do_event('ds_plugin_' $plug '_activation'$plug);
        return 
true;
      }

      return 
false
}


/**
* Функция деактивирует плагин
* @return bolean
*/ 
function ds_plugin_deactivate($plug
{
    
do_event('ds_plugin_pre_deactivation'$plug);
    
do_event('ds_plugin_' $plug '_pre_deactivation'$plug);

      
$plugins ds_plugins();

      if (isset(
$plugins[$plug])) {
            
$plugins[$plug]['active'] = '0'
            
update_option('ds_plugins'json_encode($plugins), 'plugins'); 

        
do_event('ds_plugin_deactivation'$plug);
        
do_event('ds_plugin_' $plug '_deactivation'$plug);
    
            return 
true;
      }

      return 
false
}

/**
* Функция добавляет плагин в список плагинов
* @return bolean
*/ 
function ds_plugin_add($plug$info
{
      
$plugins ds_plugins();
      if (!isset(
$plugins[$plug])) {
            
$plugins[$plug] = $info
            
$plugins[$plug]['active'] = '0'
            
update_option('ds_plugins'json_encode($plugins), 'plugins'); 
            return 
true;
      }

      return 
false
}

/**
* Функция удаляет плагин из системы
* @return bolean
*/ 
function ds_plugin_remove($plug
{
      
$plugins ds_plugins();

    
do_event('ds_plugin_remove'$plug);
    
      if (isset(
$plugins[$plug])) {
        if (
is_file(ds_plugin_directory_path($plug) . '/uninstall.php')) {
            require 
ds_plugin_directory_path($plug) . '/uninstall.php'
        }

        
do_event('ds_plugin_' $plug '_remove'$plug); 

        if (
is_dir(PATH_PLUGINS '/' $plug)) {
            
delete_dir(PATH_PLUGINS '/' $plug); 
        }

            unset(
$plugins[$plug]); 
            
update_option('ds_plugins'json_encode($plugins), 'plugins'); 
            return 
true;
      }

    return 
false
}

/**
* Проверка активен ли плагин
* @return bolean
*/ 
function is_plugin_active($plug
{
      
$plugins ds_plugins();

      if (!empty(
$plugins[$plug]) && $plugins[$plug]['active'] == '1') {
          return 
true;
      }
      
      return 
false
}

/**
* Проверка на наличие плагина
* @return bolean
*/ 
function plugin_exists($plug
{
    
$plugins ds_plugins();

    if (isset(
$plugins[$plug])) {
        return 
true;
    }
    
    return 
false
}

/**
* Устанавливает плагин из репозитория CMS-Social
* @return bolean 
*/ 
function ds_plugin_install($plug
{
    if (
plugin_exists($plug)) {
        
add_error(__('Плагин уже существует')); 
    }

    
$plugin json_decode(get_http_content('https://cms-social.ru/api/v1/plugins/info', array(
        
'slug' => $plug
    )), 
true); 

    if (!
$plugin) {
        
add_error(__('Не удалось получить информацию о плагине')); 
    }

    if (
is_errors()) return false
    
    
$sess_id md5(time()); 
    
$tmpFile PATH_CACHE.'/'.$sess_id.'.zip'

    
$pluginData get_http_content($plugin['download']); 

    if (!
$pluginData || !file_put_contents($tmpFile$pluginData)) {
        
add_error(__('Не удалось загрузить плагин'));
    }

    if (
is_file($tmpFile) && ds_plugin_zip_install($tmpFile)) {
        return 
true
    }

    return 
false
}

/**
* Устанавливает плагин из Zip архива
* @return bolean 
*/ 
function ds_plugin_upload($file_path
{
    
$sess_id md5(time()); 

    if (!
class_exists('ZipArchive')) {
        
add_error(__('У вас не установлена библиотека 'zip' для работы с архивами')); 
    }

    if (!
is_dir(PATH_CACHE)) {    
        @
mkdir(PATH_CACHE0777); 
        @
chmod(PATH_CACHE0777); 
    }

    if (!
is_file(PATH_PLUGINS '/index.php')) {
        
file_put_contents(PATH_PLUGINS '/index.php'"<?php nn// Index Of");
    }

    
$tmpFile PATH_CACHE.'/'.$sess_id.'.zip'

    if (!
copy($file_path$tmpFile)) {
        
add_error(__('Не удалось загрузить плагин'));
    }

    if (
is_file($tmpFile)) {
        return 
ds_plugin_zip_install($tmpFile); 
    }
}


function 
ds_plugin_zip_install($zip_path
{
    
$sess_id md5($zip_path); ; 

    if (
is_file($zip_path)) {
        if (!
is_errors()) {
            
$zip = new ZipArchive();
            
$zip->open($zip_pathZipArchive::CREATE);
            
$zip->extractTo(PATH_CACHE.'/' $sess_id);
            
$zip->close();

            
unlink($zip_path); 

            
$files_list ds_readdir_files_list(PATH_CACHE.'/' $sess_id); 
            
$dires_list ds_readdir_dir_list(PATH_CACHE.'/' $sess_id); 

            if (!isset(
$dires_list[0])) {
                
add_error('Подходящих плагинов не найдено');
            } else {
                
preg_match('/([A-z0-9_-]+)/?$/m'$dires_list[0], $matches); 

                if (isset(
$matches[1])) {
                    
$plugin_id $matches[1]; 
                }
                
                if (!isset(
$plugin_id) || !is_file(PATH_CACHE.'/' $sess_id '/' $plugin_id '/' $plugin_id '.php')) {
                    
add_error(__('Подходящих плагинов не найдено')); 
                }
            }

            if (isset(
$plugin_id) && is_dir(PATH_PLUGINS '/' $plugin_id)) {
                
add_error(__('Такой плагин уже установлен')); 
            }

            if (!
is_errors()) {
                if (
rename(PATH_CACHE.'/' $sess_id '/' $plugin_idPATH_PLUGINS '/' $plugin_id)) {
                    
delete_dir(PATH_CACHE.'/' $sess_id); 

                    
                    
$plugins = new Plugins(); 
                    
$info $plugins->getPluginInfo(PATH_PLUGINS '/' $plugin_id$plugin_id); 
                    
$info['active'] = 0
                    

                    
do_event('ds_plugin_installed'$plugin_id); 
                    return 
true
                } else {
                    
add_error(__('Не удалось установить плагин')); 
                }
            }
        }
    }

    if (
is_errors()) {
        if (
is_dir(PATH_CACHE.'/' $sess_id)) {
            
delete_dir(PATH_CACHE.'/' $sess_id); 
        }
        
        if (
is_file($zip_path)) {
            
unlink($zip_path); 
        }
    }

    return 
false
}
Онлайн: 1
Реклама