Dotclear

source: plugins/userPref/index.php @ 3161:468195e4ad8b

Revision 3161:468195e4ad8b, 6.4 KB checked in by franck <carnet.franck.paul@…>, 10 years ago (diff)

Use new pref type 'array' for some prefs, addresses #1833

RevLine 
[3]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
[3]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
[589]14# Local navigation
15if (!empty($_POST['gp_nav'])) {
16     http::redirect($p_url.$_POST['gp_nav']);
17     exit;
18}
19if (!empty($_POST['lp_nav'])) {
20     http::redirect($p_url.$_POST['lp_nav']);
21     exit;
22}
23
[3]24# Local prefs update
25if (!empty($_POST['s']) && is_array($_POST['s']))
26{
27     try
28     {
[3161]29          foreach ($_POST['s'] as $ws => $s) {
[3]30               $core->auth->user_prefs->addWorkspace($ws);
[3161]31               foreach ($s as $k => $v) {
32                    if ($_POST['s_type'][$ws][$k] == 'array') {
33                         $v = json_decode($v,true);
34                    }
[3]35                    $core->auth->user_prefs->$ws->put($k,$v);
36               }
37          }
[2566]38
[2256]39          dcPage::addSuccessNotice(__('Preferences successfully updated'));
40          http::redirect($p_url);
[3]41     }
42     catch (Exception $e)
43     {
44          $core->error->add($e->getMessage());
45     }
46}
47
48# Global prefs update
49if (!empty($_POST['gs']) && is_array($_POST['gs']))
50{
51     try
52     {
[3161]53          foreach ($_POST['gs'] as $ws => $s) {
[3]54               $core->auth->user_prefs->addWorkspace($ws);
[3161]55               foreach ($s as $k => $v) {
56                    if ($_POST['gs_type'][$ws][$k] == 'array') {
57                         $v = json_decode($v,true);
58                    }
[3]59                    $core->auth->user_prefs->$ws->put($k,$v,null,null,true,true);
60               }
61          }
[2566]62
[2256]63          dcPage::addSuccessNotice(__('Preferences successfully updated'));
64          http::redirect($p_url.'&part=global');
[3]65     }
66     catch (Exception $e)
67     {
68          $core->error->add($e->getMessage());
69     }
70}
71
72$part = !empty($_GET['part']) && $_GET['part'] == 'global' ? 'global' : 'local';
73
74function prefLine($id,$s,$ws,$field_name,$strong_label)
75{
76     if ($s['type'] == 'boolean') {
[2254]77          $field = form::combo(array($field_name.'['.$ws.']['.$id.']',$field_name.'_'.$ws.'_'.$id),
[1109]78          array(__('yes') => 1, __('no') => 0),$s['value'] ? 1 : 0);
[3]79     } else {
[3161]80          if ($s['type'] == 'array') {
81               $field = form::field(array($field_name.'['.$ws.']['.$id.']',$field_name.'_'.$ws.'_'.$id),40,null,
82               html::escapeHTML(json_encode($s['value'])));
83          } else {
84               $field = form::field(array($field_name.'['.$ws.']['.$id.']',$field_name.'_'.$ws.'_'.$id),40,null,
85               html::escapeHTML($s['value']));
86          }
[3]87     }
[3161]88     $type = form::hidden(array($field_name.'_type'.'['.$ws.']['.$id.']',$field_name.'_'.$ws.'_'.$id.'_type'),
89          html::escapeHTML($s['type']));
[2566]90
[3]91     $slabel = $strong_label ? '<strong>%s</strong>' : '%s';
[2566]92
[3]93     return
[1348]94     '<tr class="line">'.
[2254]95     '<td scope="row"><label for="'.$field_name.'_'.$ws.'_'.$id.'">'.sprintf($slabel,html::escapeHTML($id)).'</label></td>'.
[3]96     '<td>'.$field.'</td>'.
[3161]97     '<td>'.$s['type'].$type.'</td>'.
[3]98     '<td>'.html::escapeHTML($s['label']).'</td>'.
99     '</tr>';
100}
101?>
102<html>
103<head>
104  <title>user:preferences</title>
105  <?php echo dcPage::jsPageTabs($part); ?>
[589]106     <script type="text/javascript">
107     //<![CDATA[
108     $(function() {
[2685]109          $("#gp_submit,#lp_submit").hide();
110          $('#part-local,#part-global').tabload(function() {
111               $('.multi-part.active select.navigation option:first').attr('selected',true);
[2815]112          });
[589]113          $("#gp_nav").change(function() {
114               window.location = $("#gp_nav option:selected").val();
[2685]115          });
[589]116          $("#lp_nav").change(function() {
117               window.location = $("#lp_nav option:selected").val();
[2685]118          });
[589]119     });
120     //]]>
121     </script>
[3]122</head>
123
124<body>
125<?php
[1358]126echo dcPage::breadcrumb(
127     array(
128          __('System') => '',
129          html::escapeHTML($core->auth->userID()) => '',
[2166]130          __('user:preferences') => ''
[2256]131     )).
132     dcPage::notices();
[1358]133
[3]134?>
135
[1338]136<div id="local" class="multi-part" title="<?php echo __('User preferences'); ?>">
[2003]137<h3 class="out-of-screen-if-js"><?php echo __('User preferences'); ?></h3>
[581]138
[2566]139<?php
[2002]140$table_header = '<div class="table-outer"><table class="prefs" id="%s"><caption class="as_h3">%s</caption>'.
[581]141'<thead>'.
142'<tr>'."\n".
[3091]143'  <th class="nowrap">'.__('Setting ID').'</th>'."\n".
[581]144'  <th>'.__('Value').'</th>'."\n".
145'  <th>'.__('Type').'</th>'."\n".
146'  <th class="maximalx">'.__('Description').'</th>'."\n".
147'</tr>'."\n".
148'</thead>'."\n".
149'<tbody>';
[2002]150$table_footer = '</tbody></table></div>';
[581]151
[3]152$prefs = array();
153foreach ($core->auth->user_prefs->dumpWorkspaces() as $ws => $workspace) {
154     foreach ($workspace->dumpPrefs() as $k => $v) {
155          $prefs[$ws][$k] = $v;
156     }
157}
[589]158ksort($prefs);
159if (count($prefs) > 0) {
160     $ws_combo = array();
161     foreach ($prefs as $ws => $s) {
162          $ws_combo[$ws] = '#l_'.$ws;
163     }
[2566]164     echo
[2824]165          '<form action="'.$core->adminurl->get('admin.plugin').'" method="post">'.
[589]166          '<p class="anchor-nav">'.
[2685]167          '<label for="lp_nav" class="classic">'.__('Goto:').'</label> '.form::combo('lp_nav',$ws_combo,'','navigation').
[589]168          ' <input type="submit" value="'.__('Ok').'" id="lp_submit" />'.
[2168]169          '<input type="hidden" name="p" value="userPref" />'.
[589]170          $core->formNonce().'</p></form>';
171}
172?>
[3]173
[2824]174<form action="<?php echo $core->adminurl->get('admin.plugin'); ?>" method="post">
[3]175
[589]176<?php
[3]177foreach ($prefs as $ws => $s)
178{
179     ksort($s);
[589]180     echo sprintf($table_header,'l_'.$ws,$ws);
[3]181     foreach ($s as $k => $v)
182     {
183          echo prefLine($k,$v,$ws,'s',!$v['global']);
184     }
[581]185     echo $table_footer;
[3]186}
187?>
[581]188
[220]189<p><input type="submit" value="<?php echo __('Save'); ?>" />
[3]190<input type="hidden" name="p" value="userPref" />
191<?php echo $core->formNonce(); ?></p>
192</form>
193</div>
194
[1338]195<div id="global" class="multi-part" title="<?php echo __('Global preferences'); ?>">
[2003]196<h3 class="out-of-screen-if-js"><?php echo __('Global preferences'); ?></h3>
[581]197
[3]198<?php
199$prefs = array();
200
201foreach ($core->auth->user_prefs->dumpWorkspaces() as $ws => $workspace) {
202     foreach ($workspace->dumpGlobalPrefs() as $k => $v) {
203          $prefs[$ws][$k] = $v;
204     }
205}
206
207ksort($prefs);
208
[582]209if (count($prefs) > 0) {
[589]210     $ws_combo = array();
[582]211     foreach ($prefs as $ws => $s) {
[589]212          $ws_combo[$ws] = '#g_'.$ws;
[582]213     }
[2566]214     echo
[2824]215          '<form action="'.$core->adminurl->get('admin.plugin').'" method="post">'.
[589]216          '<p class="anchor-nav">'.
[2685]217          '<label for="gp_nav" class="classic">'.__('Goto:').'</label> '.form::combo('gp_nav',$ws_combo,'','navigation').
[589]218          ' <input type="submit" value="'.__('Ok').'" id="gp_submit" />'.
[2168]219          '<input type="hidden" name="p" value="userPref" />'.
[589]220          $core->formNonce().'</p></form>';
[582]221}
[589]222?>
[582]223
[2824]224<form action="<?php echo $core->adminurl->get('admin.plugin'); ?>" method="post">
[589]225
226<?php
[3]227foreach ($prefs as $ws => $s)
228{
229     ksort($s);
[589]230     echo sprintf($table_header,'g_'.$ws,$ws);
[3]231     foreach ($s as $k => $v)
232     {
233          echo prefLine($k,$v,$ws,'gs',false);
234     }
[581]235     echo $table_footer;
[3]236}
237?>
[581]238
[220]239<p><input type="submit" value="<?php echo __('Save'); ?>" />
[3]240<input type="hidden" name="p" value="userPref" />
241<?php echo $core->formNonce(); ?></p>
242</form>
243</div>
244
[2322]245<?php dcPage::helpBlock('userPref'); ?>
246
[3]247</body>
[1339]248</html>
Note: See TracBrowser for help on using the repository browser.

Sites map