Dotclear

source: plugins/dcAdvancedCleaner/index.php @ 2199

Revision 2199, 8.4 KB checked in by JcDenis, 13 years ago (diff)

dcAdvancedCleaner 0.4:

  • Fixed list of tables (closes #440)
  • Fixed direct uninstaller
  • Added readable errors return
  • Added DC 2.2 compatibility (new settings)
  • Changed admin design
Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of dcAdvancedCleaner, a plugin for Dotclear 2.
4#
5# Copyright (c) 2009-2010 JC Denis and contributors
6# jcdenis@gdwd.com
7#
8# Licensed under the GPL version 2.0 license.
9# A copy of this license is available in LICENSE file or at
10# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11# -- END LICENSE BLOCK ------------------------------------
12
13if (!defined('DC_CONTEXT_ADMIN')){return;}
14
15if (!$core->auth->isSuperAdmin()){return;}
16
17# Lists
18function drawDcAdvancedCleanerLists($core,$type)
19{
20     $combo_funcs = array(
21          'settings' => array('dcAdvancedCleaner','getSettings'),
22          'tables' => array('dcAdvancedCleaner','getTables'),
23          'plugins' => array('dcAdvancedCleaner','getPlugins'),
24          'themes' => array('dcAdvancedCleaner','getThemes'),
25          'caches' => array('dcAdvancedCleaner','getCaches'),
26          'versions' => array('dcAdvancedCleaner','getVersions')
27     );
28     $combo_actions = array(
29          'settings' => array(
30               __('delete global settings') => 'delete_global',
31               __('delete blog settings') => 'delete_local',
32               __('delete all settings') =>'delete_all'
33          ),
34          'tables' => array(
35               __('delete') => 'delete',
36               __('empty') => 'empty'
37          ),
38          'plugins' => array(
39               __('delete') => 'delete',
40               __('empty') => 'empty'
41          ),
42          'themes' => array(
43               __('delete') => 'delete',
44               __('empty') => 'empty'
45          ),
46          'caches' => array(
47               __('delete') => 'delete',
48               __('empty') => 'empty'
49          ),
50          'versions' => array(
51               __('delete') => 'delete'
52          )
53     );
54     $combo_help = array(
55          'settings' => __('Namespaces registered in dcSettings'),
56          'tables' => __('All database tables of Dotclear'),
57          'plugins' => __('Folders from plugins directories'),
58          'themes' => __('Folders from blog themes directory'),
59          'caches' => __('Folders from cache directory'),
60          'versions' => __('Versions registered in table "version" of Dotclear')
61     );
62
63     if (!isset($combo_funcs[$type])) return '';
64
65     $s = dcAdvancedCleanerSettings($core);
66     $rs = call_user_func($combo_funcs[$type],$core);
67
68     echo 
69     '<div class="listDcAdvancedCleaner">'.
70     '<p class="form-note">'.$combo_help[$type].'</p>';
71     
72     if (empty($rs)) {
73          echo 
74          '<p>'.sprintf(__('There is no %s'),__(substr($type,0,-1))).'</p>';
75     } else {
76
77          echo
78          '<p>'.sprintf(__('There are %s %s'),count($rs),__($type)).'</p>'.
79          '<form method="post" action="plugin.php?p=dcAdvancedCleaner&amp;tab=lists&amp;part='.$type.'">'.
80          '<table><thead><tr>'.
81          '<th>'.__('Name').'</th><th>'.__('Objects').'</th>'.
82          '</tr></thead><tbody>';
83
84          foreach($rs as $k => $v)
85          {
86               $offline = in_array($v['key'],dcAdvancedCleaner::$dotclear[$type]);
87
88               if ($s->dcAdvancedCleaner_dcproperty_hide && $offline) continue;
89
90               echo 
91               '<tr class="line'.
92               ($offline ? ' offline' : '').
93               '">'.
94               '<td class="nowrap"><label class="classic">'.
95               form::checkbox(array('entries['.$k.']'),html::escapeHTML($v['key'])).' '.$v['key'].'</label></td>'.
96               '<td class="nowrap">'.$v['value'].'</td>'.
97               '</tr>';
98          }
99
100          echo
101          '</tbody></table>'.
102          '<p>'.__('Action on selected rows:').'<br />'.
103          form::combo(array('action'),$combo_actions[$type]).
104          '<input type="submit" value="'.__('ok').'" />'.
105          form::hidden(array('p'),'dcAdvancedCleaner').
106          form::hidden(array('tab'),'lists').
107          form::hidden(array('part'),$type).
108          form::hidden(array('type'),$type).
109          $core->formNonce().'</p>'.
110          '</form>';
111     }
112     echo 
113     '<div>';
114}
115
116# Localized l10n
117__('Settings'); __('settings'); __('setting');
118__('Tables'); __('tables'); __('table');
119__('Plugins'); __('plugins'); __('plugin');
120__('Themes'); __('themes'); __('theme');
121__('Caches'); __('caches'); __('cache');
122__('Versions'); __('versions'); __('version');
123__('delete table');
124__('delete cache files');
125__('delete plugin files');
126__('delete theme files');
127__('delete the version number');
128__('Uninstall extensions');
129__('delete %s blog settings');
130__('delete %s global settings');
131__('delete all %s settings');
132__('delete %s table');
133__('delete %s version number');
134__('delete %s plugin files');
135__('delete %s theme file');
136__('delete %s cache files');
137
138# vars
139$msg = isset($_GET['msg']) ? true : false;
140$tab = isset($_REQUEST['tab']) ? $_REQUEST['tab'] : 'dcac';
141$part = isset($_REQUEST['part']) ? $_REQUEST['part'] : 'caches';
142$entries = isset($_POST['entries']) ? $_POST['entries'] : '';
143$action = isset($_POST['action']) ? $_POST['action'] : '';
144$type = isset($_POST['type']) ? $_POST['type'] : '';
145$s = dcAdvancedCleanerSettings($core);
146
147# Combos
148$combo_title = array(
149     'settings' => __('Settings'),
150     'tables' => __('Tables'),
151     'plugins' => __('Extensions'),
152     'themes' => __('Themes'),
153     'caches' => __('Cache'),
154     'versions' => __('Versions')
155);
156     
157$combo_type = array(
158     'settings' => array('delete_global','delete_local','delete_all'),
159     'tables' => array('empty','delete'),
160     'plugins' => array('empty','delete'),
161     'themes' => array('empty','delete'),
162     'caches' => array('empty','delete'),
163     'versions' => array('delete')
164);
165
166# This plugin settings
167if ($tab == 'dcac' && $action == 'dcadvancedcleaner_settings')
168{
169     try {
170          $s->put('dcAdvancedCleaner_behavior_active',isset($_POST['dcadvancedcleaner_behavior_active']),'boolean');
171          $s->put('dcAdvancedCleaner_dcproperty_hide',isset($_POST['dcadvancedcleaner_dcproperty_hide']),'boolean');
172
173          http::redirect($p_url.'&tab=dcac&part=dcac&part=&msg=done');
174     }
175     catch(Exception $e) {
176          $core->error->add($e->getMessage());
177     }
178}
179
180# Actions
181if ($tab == 'lists' && !empty($entries) 
182 && isset($combo_type[$type]) 
183 && in_array($action,$combo_type[$type])) {
184
185     try {
186          foreach($entries as $v) {
187               dcAdvancedCleaner::execute($core,$type,$action,$v);
188          }
189
190          http::redirect($p_url.'&tab=lists&part='.$part.'&msg=done');
191     }
192     catch(Exception $e) {
193          $core->error->add($e->getMessage());
194     }
195}
196
197echo '
198<html><head>
199<title>'.__('Advanced cleaner').'</title>
200<link rel="stylesheet" type="text/css" href="index.php?pf=dcAdvancedCleaner/style.css" />'.
201dcPage::jsToolBar().
202dcPage::jsPageTabs($tab).'
203</style>';
204
205# --BEHAVIOR-- dcAdvancedCleanerAdminHeader
206$core->callBehavior('dcAdvancedCleanerAdminHeader',$core,$p_url,$tab);
207
208echo '
209</head><body>
210<h2 class="bombDcAdvancedCleaner">'.html::escapeHTML($core->blog->name).
211' &rsaquo; '.__('Advanced cleaner').'</h2>
212<p class="static-msg">'.__('Beware: All actions done here are irreversible and are directly applied').'</p>';
213
214if (!empty($msg)) { echo '<p class="message">'.__('Action successfully done').'</p>'; }
215
216echo '<div class="multi-part" id="lists" title="'.__('Records and folders').'">'.
217'<p>';
218foreach($combo_title as $k => $v)
219{
220     echo '<a class="button" href="'.$p_url.'&amp;tab=lists&part='.$k.'">'.$v.'</a> ';
221}
222echo '</p>';
223     
224# Load "part" page
225if (isset($combo_title[$part]))
226{
227     echo '<fieldset><legend>'.$combo_title[$part].'</legend>';
228     drawDcAdvancedCleanerLists($core,$part);
229     echo '</fieldset>';
230}
231echo '</div>';
232
233# --BEHAVIOR-- dcAdvancedCleanerAdminTabs
234$core->callBehavior('dcAdvancedCleanerAdminTabs',$core,$p_url);
235
236echo '
237<div class="multi-part" id="dcac" title="'.__('This plugin settings').'">
238<fieldset><legend>'.__('This plugin settings').'</legend>
239<form method="post" action="'.$p_url.'&amp;tab=dcac&part=">
240<p class="field"><label>'.
241form::checkbox(array('dcadvancedcleaner_behavior_active'),'1',
242$s->dcAdvancedCleaner_behavior_active).
243__('Activate behaviors').'</label></p>
244<p class="form-note">'.__('Enable actions set in _uninstall.php files.').'</p>
245<p class="field"><label>'.
246form::checkbox(array('dcadvancedcleaner_dcproperty_hide'),'1',
247$s->dcAdvancedCleaner_dcproperty_hide).
248__('Hide Dotclear default properties in actions tabs').'
249</label></p>
250<p class="form-note">'.__('Prevent from deleting Dotclear important properties.').'</p>
251<p><input type="submit" name="submit" value="'.__('Save').'" />'.
252form::hidden(array('p'),'dcAdvancedCleaner').
253form::hidden(array('tab'),'dcac').
254form::hidden(array('part'),'').
255form::hidden(array('action'),'dcadvancedcleaner_settings').
256$core->formNonce().'</p>
257</form>
258</fieldset>
259</div>';
260
261dcPage::helpBlock('dcAdvancedCleaner');
262echo '
263<hr class="clear"/>
264<p class="right">
265<a class="button" href="'.$p_url.'&amp;part=dcac">'.__('settings').'</a> -
266dcAdvancedCleaner - '.$core->plugins->moduleInfo('dcAdvancedCleaner','version').'&nbsp;
267<img alt="dcMiniUrl" src="index.php?pf=dcAdvancedCleaner/icon.png" />
268</p>
269</body></html>';
270?>
Note: See TracBrowser for help on using the repository browser.

Sites map