Dotclear

source: plugins/widgets/index.php @ 3330:cd9381e6be7b

Revision 3330:cd9381e6be7b, 12.0 KB checked in by franck <carnet.franck.paul@…>, 9 years ago (diff)

Rich-text-editor (xhtml) may be disabled for Blog/Category? description, widget's textareas, …

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

Sites map