blog->settings->system->plugins_allow_multi_install === null) { $core->blog->settings->system->put( 'plugins_allow_multi_install', false, 'boolean', 'Allow multi-installation for plugins', true, true ); } if ($core->blog->settings->system->repository_plugin_url === null) { $core->blog->settings->system->put( 'repository_plugin_url', 'http://update.dotaddict.org/dc2/plugins.xml', 'string', 'Plugins XML feed location', true, true ); } # -------------------------------------------------- # -- Repository helper -- $repository = new dcRepository( $core->plugins, $core->blog->settings->system->repository_plugin_url ); $repository->check(); # -- Page helper -- $list = new adminModulesList( $core, DC_PLUGINS_ROOT, $core->blog->settings->system->plugins_allow_multi_install ); # -- Check for module configuration -- $conf_file = false; if (!empty($_REQUEST['conf']) && !empty($_REQUEST['module'])) { if (!$core->plugins->moduleExists($_REQUEST['module'])) { $core->error->add(__('Unknow module ID')); } else { $module = $core->plugins->getModules($_REQUEST['module']); $module = adminModulesList::setModuleInfo($_REQUEST['module'], $module); if (!file_exists(path::real($module['root'].'/_config.php'))) { $core->error->add(__('This module has no configuration file.')); } else { $conf_file = path::real($module['root'].'/_config.php'); } } } # -- Display module configuration page -- if ($conf_file) { dcPage::open(__('Plugins management'), # --BEHAVIOR-- pluginsToolsHeaders $core->callBehavior('pluginsToolsHeaders', $core, $module['id']), dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', ''.__('Plugins management').'' => '', ''.__('Plugin configuration').'' => '' )) ); if (!empty($_GET['done'])){ dcPage::success(__('Plugin successfully configured.')); } try { if (!$module['standalone_config']) { echo '
'. '

'.sprintf(__('Configure plugin "%s"'), html::escapeHTML($module['name'])).'

'. '

'.__('Back').'

'; } include $conf_file; if (!$module['standalone_config']) { echo '

'. form::hidden('module', $module['id']). $core->formNonce().'

'. '
'; } } catch (Exception $e) { echo '

'.$e->getMessage().'

'; } dcPage::close(); # Stop reading code here return; } # -- Execute actions -- if (empty($_POST['conf']) && $core->auth->isSuperAdmin() && $list->isPathWritable()) { # Plugin upload if ((!empty($_POST['upload_pkg']) && !empty($_FILES['pkg_file'])) || (!empty($_POST['fetch_pkg']) && !empty($_POST['pkg_url']))) { try { if (empty($_POST['your_pwd']) || !$core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY, $_POST['your_pwd']))) { throw new Exception(__('Password verification failed')); } if (!empty($_POST['upload_pkg'])) { files::uploadStatus($_FILES['pkg_file']); $dest = $list->getPath().'/'.$_FILES['pkg_file']['name']; if (!move_uploaded_file($_FILES['pkg_file']['tmp_name'], $dest)) { throw new Exception(__('Unable to move uploaded file.')); } } else { $url = urldecode($_POST['pkg_url']); $dest = $list->getPath().'/'.basename($url); $repository->download($url, $dest); } # --BEHAVIOR-- pluginBeforeAdd $core->callBehavior('pluginsBeforeAdd', $plugin_id); $ret_code = $core->plugins->installPackage($dest, $core->plugins); # --BEHAVIOR-- pluginAfterAdd $core->callBehavior('pluginsAfterAdd', $plugin_id); http::redirect('plugins.php?msg='.($ret_code == 2 ? 'update' : 'install').'#plugins'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } elseif (!empty($_POST['module'])) { try { $list->executeAction('plugins', $core->plugins, $repository); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } # -- Plugin install -- $plugins_install = null; if (!$core->error->flag()) { $plugins_install = $core->plugins->installModules(); } # -- Page header -- dcPage::open(__('Plugins management'), dcPage::jsLoad('js/_plugins.js'). dcPage::jsPageTabs(). # --BEHAVIOR-- pluginsToolsHeaders $core->callBehavior('pluginsToolsHeaders', $core, false), dcPage::breadcrumb( array( __('System') => '', ''.__('Plugins management').'' => '' )) ); # -- Succes messages -- if (!empty($_GET['msg'])) { $list->displayMessage($_GET['msg'],__('Plugins')); } # -- Plugins install messages -- if (!empty($plugins_install['success'])) { echo '
'.__('Following plugins have been installed:').'
'; } if (!empty($plugins_install['failure'])) { echo '
'.__('Following plugins have not been installed:').'
'; } # -- Display modules lists -- if ($core->auth->isSuperAdmin() && $list->isPathWritable()) { # Updated modules from repo $modules = $repository->get(true); if (!empty($modules)) { echo '
'. '

