Dotclear

source: plugins/widgets/index.php @ 1650:d62b141eeae6

Revision 1650:d62b141eeae6, 10.7 KB checked in by Lepeltier kévin, 11 years ago (diff)

Ticket #1604 progression

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,'js-hide','',0,'title="'.__('order').'"').' '.$w->name().
204     ($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'<ul class="sortable-delete"></ul>';
225
226# Extra sidebar
227echo
228'<div id="sidebarExtra" class="widgets fieldset">'.
229sidebarWidgets('dndextra',__('Extra sidebar'),$widgets_extra,'extra',$__default_widgets['extra'],$j).
230'</div>'.
231'<ul class="sortable-delete"></ul>';
232
233# Custom sidebar
234echo
235'<div id="sidebarCustom" class="widgets fieldset">'.
236sidebarWidgets('dndcustom',__('Custom sidebar'),$widgets_custom,'custom',$__default_widgets['custom'],$j).
237'</div>'.
238'<ul class="sortable-delete"></ul>';
239
240echo
241'<p id="sidebarsControl">'.
242$core->formNonce().
243'<input type="submit" name="wup" value="'.__('Update sidebars').'" /> '.
244'<input type="submit" class="reset" name="wreset" value="'.__('Reset sidebars').'" /></p>'.
245'</form>';
246
247$widget_elements = new stdClass;
248$widget_elements->content =
249'<h3 class="clear">'.__('Use of widgets').'</h3>'.
250'<p>'.__('Widgets may be used to add various blocks of content to be displayed on your public pages. To add a widget, '.
251'drag it from the Available widgets list on the left to one of the sidebars on the right of this page. You can order '.
252'your widgets in a sidebar by dragging them up or down. You must update sidebars to apply your changes.').'</p>'.
253'<p>'.__('Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next '.
254'to their name.').'</p>'.
255'<p>'.__('Reset sidebars to get back to default widgets installation.').'</p>'.
256'<h3 class="clear">'.__('Widget templates tags').'</h3>'.
257'<div id="widgets-tpl">'.
258'<p>'.__('If you are allowed to edit your theme templates, you can directly add widgets as '.
259'templates tags, with their own configuration.').'</p>'.
260'<p>'.__('To add a widget in your template, you need to write code like this:').'</p>'.
261'<pre>&lt;tpl:Widget id="<strong>'.__('Widget ID').'</strong>"&gt;
262  &lt;setting name="<strong>'.__('Setting name').'</strong>"&gt;<strong>'.__('Setting value').'</strong>&lt;/setting&gt;
263  ...
264&lt;/tpl:Widget&gt;</pre>'.
265'<p>'.__('Here are the following available widgets for your blog:').'</p>';
266
267$widget_elements->content .= '<dl>';
268foreach ($__widgets->elements() as $w)
269{
270     $widget_elements->content .=
271     '<dt><strong>'.html::escapeHTML($w->name()).'</strong> ('.
272     __('Widget ID:').' <strong>'.html::escapeHTML($w->id()).'</strong>)'.
273     ($w->desc() != '' ? ' <span class="form-note">'.__($w->desc()).'</span>' : '').'</dt>'.
274     '<dd>';
275     
276     $w_settings = $w->settings();
277     if (empty($w_settings))
278     {
279          $widget_elements->content .= '<p>'.__('No setting for this widget').'</p>';
280     }
281     else
282     {
283          $widget_elements->content .= '<ul>';
284          foreach ($w->settings() as $n => $s)
285          {
286               switch ($s['type']) {
287                    case 'check':
288                         $s_type = __('boolean').", ".__('possible values:')." <code>0</code> ".__('or')." <code>1</code>";
289                         break;
290                    case 'combo':
291                         $s['options'] = array_map("literalNullString", $s['options']);
292                         $s_type = __('listitem').", ".__('possible values:')." <code>".implode('</code>, <code>',$s['options'])."</code>";
293                         break;
294                    case 'text':
295                    case 'textarea':
296                    default:
297                         $s_type = __('string');
298                         break;
299               }
300               
301               $widget_elements->content .=
302               '<li>'.
303               __('Setting name:').' <strong>'.html::escapeHTML($n).'</strong>'.
304               ' ('.$s_type.')'.
305               '</li>';
306          }
307          $widget_elements->content .= '</ul>';
308     }
309     $widget_elements->content .= '</dd>';
310}
311$widget_elements->content .= '</dl></div>';
312
313dcPage::helpBlock($widget_elements);
314
315function sidebarWidgets($id,$title,$widgets,$pr,$default_widgets,&$j)
316{
317     $res = '<h3>'.$title.'</h3>';
318     
319     if (!($widgets instanceof dcWidgets))
320     {
321          $widgets = $default_widgets;
322     }
323     
324     if ($widgets->isEmpty()) {
325          $res .= '<p class="empty-widgets">'.__('No widget.').'</p>';
326     } else {
327          $res .= '<p class="empty-widgets" style="display: none;">'.__('No widget.').'</p>';
328     }
329     
330     $res .= '<ul id="'.$id.'" class="connected">';
331     
332     $i = 0;
333     foreach ($widgets->elements() as $w)
334     {
335          $iname = 'w['.$pr.']['.$i.']';
336         
337          $res .=
338          '<li>'.form::hidden(array($iname.'[id]'),html::escapeHTML($w->id())).
339          '<p class="widget-name">'.form::field(array($iname.'[order]'),2,3,(string) $i,'js-hide','',0,'title="'.__('order').'"').' '.$w->name().
340          ($w->desc() != '' ? ' <span class="form-note">'.__($w->desc()).'</span>' : '').'</p>'.
341          '<p class="removeWidget js-remove"><label class="classic">'.
342          form::checkbox(array($iname.'[_rem]'),'1',0).' '.__('Remove widget').
343          '</label></p>'.
344          '<div class="widgetSettings">'.$w->formSettings($iname,$j).'</div>'.
345          '</li>';
346         
347          $i++;
348          $j++;
349     }
350     
351     $res .= '</ul>';
352     
353     return $res;
354}
355?>
356</body>
357</html>
Note: See TracBrowser for help on using the repository browser.

Sites map