r1397: Setting system improvements:
[bugdar.git] / admin / setting.php
1 <?php
2 /*=====================================================================*\
3 || ###################################################################
4 || # Bugdar [#]version[#]
5 || # Copyright ©2002-[#]year[#] Blue Static
6 || #
7 || # This program is free software; you can redistribute it and/or modify
8 || # it under the terms of the GNU General Public License as published by
9 || # the Free Software Foundation; version [#]gpl[#] of the License.
10 || #
11 || # This program is distributed in the hope that it will be useful, but
12 || # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 || # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 || # more details.
15 || #
16 || # You should have received a copy of the GNU General Public License along
17 || # with this program; if not, write to the Free Software Foundation, Inc.,
18 || # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 || ###################################################################
20 \*=====================================================================*/
21
22 require_once('./global.php');
23 require_once('./includes/class_sort.php');
24 require_once('./includes/functions_datastore.php');
25
26 NavLinks::optionsPages();
27 $navigator->set_focus('tab', 'options', null);
28 $navigator->set_focus('link', 'options-pages-settings', 'options-pages');
29
30 if (!can_perform('canadmintools'))
31 {
32 admin_login();
33 }
34
35 // ###################################################################
36
37 if (empty($_REQUEST['do']))
38 {
39 $_REQUEST['do'] = 'modify';
40 }
41
42 // ###################################################################
43
44 if ($_POST['do'] == 'update')
45 {
46 $updates = array();
47 foreach ($bugsys->in['setting'] AS $varname => $value)
48 {
49 if (is_array($value))
50 {
51 if ($varname == 'columnoptions')
52 {
53 $value = serialize($value);
54 }
55 else
56 {
57 $value = implode(',', $value);
58 }
59 }
60
61 $updates[] = "('" . $bugsys->escape($varname) . "', '" . $bugsys->escape($value) . "')";
62 }
63
64 $db->query("REPLACE INTO " . TABLE_PREFIX . "setting (varname, value) VALUES " . implode(',', $updates));
65
66 build_settings();
67
68 $admin->redirect('setting.php');
69 }
70
71 // ###################################################################
72
73 if ($_REQUEST['do'] == 'modify')
74 {
75 $admin->page_start(_('Settings'));
76
77 $admin->form_start('setting.php', 'update');
78
79 $IS_SETTINGS = true;
80
81 // ###################################################################
82 $admin->table_start();
83 $admin->table_head(_('General Options'));
84
85 // allownewreg
86 $admin->row_span(_('Allow New Registrations'), 'thead');
87 $admin->row_yesno(_('If this is set to <em>yes</em>, then new users will be allowed to register.'), 'setting[allownewreg]', $bugsys->options['allownewreg']);
88
89 // verifyemail
90 $admin->row_span(_('Require Activation Email'), 'thead');
91 $admin->row_yesno(_('Setting this to yes will force all new users to verify their account with an email activation link.'), 'setting[verifyemail]', $bugsys->options['verifyemail']);
92
93 // moderatenewusers
94 $admin->row_span(_('Moderate New Users'), 'thead');
95 $admin->row_yesno(_('All new users will have to be approved by the administration before being able to have normal user rights.'), 'setting[moderatenewusers]', $bugsys->options['moderatenewusers']);
96
97 // sendwelcomemail
98 $admin->row_span(_('Send New Use Welcome Email'), 'thead');
99 $admin->row_yesno(_('Setting this option to <em>yes</em> will send each new verified user a welcome email.'), 'setting[sendwelcomemail]', $bugsys->options['sendwelcomemail']);
100
101 // webmasteremail
102 $admin->row_span(_('Webmaster Email Address'), 'thead');
103 $admin->row_input(_('The email address from which emails will be sent out.'), 'setting[webmasteremail]', $bugsys->options['webmasteremail']);
104
105 // trackertitle
106 $admin->row_span(_('Tracker Title'), 'thead');
107 $admin->row_input(_('The global name of the bug tracker. Example: Blue Static Bug Tracker'), 'setting[trackertitle]', $bugsys->options['trackertitle']);
108
109 // trackerurl
110 $admin->row_span(_('Tracker Base URL'), 'thead');
111 $admin->row_input(_('The base URL of the tracker. This is used when creating external links to the tracker. <strong>Be sure that this does not end in a trailing slash (&quot;/&quot;).</strong><br />Example: http://www.bluestatic.org/bugs'), 'setting[trackerurl]', $bugsys->options['trackerurl']);
112
113 // dateformat
114 $admin->row_span(_('Date Format'), 'thead');
115 $admin->row_input(_('Set the date format used for bug report and comment information. This is based on PHP\'s date() function.'), 'setting[dateformat]', $bugsys->options['dateformat']);
116
117 // defaulttimezone
118 $admin->row_span(_('Default Time Zone'), 'thead');
119 $admin->row_text(_('This controls the time zone that all unregistered users view the tracker with.'), construct_option_select('setting[defaulttimezone]', $bugsys->datef->fetch_timezone_list(), $bugsys->options['defaulttimezone']), $bugsys->options['defaulttimezone']);
120
121 // defaultlanguage
122 $admin->row_span(_('Default Language'), 'thead');
123 $admin->row_text(_('You can set the default language that all new users (and guests) will use.'), construct_option_select('setting[defaultlanguage]', $bugsys->datastore['language'], $bugsys->options['defaultlanguage'], 'languageid', 'title'), $bugsys->options['defaultlanguage']);
124
125 // syndicateditems
126 $admin->row_span(_('Number of Syndicated Items'), 'thead');
127 $admin->row_input(_('The number of bugs to be syndicated at any one time by the Atom XML feed.'), 'setting[syndicateditems]', $bugsys->options['syndicateditems']);
128
129 // redirectheaders
130 $admin->row_span(_('Use Header Redirects'), 'thead');
131 $admin->row_yesno(_('Instead of displaying an intermediate page informing the user that their action was a success and a redirect is occurring, just send the user to the next screen using HTTP headers. This can save bandwidth.'), 'setting[redirectheaders]', $bugsys->options['redirectheaders']);
132
133 $admin->table_end();
134
135 // ###################################################################
136 $admin->table_start();
137 $admin->table_head(_('Bug Reporting Options'));
138
139 // allowhtml
140 $admin->row_span(_('Allow HTML in Bug Reports'), 'thead');
141 $admin->row_yesno(_('Set this to <em>yes</em> if you want to allow users to post raw HTML in their bug reports. This is <strong>very</strong> dangerous and it is not recommended.'), 'setting[allowhtml]', $bugsys->options['allowhtml']);
142
143 // defaultseverity
144 $admin->row_span(_('Default Severity'), 'thead');
145 $admin->row_text(_('The default severity that is selected when creating a new bug report.'), construct_option_select('setting[defaultseverity]', $bugsys->datastore['severity'], $bugsys->options['defaultseverity'], 'severityid', 'severity'));
146
147 // defaultpriority
148 $admin->row_span(_('Default Priority'), 'thead');
149 $admin->row_text(_('The default priority that will be selected when creating a new bug report. Depending on your permission setup, the user may not be able to set this in a new report so this will act as the value.'), construct_option_select('setting[defaultpriority]', $bugsys->datastore['priority'], $bugsys->options['defaultpriority'], 'priorityid', 'priority'));
150
151 // defaultstatus
152 $admin->row_span(_('Default Status'), 'thead');
153 $admin->row_text(_('The default default that is selected when creating a new bug report. If a user can not assign a status, this will be the one inserted into the database.'), construct_option_select('setting[defaultstatus]', $bugsys->datastore['status'], $bugsys->options['defaultstatus'], 'statusid', 'status'));
154
155 // defaultresolve
156 $admin->row_span(_('Default Resolution'), 'thead');
157 $admin->row_text(_('This is the default bug resolution. If a user is not able to change this field, setting this will act as the default value.'), construct_option_select('setting[defaultresolve]', $bugsys->datastore['resolution'], $bugsys->options['defaultresolve'], 'resolutionid', 'resolution'));
158
159 // defaultassign
160 $admin->row_span(_('Default Bug Assignment'), 'thead');
161 $admin->row_text(_('This is the default developer new bugs will be assigned to. If a user does not have permisssion to assign bugs, this will be the default. If you don\'t want any default assignment, leave this as <em>Not Selected</em>.'), construct_option_select('setting[defaultassign]', $bugsys->datastore['assignto'], $bugsys->options['defaultassign'], 'userid', 'displayname', 0));
162
163 // defaultcomment
164 $admin->row_span(_('Default Comment Text'), 'thead');
165 $admin->row_textarea(_('If you wish to set a template for entering the initial comment of a bug report, then you may specify this here. However, the template will only take effect on the initial report/comment. Note: the template cannot be forced on the user as there is no way to validate it.'), 'setting[defaultcomment]', $bugsys->options['defaultcomment']);
166
167 $admin->table_end();
168
169 // ###################################################################
170 $admin->table_start();
171 $admin->table_head(_('Bug Listing Display Options'));
172
173 // hidestatuses
174 $admin->row_span(_('Hide Statuses on Bug Listings'), 'thead');
175 $admin->row_text(_('Here you can specify which statuses to hide on the bug list displays. Users have options in their controls to change this from these values, and this does not affect searches or the favorites list.'), construct_option_select('setting[hidestatuses]', $bugsys->datastore['status'], $bugsys->options['hidestatuses'], 'statusid', 'status', 0, true));
176
177 // defaultsortkey
178 $admin->row_span(_('Default Sort Column'), 'thead');
179 $admin->row_text(_('Select the column to sort bugs by on listings. This is only a default setting which users can override in their preferences.'), construct_option_select('setting[defaultsortkey]', ListSorter::fetch_by_text(false), $bugsys->options['defaultsortkey']));
180
181 // defaultsortas
182 $admin->row_span(_('Default Sort Direction'), 'thead');
183 $admin->row_text(_('Specify the default direction to sort bugs in the selected column. This works with and follows the same rules as the Sort Column.'), construct_option_select('setting[defaultsortas]', ListSorter::fetch_as_text(false), $bugsys->options['defaultsortas']));
184
185 // columnoptions
186 $admin->row_span(_('Default Column Ordering Options'), 'thead');
187 $admin->row_text(_('Specify the order of the columns for bug listings. The value 0 disables the display of a column and if two or more columns have the same position number, they will be displayed in the same column.'), ConstructColumnOptionsSetting());
188
189 $admin->table_end();
190
191 // ###################################################################
192 $admin->table_start();
193 $admin->table_head(_('Pagination Options'));
194
195 // defaultpp
196 $admin->row_span(_('Default Per-Page Amount'), 'thead');
197 $admin->row_input(_('The number of items (e.g. bugs) to be displayed on a page by default. The user will have the option of over-riding these values.'), 'setting[defaultpp]', $bugsys->options['defaultpp']);
198
199 // maxpp
200 $admin->row_span(_('Maximum Per-Page Value'), 'thead');
201 $admin->row_input(_('To prevent your server from experiencing load problems, set the maximum per page limit. Specifying a value here will make sure any user-entered value will not be higher than this, preventing server load problems.'), 'setting[maxpp]', $bugsys->options['maxpp']);
202
203 // pagelinks
204 $admin->row_span(_('Number of Page Links'), 'thead');
205 $admin->row_input(_('The number of pages that will appear in the page navigation system on either side of the current page. Set this to 0 to display all pages.'), 'setting[pagelinks]', $bugsys->options['pagelinks']);
206
207 $admin->table_end();
208
209 // ###################################################################
210 if (DEVDEBUG)
211 {
212 $admin->table_start();
213 $admin->table_head('Untouchables');
214
215 // trackerversion
216 $admin->row_span('Version Number', 'thead');
217 $admin->row_input('Version Number', 'setting[trackerversion]', $bugsys->options['trackerversion']);
218 }
219
220 // ###################################################################
221 $admin->table_start();
222 $admin->row_submit();
223 $admin->table_end();
224 $admin->form_end();
225
226 $admin->page_end();
227 }
228
229 // ###################################################################
230 /**
231 * Helper function for the $bugsys->options['columnoptions'] setting
232 *
233 * @return string Setting HTML code
234 */
235 function ConstructColumnOptionsSetting()
236 {
237 global $bugsys;
238
239 $array = ($bugsys->options['columnoptions'] == null ? array('bugid' => 1, 'summary' => 2, 'userid' => 2, 'product' => 3, 'version' => 3, 'component' => 0, 'status' => 4, 'resolution' => 4, 'priority' => 5, 'severity' => 5, 'lastpost' => 6, 'votes' => 0) : $bugsys->options['columnoptions']);
240
241 $return = '<table cellspacing="2" cellpadding="1" border="0">';
242 foreach ($bugsys->columns AS $column => $mask)
243 {
244 $return .= '<tr><td><strong>' . $bugsys->columnNames["$column"] . '</strong></td><td><input type="text" name="setting[columnoptions][' . $column . ']" size="2" maxlength="2" class="input" value="' . intval($array["$column"]) . '" /></td></tr>';
245 }
246 $return .= '</table>';
247 return $return;
248 }
249
250 /*=====================================================================*\
251 || ###################################################################
252 || # $HeadURL$
253 || # $Id$
254 || ###################################################################
255 \*=====================================================================*/
256 ?>