Dotclear

source: plugins/widgets/index.php @ 270:48858be15bda

Revision 270:48858be15bda, 8.5 KB checked in by Franck <carnet.franck.paul@…>, 14 years ago (diff)

Changement d'année

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 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 and extra 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
26$append_combo = array(
27     '-' => 0,
28     __('navigation') => 'nav',
29     __('extra') => 'extra'
30);
31
32# Adding widgets to sidebars
33if (!empty($_POST['append']) && is_array($_POST['addw']))
34{
35     # Filter selection
36     $addw = array();
37     foreach ($_POST['addw'] as $k => $v) {
38          if (($v == 'extra' || $v == 'nav') && $__widgets->{$k} !== null ) {
39               $addw[$k] = $v;
40          }
41     }
42     
43     # Append widgets
44     if (!empty($addw))
45     {
46          if (!($widgets_nav instanceof dcWidgets)) {
47               $widgets_nav = new dcWidgets;
48          }
49          if (!($widgets_extra instanceof dcWidgets)) {
50               $widgets_extra = new dcWidgets();
51          }
52         
53          foreach ($addw as $k => $v)
54          {
55               switch ($v) {
56                    case 'nav':
57                         $widgets_nav->append($__widgets->{$k});
58                         break;
59                    case 'extra':
60                         $widgets_extra->append($__widgets->{$k});
61                         break;
62                   
63               }
64          }
65         
66          try {
67               $core->blog->settings->addNamespace('widgets');
68               $core->blog->settings->widgets->put('widgets_nav',$widgets_nav->store());
69               $core->blog->settings->widgets->put('widgets_extra',$widgets_extra->store());
70               $core->blog->triggerBlog();
71               http::redirect($p_url);
72          } catch (Exception $e) {
73               $core->error->add($e->getMessage());
74          }
75     }
76}
77
78# Update sidebars
79if (!empty($_POST['wup']))
80{
81     if (!isset($_POST['w']) || !is_array($_POST['w'])) {
82          $_POST['w'] = array();
83     }
84     
85     try
86     {
87          # Removing mark as _rem widgets
88          foreach ($_POST['w'] as $nsid => $nsw) {
89               foreach ($nsw as $i => $v) {
90                    if (!empty($v['_rem'])) {
91                         unset($_POST['w'][$nsid][$i]);
92                         continue;
93                    }
94               }
95          }
96         
97          if (!isset($_POST['w']['nav'])) {
98               $_POST['w']['nav'] = array();
99          }
100          if (!isset($_POST['w']['extra'])) {
101               $_POST['w']['extra'] = array();
102          }
103         
104          $widgets_nav = dcWidgets::loadArray($_POST['w']['nav'],$__widgets);
105          $widgets_extra = dcWidgets::loadArray($_POST['w']['extra'],$__widgets);
106         
107          $core->blog->settings->addNamespace('widgets');
108          $core->blog->settings->widgets->put('widgets_nav',$widgets_nav->store());
109          $core->blog->settings->widgets->put('widgets_extra',$widgets_extra->store());
110          $core->blog->triggerBlog();
111         
112          http::redirect($p_url);
113     }
114     catch (Exception $e)
115     {
116          $core->error->add($e->getMessage());
117     }
118}
119elseif (!empty($_POST['wreset']))
120{
121     try
122     {
123          $core->blog->settings->addNamespace('widgets');
124          $core->blog->settings->widgets->put('widgets_nav','');
125          $core->blog->settings->widgets->put('widgets_extra','');
126          $core->blog->triggerBlog();
127         
128          http::redirect($p_url);
129     }
130     catch (Exception $e)
131     {
132          $core->error->add($e->getMessage());
133     }
134}
135?>
136<html>
137<head>
138  <title><?php echo __('Widgets'); ?></title>
139  <style type="text/css">
140  <?php echo file_get_contents(dirname(__FILE__).'/style.css'); ?>
141  </style>
142  <script type="text/javascript" src="js/tool-man/core.js"></script>
143  <script type="text/javascript" src="js/tool-man/events.js"></script>
144  <script type="text/javascript" src="js/tool-man/css.js"></script>
145  <script type="text/javascript" src="js/tool-man/coordinates.js"></script>
146  <script type="text/javascript" src="js/tool-man/drag.js"></script>
147  <?php 
148     $core->auth->user_prefs->addWorkspace('accessibility'); 
149     $user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
150  ?>
151  <?php if (!$user_dm_nodragdrop) : ?>
152  <script type="text/javascript" src="index.php?pf=widgets/dragdrop.js"></script>
153  <?php endif; ?>
154  <script type="text/javascript" src="index.php?pf=widgets/widgets.js"></script>
155  <script type="text/javascript">
156  //<![CDATA[
157  <?php echo dcPage::jsVar('dotclear.msg.confirm_widgets_reset',
158     __('Are you sure you want to reset sidebars?')); ?>
159  //]]>
160  </script>
161  <?php echo(dcPage::jsConfirmClose('sidebarsWidgets')); ?>
162</head>
163<body>
164<?php
165echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.__('Widgets').'</h2>';
166
167# All widgets
168echo
169'<form id="listWidgets" action="'.$p_url.'" method="post"  class="widgets">'.
170'<fieldset><legend>'.__('Available widgets').'</legend>'.
171'<div id="widgets">';
172
173$j = 0;
174foreach ($__widgets->elements(true) as $w) {
175     echo
176     '<div>'.form::hidden(array('w[void][0][id]'),html::escapeHTML($w->id())).
177     '<p class="widget-name">'.form::field(array('w[void][0][order]'),2,3,0,'hideControl').' '.
178     $w->name().'</p>'.
179     '<p class="js-remove"><label class="classic">'.__('Append to:').' '.
180     form::combo(array('addw['.$w->id().']'),$append_combo).'</label></p>'.
181     '<div class="widgetSettings">'.$w->formSettings('w[void][0]',$j).'</div>'.
182     '</div>';
183     $j++;
184}
185
186echo
187'</div>'.
188'</fieldset>'.
189'<p><input type="submit" class="js-remove" name="append" value="'.__('add widgets to sidebars').'" />'.
190$core->formNonce().'</p>'.
191'</form>';
192
193echo '<form id="sidebarsWidgets" action="'.$p_url.'" method="post">';
194# Nav sidebar
195echo
196'<div id="sidebarNav" class="widgets">'.
197sidebarWidgets('dndnav',__('Navigation sidebar'),$widgets_nav,'nav',$__default_widgets['nav'],$j).
198'</div>';
199
200# Extra sidebar
201echo
202'<div id="sidebarExtra" class="widgets">'.
203sidebarWidgets('dndextra',__('Extra sidebar'),$widgets_extra,'extra',$__default_widgets['extra'],$j).
204'</div>';
205
206echo
207'<p id="sidebarsControl">'.
208$core->formNonce().
209'<input type="submit" name="wup" value="'.__('update sidebars').'" /> '.
210'<input type="submit" class="reset" name="wreset" value="'.__('reset sidebars').'" /></p>'.
211'</form>';
212
213$widget_elements = new stdClass;
214$widget_elements->content =
215'<h3 class="clear">'.__('Widget templates tags').'</h3>'.
216'<div id="widgets-tpl">'.
217'<p>'.__('If you are allowed to edit your theme templates, you can directly add widgets as '.
218'templates tags, with their own configuration.').'</p>'.
219'<p>'.__('To add a widget in your template, you need to write code like this:').'</p>'.
220'<pre>&lt;tpl:Widget id="<strong>'.__('Widget ID').'</strong>"&gt;
221  &lt;setting name="<strong>'.__('Setting name').'</strong>"&gt;<strong>'.__('Setting value').'</strong>&lt;/setting&gt;
222  ...
223&lt;/tpl:Widget&gt;</pre>'.
224'<p>'.__('Here are the following available widgets for your blog:').'</p>';
225
226$widget_elements->content .= '<dl>';
227foreach ($__widgets->elements() as $w)
228{
229     $widget_elements->content .=
230     '<dt><strong>'.html::escapeHTML($w->name()).'</strong> ('.
231     __('Widget ID:').' <strong>'.html::escapeHTML($w->id()).'</strong>)</dt>'.
232     '<dd>';
233     
234     $w_settings = $w->settings();
235     if (empty($w_settings))
236     {
237          $widget_elements->content .= '<p>'.__('No setting for this widget').'</p>';
238     }
239     else
240     {
241          $widget_elements->content .= '<ul>';
242          foreach ($w->settings() as $n => $s)
243          {
244               switch ($s['type']) {
245                    case 'check':
246                         $s_type = '0|1';
247                         break;
248                    case 'combo':
249                         $s_type = implode('|',$s['options']);
250                         break;
251                    case 'text':
252                    case 'textarea':
253                    default:
254                         $s_type = 'text';
255                         break;
256               }
257               
258               $widget_elements->content .=
259               '<li>'.
260               __('Setting name:').' <strong>'.html::escapeHTML($n).'</strong>'.
261               ' ('.$s_type.')'.
262               '</li>';
263          }
264          $widget_elements->content .= '</ul>';
265     }
266     $widget_elements->content .= '</dd>';
267}
268$widget_elements->content .= '</dl></div>';
269
270dcPage::helpBlock($widget_elements);
271
272function sidebarWidgets($id,$title,$widgets,$pr,$default_widgets,&$j)
273{
274     $res = '<fieldset><legend>'.$title.'</legend><div id="'.$id.'">';
275     
276     if (!($widgets instanceof dcWidgets))
277     {
278          $widgets = $default_widgets;
279     }
280     
281     if ($widgets->isEmpty()) {
282          $res .= '<p class="empty-widgets">'.__('No widget.').'</p>';
283     }
284     
285     $i = 0;
286     foreach ($widgets->elements() as $w)
287     {
288          $iname = 'w['.$pr.']['.$i.']';
289         
290          $res .=
291          '<div>'.form::hidden(array($iname.'[id]'),html::escapeHTML($w->id())).
292          '<p class="widget-name">'.form::field(array($iname.'[order]'),2,3,(string) $i,'js-hide','',0,'title="'.__('order').'"').' '.
293          $w->name().'</p>'.
294          '<p class="removeWidget js-remove"><label class="classic">'.
295          form::checkbox(array($iname.'[_rem]'),'1',0).' '.__('Remove widget').
296          '</label></p>'.
297          '<div class="widgetSettings">'.$w->formSettings($iname,&$j).'</div>'.
298          '</div>';
299         
300          $i++;
301          $j++;
302     }
303     
304     $res .= '</div></fieldset>';
305     
306     return $res;
307}
308?>
309</body>
310</html>
Note: See TracBrowser for help on using the repository browser.

Sites map