Dotclear

source: plugins/widgets/index.php @ 1648:2eee4ee2798e

Revision 1648:2eee4ee2798e, 10.6 KB checked in by Lepeltier kévin, 12 years ago (diff)

Ticket #1604
remplacement des div par des ul li
Ajout de draggable dans jQuery ui
Ajout de sortable et draggable version ui il manque la supression
L'avertissement "No widget" est permanent, mais masqué par js ('display none') je suppose que ça va pas le faire avec a11y

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 -----------------------------------------
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{
48     # Filter selection
49     $addw = array();
50     foreach ($_POST['addw'] as $k => $v) {
51          if (($v == 'extra' || $v == 'nav' || $v == 'custom') && $__widgets->{$k} !== null ) {
52               $addw[$k] = $v;
53          }
54     }
55     
56     # Append widgets
57     if (!empty($addw))
58     {
59          if (!($widgets_nav instanceof dcWidgets)) {
60               $widgets_nav = new dcWidgets;
61          }
62          if (!($widgets_extra instanceof dcWidgets)) {
63               $widgets_extra = new dcWidgets();
64          }
65          if (!($widgets_custom instanceof dcWidgets)) {
66               $widgets_custom = new dcWidgets();
67          }
68         
69          foreach ($addw as $k => $v)
70          {
71               switch ($v) {
72                    case 'nav':
73                         $widgets_nav->append($__widgets->{$k});
74                         break;
75                    case 'extra':
76                         $widgets_extra->append($__widgets->{$k});
77                         break;
78                    case 'custom':
79                         $widgets_custom->append($__widgets->{$k});
80                         break;
81               }
82          }
83         
84          try {
85               $core->blog->settings->addNamespace('widgets');
86               $core->blog->settings->widgets->put('widgets_nav',$widgets_nav->store());
87               $core->blog->settings->widgets->put('widgets_extra',$widgets_extra->store());
88               $core->blog->settings->widgets->put('widgets_custom',$widgets_custom->store());
89               $core->blog->triggerBlog();
90               http::redirect($p_url);
91          } catch (Exception $e) {
92               $core->error->add($e->getMessage());
93          }
94     }
95}
96
97# Update sidebars
98if (!empty($_POST['wup']))
99{
100     if (!isset($_POST['w']) || !is_array($_POST['w'])) {
101          $_POST['w'] = array();
102     }
103     
104     try
105     {
106          # Removing mark as _rem widgets
107          foreach ($_POST['w'] as $nsid => $nsw) {
108               foreach ($nsw as $i => $v) {
109                    if (!empty($v['_rem'])) {
110                         unset($_POST['w'][$nsid][$i]);
111                         continue;
112                    }
113               }
114          }
115         
116          if (!isset($_POST['w']['nav'])) {
117               $_POST['w']['nav'] = array();
118          }
119          if (!isset($_POST['w']['extra'])) {
120               $_POST['w']['extra'] = array();
121          }
122          if (!isset($_POST['w']['custom'])) {
123               $_POST['w']['custom'] = array();
124          }
125         
126          $widgets_nav = dcWidgets::loadArray($_POST['w']['nav'],$__widgets);
127          $widgets_extra = dcWidgets::loadArray($_POST['w']['extra'],$__widgets);
128          $widgets_custom = dcWidgets::loadArray($_POST['w']['custom'],$__widgets);
129         
130          $core->blog->settings->addNamespace('widgets');
131          $core->blog->settings->widgets->put('widgets_nav',$widgets_nav->store());
132          $core->blog->settings->widgets->put('widgets_extra',$widgets_extra->store());
133          $core->blog->settings->widgets->put('widgets_custom',$widgets_custom->store());
134          $core->blog->triggerBlog();
135         
136          http::redirect($p_url);
137     }
138     catch (Exception $e)
139     {
140          $core->error->add($e->getMessage());
141     }
142}
143elseif (!empty($_POST['wreset']))
144{
145     try
146     {
147          $core->blog->settings->addNamespace('widgets');
148          $core->blog->settings->widgets->put('widgets_nav','');
149          $core->blog->settings->widgets->put('widgets_extra','');
150          $core->blog->settings->widgets->put('widgets_custom','');
151          $core->blog->triggerBlog();
152         
153          http::redirect($p_url);
154     }
155     catch (Exception $e)
156     {
157          $core->error->add($e->getMessage());
158     }
159}
160?>
161<html>
162<head>
163  <title><?php echo __('Widgets'); ?></title>
164  <style type="text/css">
165  <?php echo file_get_contents(dirname(__FILE__).'/style.css'); ?>
166  </style>
167     <script type="text/javascript" src="js/jquery/jquery-ui.custom.js"></script>
168  <script type="text/javascript" src="index.php?pf=widgets/widgets.js"></script>
169  <?php 
170     $core->auth->user_prefs->addWorkspace('accessibility'); 
171     $user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
172  ?>
173  <?php if (!$user_dm_nodragdrop) : ?>
174  <script type="text/javascript" src="index.php?pf=widgets/dragdrop.js"></script>
175  <?php endif; ?>
176  <script type="text/javascript">
177  //<![CDATA[
178  <?php echo dcPage::jsVar('dotclear.msg.confirm_widgets_reset',
179     __('Are you sure you want to reset sidebars?')); ?>
180  //]]>
181  </script>
182  <?php echo(dcPage::jsConfirmClose('sidebarsWidgets')); ?>
183</head>
184<body>
185<?php
186echo dcPage::breadcrumb(
187     array(
188          html::escapeHTML($core->blog->name) => '',
189          '<span class="page-title">'.__('Widgets').'</span>' => ''
190     ));
191
192# All widgets
193echo
194'<form id="listWidgets" action="'.$p_url.'" method="post"  class="widgets">'.
195'<h3>'.__('Available widgets').'</h3>'.
196'<p>'.__('Move widgets from this list to one of the sidebars.').'</p>'.
197'<ul id="widgets">';
198
199$j = 0;
200foreach ($__widgets->elements(true) as $w) {
201     echo
202     '<li>'.form::hidden(array('w[void][0][id]'),html::escapeHTML($w->id())).
203     '<p class="widget-name">'.form::field(array('w[void][0][order]'),2,3,0,'hideControl').' '.
204     $w->name().($w->desc() != '' ? ' <span class="form-note">'.__($w->desc()).'</span>' : '').'</p>'.
205     '<p class="js-remove"><label class="classic">'.__('Append to:').'</label> '.
206     form::combo(array('addw['.$w->id().']'),$append_combo).'</p>'.
207     '<div class="widgetSettings">'.$w->formSettings('w[void][0]',$j).'</div>'.
208     '</li>';
209     $j++;
210}
211
212echo
213'</ul>'.
214$core->formNonce().
215'<p class="js-remove"><input type="submit" name="append" value="'.__('Add widgets to sidebars').'" /></p>'.
216'</form>';
217
218echo '<form id="sidebarsWidgets" action="'.$p_url.'" method="post">';
219# Nav sidebar
220echo
221'<div id="sidebarNav" class="widgets fieldset">'.
222sidebarWidgets('dndnav',__('Navigation sidebar'),$widgets_nav,'nav',$__default_widgets['nav'],$j).
223'</div>';
224
225# Extra sidebar
226echo
227'<div id="sidebarExtra" class="widgets fieldset">'.
228sidebarWidgets('dndextra',__('Extra sidebar'),$widgets_extra,'extra',$__default_widgets['extra'],$j).
229'</div>';
230
231# Custom sidebar
232echo
233'<div id="sidebarCustom" class="widgets fieldset">'.
234sidebarWidgets('dndcustom',__('Custom sidebar'),$widgets_custom,'custom',$__default_widgets['custom'],$j).
235'</div>';
236
237echo
238'<p id="sidebarsControl">'.
239$core->formNonce().
240'<input type="submit" name="wup" value="'.__('Update sidebars').'" /> '.
241'<input type="submit" class="reset" name="wreset" value="'.__('Reset sidebars').'" /></p>'.
242'</form>';
243
244$widget_elements = new stdClass;
245$widget_elements->content =
246'<h3 class="clear">'.__('Use of widgets').'</h3>'.
247'<p>'.__('Widgets may be used to add various blocks of content to be displayed on your public pages. To add a widget, '.
248'drag it from the Available widgets list on the left to one of the sidebars on the right of this page. You can order '.
249'your widgets in a sidebar by dragging them up or down. You must update sidebars to apply your changes.').'</p>'.
250'<p>'.__('Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next '.
251'to their name.').'</p>'.
252'<p>'.__('Reset sidebars to get back to default widgets installation.').'</p>'.
253'<h3 class="clear">'.__('Widget templates tags').'</h3>'.
254'<div id="widgets-tpl">'.
255'<p>'.__('If you are allowed to edit your theme templates, you can directly add widgets as '.
256'templates tags, with their own configuration.').'</p>'.
257'<p>'.__('To add a widget in your template, you need to write code like this:').'</p>'.
258'<pre>&lt;tpl:Widget id="<strong>'.__('Widget ID').'</strong>"&gt;
259  &lt;setting name="<strong>'.__('Setting name').'</strong>"&gt;<strong>'.__('Setting value').'</strong>&lt;/setting&gt;
260  ...
261&lt;/tpl:Widget&gt;</pre>'.
262'<p>'.__('Here are the following available widgets for your blog:').'</p>';
263
264$widget_elements->content .= '<dl>';
265foreach ($__widgets->elements() as $w)
266{
267     $widget_elements->content .=
268     '<dt><strong>'.html::escapeHTML($w->name()).'</strong> ('.
269     __('Widget ID:').' <strong>'.html::escapeHTML($w->id()).'</strong>)'.
270     ($w->desc() != '' ? ' <span class="form-note">'.__($w->desc()).'</span>' : '').'</dt>'.
271     '<dd>';
272     
273     $w_settings = $w->settings();
274     if (empty($w_settings))
275     {
276          $widget_elements->content .= '<p>'.__('No setting for this widget').'</p>';
277     }
278     else
279     {
280          $widget_elements->content .= '<ul>';
281          foreach ($w->settings() as $n => $s)
282          {
283               switch ($s['type']) {
284                    case 'check':
285                         $s_type = __('boolean').", ".__('possible values:')." <code>0</code> ".__('or')." <code>1</code>";
286                         break;
287                    case 'combo':
288                         $s['options'] = array_map("literalNullString", $s['options']);
289                         $s_type = __('listitem').", ".__('possible values:')." <code>".implode('</code>, <code>',$s['options'])."</code>";
290                         break;
291                    case 'text':
292                    case 'textarea':
293                    default:
294                         $s_type = __('string');
295                         break;
296               }
297               
298               $widget_elements->content .=
299               '<li>'.
300               __('Setting name:').' <strong>'.html::escapeHTML($n).'</strong>'.
301               ' ('.$s_type.')'.
302               '</li>';
303          }
304          $widget_elements->content .= '</ul>';
305     }
306     $widget_elements->content .= '</dd>';
307}
308$widget_elements->content .= '</dl></div>';
309
310dcPage::helpBlock($widget_elements);
311
312function sidebarWidgets($id,$title,$widgets,$pr,$default_widgets,&$j)
313{
314     $res = '<h3>'.$title.'</h3>';
315     
316     if (!($widgets instanceof dcWidgets))
317     {
318          $widgets = $default_widgets;
319     }
320     
321     if ($widgets->isEmpty()) {
322          $res .= '<p class="empty-widgets">'.__('No widget.').'</p>';
323     } else {
324          $res .= '<p class="empty-widgets" style="display: none;">'.__('No widget.').'</p>';
325     }
326     
327     $res .= '<ul id="'.$id.'" class="connected">';
328     
329     $i = 0;
330     foreach ($widgets->elements() as $w)
331     {
332          $iname = 'w['.$pr.']['.$i.']';
333         
334          $res .=
335          '<li>'.form::hidden(array($iname.'[id]'),html::escapeHTML($w->id())).
336          '<p class="widget-name">'.form::field(array($iname.'[order]'),2,3,(string) $i,'js-hide','',0,'title="'.__('order').'"').' '.
337          $w->name().($w->desc() != '' ? ' <!-- <span class="form-note">'.__($w->desc()).'</span> -->' : '').'</p>'.
338          '<p class="removeWidget js-remove"><label class="classic">'.
339          form::checkbox(array($iname.'[_rem]'),'1',0).' '.__('Remove widget').
340          '</label></p>'.
341          '<div class="widgetSettings">'.$w->formSettings($iname,$j).'</div>'.
342          '</li>';
343         
344          $i++;
345          $j++;
346     }
347     
348     $res .= '</ul>';
349     
350     return $res;
351}
352?>
353</body>
354</html>
Note: See TracBrowser for help on using the repository browser.

Sites map