Dotclear

source: plugins/widgets/index.php @ 3826:e2716fb376e6

Revision 3826:e2716fb376e6, 14.0 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Activate dcLegacyEditor (if it is the HTML editor set in user pref) for new instances of widgets having textarea in settings.
Doing same for CKEditor seems to be a little bit harder than that, may be completed in future…

Line 
1<?php
2/**
3 * @brief widgets, a plugin for Dotclear 2
4 *
5 * @package Dotclear
6 * @subpackage Plugins
7 *
8 * @copyright Olivier Meunier & Association Dotclear
9 * @copyright GPL-2.0-only
10 */
11
12if (!defined('DC_CONTEXT_ADMIN')) {return;}
13
14include dirname(__FILE__) . '/_default_widgets.php';
15
16# Loading navigation, extra widgets and custom widgets
17$widgets_nav = null;
18if ($core->blog->settings->widgets->widgets_nav) {
19    $widgets_nav = dcWidgets::load($core->blog->settings->widgets->widgets_nav);
20}
21$widgets_extra = null;
22if ($core->blog->settings->widgets->widgets_extra) {
23    $widgets_extra = dcWidgets::load($core->blog->settings->widgets->widgets_extra);
24}
25$widgets_custom = null;
26if ($core->blog->settings->widgets->widgets_custom) {
27    $widgets_custom = dcWidgets::load($core->blog->settings->widgets->widgets_custom);
28}
29
30$append_combo = array(
31    '-'              => 0,
32    __('navigation') => 'nav',
33    __('extra')      => 'extra',
34    __('custom')     => 'custom'
35);
36
37function literalNullString($v)
38{
39    if ($v == '') {
40        return '&lt;' . __('empty string') . '&gt;';
41    }
42    return $v;
43}
44
45# Adding widgets to sidebars
46if (!empty($_POST['append']) && is_array($_POST['addw'])) {
47    # Filter selection
48    $addw = array();
49    foreach ($_POST['addw'] as $k => $v) {
50        if (($v == 'extra' || $v == 'nav' || $v == 'custom') && $__widgets->{$k} !== null) {
51            $addw[$k] = $v;
52        }
53    }
54
55    # Append 1 widget
56    $wid = false;
57    if (gettype($_POST['append']) == 'array' && count($_POST['append']) == 1) {
58        $wid = array_keys($_POST['append']);
59        $wid = $wid[0];
60    }
61
62    # Append widgets
63    if (!empty($addw)) {
64        if (!($widgets_nav instanceof dcWidgets)) {
65            $widgets_nav = new dcWidgets;
66        }
67        if (!($widgets_extra instanceof dcWidgets)) {
68            $widgets_extra = new dcWidgets();
69        }
70        if (!($widgets_custom instanceof dcWidgets)) {
71            $widgets_custom = new dcWidgets();
72        }
73
74        foreach ($addw as $k => $v) {
75            if (!$wid || $wid == $k) {
76                switch ($v) {
77                    case 'nav':
78                        $widgets_nav->append($__widgets->{$k});
79                        break;
80                    case 'extra':
81                        $widgets_extra->append($__widgets->{$k});
82                        break;
83                    case 'custom':
84                        $widgets_custom->append($__widgets->{$k});
85                        break;
86                }
87            }
88        }
89
90        try {
91            $core->blog->settings->addNamespace('widgets');
92            $core->blog->settings->widgets->put('widgets_nav', $widgets_nav->store());
93            $core->blog->settings->widgets->put('widgets_extra', $widgets_extra->store());
94            $core->blog->settings->widgets->put('widgets_custom', $widgets_custom->store());
95            $core->blog->triggerBlog();
96            http::redirect($p_url);
97        } catch (Exception $e) {
98            $core->error->add($e->getMessage());
99        }
100    }
101}
102
103# Removing ?
104$removing = false;
105if (isset($_POST['w']) && is_array($_POST['w'])) {
106    foreach ($_POST['w'] as $nsid => $nsw) {
107        foreach ($nsw as $i => $v) {
108            if (!empty($v['_rem'])) {
109                $removing = true;
110                break 2;
111            }
112        }
113    }
114}
115
116# Move ?
117$move = false;
118if (isset($_POST['w']) && is_array($_POST['w'])) {
119    foreach ($_POST['w'] as $nsid => $nsw) {
120        foreach ($nsw as $i => $v) {
121            if (!empty($v['_down'])) {
122                $oldorder = $_POST['w'][$nsid][$i]['order'];
123                $neworder = $oldorder + 1;
124                if (isset($_POST['w'][$nsid][$neworder])) {
125                    $_POST['w'][$nsid][$i]['order']        = $neworder;
126                    $_POST['w'][$nsid][$neworder]['order'] = $oldorder;
127                    $move                                  = true;
128                }
129            }
130            if (!empty($v['_up'])) {
131                $oldorder = $_POST['w'][$nsid][$i]['order'];
132                $neworder = $oldorder - 1;
133                if (isset($_POST['w'][$nsid][$neworder])) {
134                    $_POST['w'][$nsid][$i]['order']        = $neworder;
135                    $_POST['w'][$nsid][$neworder]['order'] = $oldorder;
136                    $move                                  = true;
137                }
138            }
139        }
140    }
141}
142
143# Update sidebars
144if (!empty($_POST['wup']) || $removing || $move) {
145    if (!isset($_POST['w']) || !is_array($_POST['w'])) {
146        $_POST['w'] = array();
147    }
148
149    try
150    {
151        # Removing mark as _rem widgets
152        foreach ($_POST['w'] as $nsid => $nsw) {
153            foreach ($nsw as $i => $v) {
154                if (!empty($v['_rem'])) {
155                    unset($_POST['w'][$nsid][$i]);
156                    continue;
157                }
158            }
159        }
160
161        if (!isset($_POST['w']['nav'])) {
162            $_POST['w']['nav'] = array();
163        }
164        if (!isset($_POST['w']['extra'])) {
165            $_POST['w']['extra'] = array();
166        }
167        if (!isset($_POST['w']['custom'])) {
168            $_POST['w']['custom'] = array();
169        }
170
171        $widgets_nav    = dcWidgets::loadArray($_POST['w']['nav'], $__widgets);
172        $widgets_extra  = dcWidgets::loadArray($_POST['w']['extra'], $__widgets);
173        $widgets_custom = dcWidgets::loadArray($_POST['w']['custom'], $__widgets);
174
175        $core->blog->settings->addNamespace('widgets');
176        $core->blog->settings->widgets->put('widgets_nav', $widgets_nav->store());
177        $core->blog->settings->widgets->put('widgets_extra', $widgets_extra->store());
178        $core->blog->settings->widgets->put('widgets_custom', $widgets_custom->store());
179        $core->blog->triggerBlog();
180
181        dcPage::addSuccessNotice(__('Sidebars and their widgets have been saved.'));
182        http::redirect($p_url);
183    } catch (Exception $e) {
184        $core->error->add($e->getMessage());
185    }
186} elseif (!empty($_POST['wreset'])) {
187    try
188    {
189        $core->blog->settings->addNamespace('widgets');
190        $core->blog->settings->widgets->put('widgets_nav', '');
191        $core->blog->settings->widgets->put('widgets_extra', '');
192        $core->blog->settings->widgets->put('widgets_custom', '');
193        $core->blog->triggerBlog();
194
195        dcPage::addSuccessNotice(__('Sidebars have been resetting.'));
196        http::redirect($p_url);
197    } catch (Exception $e) {
198        $core->error->add($e->getMessage());
199    }
200}
201?>
202<html>
203<head>
204  <title><?php echo __('Widgets'); ?></title>
205<?php
206echo dcPage::cssLoad(dcPage::getPF('widgets/style.css')) .
207dcPage::jsLoad('js/jquery/jquery-ui.custom.js') .
208dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js') .
209dcPage::jsLoad(dcPage::getPF('widgets/js/widgets.js'));
210
211$core->auth->user_prefs->addWorkspace('accessibility');
212$user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
213if (!$user_dm_nodragdrop) {
214    echo dcPage::jsLoad(dcPage::getPF('widgets/js/dragdrop.js'));
215}
216echo dcPage::jsVars(array('dotclear.msg.confirm_widgets_reset' => __('Are you sure you want to reset sidebars?')));
217
218$widget_editor = $core->auth->getOption('editor');
219$rte_flag      = true;
220$rte_flags     = @$core->auth->user_prefs->interface->rte_flags;
221if (is_array($rte_flags) && in_array('widgets_text', $rte_flags)) {
222    $rte_flag = $rte_flags['widgets_text'];
223}
224if ($rte_flag) {
225    echo dcPage::jsVars(array('dotclear.widget_noeditor' => 0));
226    echo $core->callBehavior('adminPostEditor', $widget_editor['xhtml'], 'widget',
227        array('#sidebarsWidgets textarea:not(.noeditor)'), 'xhtml');
228} else {
229    echo dcPage::jsVars(array('dotclear.widget_noeditor' => 1));
230}
231echo (dcPage::jsConfirmClose('sidebarsWidgets'));
232?>
233</head>
234<body>
235<?php
236echo dcPage::breadcrumb(
237    array(
238        html::escapeHTML($core->blog->name) => '',
239        __('Widgets')                       => ''
240    )) .
241dcPage::notices();
242
243# All widgets
244echo
245'<form id="listWidgets" action="' . $p_url . '" method="post"  class="widgets">' .
246'<h3>' . __('Available widgets') . '</h3>' .
247'<p>' . __('Drag widgets from this list to one of the sidebars, for add.') . '</p>' .
248    '<ul id="widgets-ref">';
249
250$j = 0;
251foreach ($__widgets->elements(true) as $w) {
252    echo
253    '<li>' . form::hidden(array('w[void][0][id]'), html::escapeHTML($w->id())) .
254    '<p class="widget-name">' . form::number(array('w[void][0][order]'), array(
255        'default'    => 0,
256        'class'      => 'hide',
257        'extra_html' => 'title="' . __('order') . '"'
258    )) .
259    ' ' . $w->name() .
260    ($w->desc() != '' ? ' <span class="form-note">' . __($w->desc()) . '</span>' : '') . '</p>' .
261    '<p class="manual-move remove-if-drag"><label class="classic">' . __('Append to:') . '</label> ' .
262    form::combo(array('addw[' . $w->id() . ']'), $append_combo) .
263    '<input type="submit" name="append[' . $w->id() . ']" value="' . __('Add') . '" /></p>' .
264    '<div class="widgetSettings hidden-if-drag">' . $w->formSettings('w[void][0]', $j) . '</div>' .
265        '</li>';
266    $j++;
267}
268
269echo
270'</ul>' .
271'<p>' . $core->formNonce() . '</p>' .
272'<p class="remove-if-drag"><input type="submit" name="append" value="' . __('Add widgets to sidebars') . '" /></p>' .
273    '</form>';
274
275echo '<form id="sidebarsWidgets" action="' . $p_url . '" method="post">';
276# Nav sidebar
277echo
278'<div id="sidebarNav" class="widgets fieldset">' .
279sidebarWidgets('dndnav', __('Navigation sidebar'), $widgets_nav, 'nav', $__default_widgets['nav'], $j);
280echo '</div>';
281
282# Extra sidebar
283echo
284'<div id="sidebarExtra" class="widgets fieldset">' .
285sidebarWidgets('dndextra', __('Extra sidebar'), $widgets_extra, 'extra', $__default_widgets['extra'], $j);
286echo '</div>';
287
288# Custom sidebar
289echo
290'<div id="sidebarCustom" class="widgets fieldset">' .
291sidebarWidgets('dndcustom', __('Custom sidebar'), $widgets_custom, 'custom', $__default_widgets['custom'], $j);
292echo '</div>';
293
294echo
295'<p id="sidebarsControl">' .
296$core->formNonce() .
297'<input type="submit" name="wup" value="' . __('Update sidebars') . '" /> ' .
298'<input type="submit" class="reset" name="wreset" value="' . __('Reset sidebars') . '" /></p>' .
299    '</form>';
300
301$widget_elements          = new stdClass;
302$widget_elements->content = '<dl>';
303foreach ($__widgets->elements() as $w) {
304    $widget_elements->content .=
305    '<dt><strong>' . html::escapeHTML($w->name()) . '</strong> (' .
306    __('Widget ID:') . ' <strong>' . html::escapeHTML($w->id()) . '</strong>)' .
307        ($w->desc() != '' ? ' <span class="form-note">' . __($w->desc()) . '</span>' : '') . '</dt>' .
308        '<dd>';
309
310    $w_settings = $w->settings();
311    if (empty($w_settings)) {
312        $widget_elements->content .= '<p>' . __('No setting for this widget') . '</p>';
313    } else {
314        $widget_elements->content .= '<ul>';
315        foreach ($w->settings() as $n => $s) {
316            switch ($s['type']) {
317                case 'check':
318                    $s_type = __('boolean') . ", " . __('possible values:') . " <code>0</code> " . __('or') . " <code>1</code>";
319                    break;
320                case 'combo':
321                    $s['options'] = array_map("literalNullString", $s['options']);
322                    $s_type       = __('listitem') . ", " . __('possible values:') . " <code>" . implode('</code>, <code>', $s['options']) . "</code>";
323                    break;
324                case 'text':
325                case 'textarea':
326                default:
327                    $s_type = __('string');
328                    break;
329            }
330
331            $widget_elements->content .=
332            '<li>' .
333            __('Setting name:') . ' <strong>' . html::escapeHTML($n) . '</strong>' .
334                ' (' . $s_type . ')' .
335                '</li>';
336        }
337        $widget_elements->content .= '</ul>';
338    }
339    $widget_elements->content .= '</dd>';
340}
341$widget_elements->content .= '</dl></div>';
342
343dcPage::helpBlock('widgets', $widget_elements);
344
345function sidebarWidgets($id, $title, $widgets, $pr, $default_widgets, &$j)
346{
347    $res = '<h3>' . $title . '</h3>';
348
349    if (!($widgets instanceof dcWidgets)) {
350        $widgets = $default_widgets;
351    }
352
353    $res .= '<ul id="' . $id . '" class="connected">';
354
355    $res .= '<li class="empty-widgets" ' . (!$widgets->isEmpty() ? 'style="display: none;"' : '') . '>' . __('No widget as far.') . '</li>';
356
357    $i = 0;
358    foreach ($widgets->elements() as $w) {
359        $upDisabled   = $i == 0 ? ' disabled" src="images/disabled_' : '" src="images/';
360        $downDisabled = $i == count($widgets->elements()) - 1 ? ' disabled" src="images/disabled_' : '" src="images/';
361        $altUp        = $i == 0 ? ' alt=""' : ' alt="' . __('Up the widget') . '"';
362        $altDown      = $i == count($widgets->elements()) - 1 ? ' alt=""' : ' alt="' . __('Down the widget') . '"';
363
364        $iname = 'w[' . $pr . '][' . $i . ']';
365
366        $res .=
367        '<li>' . form::hidden(array($iname . '[id]'), html::escapeHTML($w->id())) .
368        '<p class="widget-name">' . form::number(array($iname . '[order]'), array(
369            'default'    => $i,
370            'class'      => 'hidden',
371            'extra_html' => 'title="' . __('order') . '"'
372        )) .
373        ' ' . $w->name() .
374        ($w->desc() != '' ? ' <span class="form-note">' . __($w->desc()) . '</span>' : '') .
375        '<span class="toolsWidget remove-if-drag">' .
376        '<input type="image" class="upWidget' . $upDisabled . 'up.png" name="' . $iname . '[_up]" value="' . __('Up the widget') . '"' . $altUp . ' /> ' .
377        '<input type="image" class="downWidget' . $downDisabled . 'down.png" name="' . $iname . '[_down]" value="' . __('Down the widget') . '"' . $altDown . ' /> ' . ' ' .
378        '<input type="image" class="removeWidget" src="images/trash.png" name="' . $iname . '[_rem]" value="' . __('Remove widget') . '" alt="' . __('Remove the widget') . '" />' .
379        '</span>' .
380        '<br class="clear"/></p>' .
381        '<div class="widgetSettings hidden-if-drag">' . $w->formSettings($iname, $j) . '</div>' .
382            '</li>';
383
384        $i++;
385        $j++;
386    }
387
388    $res .= '</ul>';
389
390    $res .= '<ul class="sortable-delete"' . ($i > 0 ? '' : ' style="display: none;"') . '><li class="sortable-delete-placeholder">' .
391    __('Drag widgets here to remove.') . '</li></ul>';
392
393    return $res;
394}
395?>
396</body>
397</html>
Note: See TracBrowser for help on using the repository browser.

Sites map