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
'
';
}
}
catch (Exception $e) {
echo '';
}
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:').'
';
foreach ($plugins_install['success'] as $k => $v) {
echo
'- '.$k.'
';
}
echo
'
';
}
if (!empty($plugins_install['failure'])) {
echo
''.__('Following plugins have not been installed:').'
';
foreach ($plugins_install['failure'] as $k => $v) {
echo
'- '.$k.' ('.$v.')
';
}
echo
'
';
}
# -- 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
'
';
# 'Fetch plugin' form
echo
'
';
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();
?>