Dotclear

source: admin/plugins.php @ 3066:aa297059d2a0

Revision 3066:aa297059d2a0, 6.3 KB checked in by Dsls, 10 years ago (diff)

Disable plugins with unmetdependencies, in admin home and plugins.php admin page. See #1842, fixed partially (need to see how to cope with themes now)

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12
13require dirname(__FILE__).'/../inc/admin/prepend.php';
14
15dcPage::check('admin');
16
17# -- Page helper --
18$list = new adminModulesList(
19     $core->plugins,
20     DC_PLUGINS_ROOT,
21     $core->blog->settings->system->store_plugin_url
22);
23
24adminModulesList::$allow_multi_install = (boolean) DC_ALLOW_MULTI_MODULES;
25adminModulesList::$distributed_modules = explode(',', DC_DISTRIB_PLUGINS);
26
27if ($core->plugins->disableDepModules($core->adminurl->get('admin.plugins',array()))) {
28     exit;
29}
30
31# -- Display module configuration page --
32if ($list->setConfiguration()) {
33
34     # Get content before page headers
35     include $list->includeConfiguration();
36
37     # Gather content
38     $list->getConfiguration();
39
40     # Display page
41     dcPage::open(__('Plugins management'),
42
43          # --BEHAVIOR-- pluginsToolsHeaders
44          $core->callBehavior('pluginsToolsHeaders', $core, true),
45
46          dcPage::breadcrumb(
47               array(
48                    html::escapeHTML($core->blog->name) => '',
49                    __('Plugins management') => $list->getURL('',false),
50                    '<span class="page-title">'.__('Plugin configuration').'</span>' => ''
51               ))
52     );
53
54     # Display previously gathered content
55     $list->displayConfiguration();
56
57     dcPage::helpBlock('core_plugins_conf');
58     dcPage::close();
59
60     # Stop reading code here
61     return;
62}
63
64# -- Execute actions --
65try {
66     $list->doActions();
67}
68catch (Exception $e) {
69     $core->error->add($e->getMessage());
70}
71
72# -- Plugin install --
73$plugins_install = null;
74if (!$core->error->flag()) {
75     $plugins_install = $core->plugins->installModules();
76}
77
78# -- Page header --
79dcPage::open(__('Plugins management'),
80     dcPage::jsLoad('js/_plugins.js').
81     dcPage::jsPageTabs().
82
83     # --BEHAVIOR-- pluginsToolsHeaders
84     $core->callBehavior('pluginsToolsHeaders', $core, false),
85
86     dcPage::breadcrumb(
87          array(
88               __('System') => '',
89               __('Plugins management') => ''
90          ))
91);
92
93# -- Plugins install messages --
94if (!empty($plugins_install['success'])) {
95     echo
96     '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
97
98     foreach ($plugins_install['success'] as $k => $v) {
99          echo
100          '<li>'.$k.'</li>';
101     }
102
103     echo
104     '</ul></div>';
105}
106if (!empty($plugins_install['failure'])) {
107     echo
108     '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
109
110     foreach ($plugins_install['failure'] as $k => $v) {
111          echo
112          '<li>'.$k.' ('.$v.')</li>';
113     }
114
115     echo
116     '</ul></div>';
117}
118
119# -- Display modules lists --
120if ($core->auth->isSuperAdmin()) {
121
122     # Updated modules from repo
123     $modules = $list->store->get(true);
124     if (!empty($modules)) {
125          echo
126          '<div class="multi-part" id="update" title="'.html::escapeHTML(__('Update plugins')).'">'.
127          '<h3>'.html::escapeHTML(__('Update plugins')).'</h3>'.
128          '<p>'.sprintf(
129               __('There is one plugin to update available from repository.', 'There are %s plugins to update available from repository.', count($modules)),
130               count($modules)
131          ).'</p>';
132
133          $list
134               ->setList('plugin-update')
135               ->setTab('update')
136               ->setModules($modules)
137               ->displayModules(
138                    /*cols */      array('checkbox', 'icon', 'name', 'version', 'current_version', 'desc'),
139                    /* actions */  array('update')
140               );
141
142          echo
143          '<p class="info vertical-separator">'.sprintf(
144               __("Visit %s repository, the resources center for Dotclear."),
145               '<a href="http://plugins.dotaddict.org/dc2/">Dotaddict</a>'
146               ).
147          '</p>'.
148
149          '</div>';
150     }
151}
152
153echo
154'<div class="multi-part" id="plugins" title="'.__('Installed plugins').'">';
155
156# Activated modules
157$modules = $list->modules->getModules();
158if (!empty($modules)) {
159
160     echo
161     '<h3>'.($core->auth->isSuperAdmin() ?__('Activated plugins') : __('Installed plugins')).'</h3>'.
162     '<p>'.__('You can configure and manage installed plugins from this list.').'</p>';
163
164     $list
165          ->setList('plugin-activate')
166          ->setTab('plugins')
167          ->setModules($modules)
168          ->displayModules(
169               /* cols */          array('expander', 'icon', 'name', 'version', 'desc', 'distrib','deps'),
170               /* actions */  array('deactivate', 'delete', 'behavior')
171          );
172}
173
174# Deactivated modules
175if ($core->auth->isSuperAdmin()) {
176     $modules = $list->modules->getDisabledModules();
177     if (!empty($modules)) {
178          echo
179          '<h3>'.__('Deactivated plugins').'</h3>'.
180          '<p>'.__('Deactivated plugins are installed but not usable. You can activate them from here.').'</p>';
181
182          $list
183               ->setList('plugin-deactivate')
184               ->setTab('plugins')
185               ->setModules($modules)
186               ->displayModules(
187                    /* cols */          array('expander', 'icon', 'name', 'version', 'desc', 'distrib'),
188                    /* actions */  array('activate', 'delete')
189               );
190     }
191}
192
193echo
194'</div>';
195
196if ($core->auth->isSuperAdmin() && $list->isWritablePath()) {
197
198     # New modules from repo
199     $search = $list->getSearch();
200     $modules = $search ? $list->store->search($search) : $list->store->get();
201
202     if (!empty($search) || !empty($modules)) {
203          echo
204          '<div class="multi-part" id="new" title="'.__('Add plugins').'">'.
205          '<h3>'.__('Add plugins from repository').'</h3>';
206//        '<p>'.__('Search and install plugins directly from repository.').'</p>';
207
208          $list
209               ->setList('plugin-new')
210               ->setTab('new')
211               ->setModules($modules)
212               ->displaySearch()
213               ->displayIndex()
214               ->displayModules(
215                    /* cols */          array('expander', 'name', 'score', 'version', 'desc','deps'),
216                    /* actions */  array('install'),
217                    /* nav limit */     true
218               );
219
220          echo
221          '<p class="info vertical-separator">'.sprintf(
222               __("Visit %s repository, the resources center for Dotclear."),
223               '<a href="http://plugins.dotaddict.org/dc2/">Dotaddict</a>'
224               ).
225          '</p>'.
226
227          '</div>';
228     }
229
230     # Add a new plugin
231     echo
232     '<div class="multi-part" id="addplugin" title="'.__('Install or upgrade manually').'">'.
233     '<h3>'.__('Add plugins from a package').'</h3>'.
234     '<p>'.__('You can install plugins by uploading or downloading zip files.').'</p>';
235
236     $list->displayManualForm();
237
238     echo
239     '</div>';
240}
241
242# --BEHAVIOR-- pluginsToolsTabs
243$core->callBehavior('pluginsToolsTabs', $core);
244
245# -- Notice for super admin --
246if ($core->auth->isSuperAdmin() && !$list->isWritablePath()) {
247     echo
248     '<p class="warning">'.__('Some functions are disabled, please give write access to your plugins directory to enable them.').'</p>';
249}
250
251dcPage::helpBlock('core_plugins');
252dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map