'.html::escapeHTML(__('Update plugins')).'

'. '

'.sprintf( __('There is one plugin to update available from %2$s.', 'There are %s plugins to update available from %s.', count($modules)), count($modules), 'Dotaddict' ).'

'; $list ->newList('plugin-update') ->setModules($modules) ->setPageTab('update') ->displayModulesList( /*cols */ array('icon', 'name', 'version', 'current_version', 'desc'), /* actions */ array('update') ); echo '
'; } } # List all active plugins echo '
'; $modules = $core->plugins->getModules(); if (!empty($modules)) { echo '

'.__('Activated plugins').'

'. '

'.__('Manage installed plugins from this list.').'

'; $list ->newList('plugin-activate') ->setModules($modules) ->setPageTab('plugins') ->displayModulesList( /* cols */ array('expander', 'icon', 'name', 'config', 'version', 'desc', 'distrib'), /* actions */ array('deactivate', 'delete') ); } # Deactivated modules $modules = $core->plugins->getDisabledModules(); if (!empty($modules)) { echo '

'.__('Deactivated plugins').'

'. '

'.__('Deactivated plugins are installed but not usable. You can activate them from here.').'

'; $list ->newList('plugin-deactivate') ->setModules($modules) ->setPageTab('plugins') ->displayModulesList( /* cols */ array('icon', 'name', 'distrib'), /* actions */ array('activate', 'delete') ); } echo '
'; if ($core->auth->isSuperAdmin() && $list->isPathWritable()) { # New modules from repo $search = $list->getSearchQuery(); $modules = $search ? $repository->search($search) : $repository->get(); echo '
'. '

'.__('Add plugins from Dotaddict repository').'

'; $list ->newList('plugin-new') ->setModules($modules) ->setPageTab('new') ->displaySearchForm() ->displayNavMenu() ->displayModulesList( /* cols */ array('expander', 'name', 'version', 'desc'), /* actions */ array('install'), /* nav limit */ true ); echo '

'.sprintf( __("Visit %s repository, the resources center for Dotclear."), 'Dotaddict' ). '

'. '
'; # Add a new plugin echo '
'; echo '

'.__('You can install plugins by uploading or downloading zip files.').'

'; # 'Upload plugin' form echo '
'. '

'.__('Upload a zip file').'

'. '

'. '

'. '

'. form::password(array('your_pwd','your_pwd1'),20,255).'

'. '

'. $core->formNonce(). '

'. '
'; # 'Fetch plugin' form echo '
'. '

'.__('Download a zip file').'

'. '

'. form::field(array('pkg_url','pkg_url'),40,255).'

'. '

'. form::password(array('your_pwd','your_pwd2'),20,255).'

'. '

'. $core->formNonce().'

'. '
'; echo '
'; } # --BEHAVIOR-- pluginsToolsTabs $core->callBehavior('pluginsToolsTabs', $core); # -- Notice for super admin -- if ($core->auth->isSuperAdmin() && !$list->isPathWritable()) { echo '

'.__('Some functions are disabled, please give write access to your plugins directory to enable them.').'

'; } dcPage::close(); ?>