Revision: 2297
http://mrbs.svn.sourceforge.net/mrbs/?rev=2297&view=rev
Author: cimorrison
Date: 2012-05-23 09:17:11 +0000 (Wed, 23 May 2012)
Log Message:
-----------
Extended maximum number of bookings per day/week/month/etc so that they can be
used per area as well as system wide. Note that you can set a setting per
system as well as setting per area enabling you to set policies of the sort
"Max 2 bookings per week in this area and max 5 bookings per week across the
system". Note also that setting 0 bookings per period for an area is a way of
stopping ordinary users from making bookings in a particular area.
Modified Paths:
--------------
mrbs/trunk/tables.my.pre41.sql
mrbs/trunk/tables.my.sql
mrbs/trunk/tables.pg.pre73.sql
mrbs/trunk/tables.pg.sql
mrbs/trunk/web/Themes/default/header.inc
mrbs/trunk/web/areadefaults.inc.php
mrbs/trunk/web/dbsys.inc
mrbs/trunk/web/edit_area_room.php
mrbs/trunk/web/functions.inc
mrbs/trunk/web/internalconfig.inc.php
mrbs/trunk/web/lang.en
mrbs/trunk/web/mrbs.css.php
mrbs/trunk/web/mrbs_sql.inc
Added Paths:
-----------
mrbs/trunk/web/upgrade/30/
mrbs/trunk/web/upgrade/30/mysql.sql
mrbs/trunk/web/upgrade/30/pgsql.sql
Modified: mrbs/trunk/tables.my.pre41.sql
===================================================================
--- mrbs/trunk/tables.my.pre41.sql 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/tables.my.pre41.sql 2012-05-23 09:17:11 UTC (rev 2297)
@@ -39,6 +39,16 @@
min_book_ahead_secs int,
max_book_ahead_enabled tinyint(1),
max_book_ahead_secs int,
+ max_per_day_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_day int DEFAULT 0 NOT NULL,
+ max_per_week_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_week int DEFAULT 0 NOT NULL,
+ max_per_month_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_month int DEFAULT 0 NOT NULL,
+ max_per_year_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_year int DEFAULT 0 NOT NULL,
+ max_per_future_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_future int DEFAULT 0 NOT NULL,
custom_html text,
approval_enabled tinyint(1),
reminders_enabled tinyint(1),
@@ -151,6 +161,6 @@
);
INSERT INTO mrbs_variables (variable_name, variable_content)
- VALUES ( 'db_version', '29');
+ VALUES ( 'db_version', '30');
INSERT INTO mrbs_variables (variable_name, variable_content)
VALUES ( 'local_db_version', '1');
Modified: mrbs/trunk/tables.my.sql
===================================================================
--- mrbs/trunk/tables.my.sql 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/tables.my.sql 2012-05-23 09:17:11 UTC (rev 2297)
@@ -39,6 +39,16 @@
min_book_ahead_secs int,
max_book_ahead_enabled tinyint(1),
max_book_ahead_secs int,
+ max_per_day_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_day int DEFAULT 0 NOT NULL,
+ max_per_week_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_week int DEFAULT 0 NOT NULL,
+ max_per_month_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_month int DEFAULT 0 NOT NULL,
+ max_per_year_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_year int DEFAULT 0 NOT NULL,
+ max_per_future_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ max_per_future int DEFAULT 0 NOT NULL,
custom_html text CHARACTER SET utf8 COLLATE utf8_general_ci,
approval_enabled tinyint(1),
reminders_enabled tinyint(1),
@@ -151,6 +161,6 @@
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO mrbs_variables (variable_name, variable_content)
- VALUES ( 'db_version', '29');
+ VALUES ( 'db_version', '30');
INSERT INTO mrbs_variables (variable_name, variable_content)
VALUES ( 'local_db_version', '1');
Modified: mrbs/trunk/tables.pg.pre73.sql
===================================================================
--- mrbs/trunk/tables.pg.pre73.sql 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/tables.pg.pre73.sql 2012-05-23 09:17:11 UTC (rev 2297)
@@ -42,6 +42,16 @@
min_book_ahead_secs int,
max_book_ahead_enabled smallint,
max_book_ahead_secs int,
+ max_per_day_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_day int DEFAULT 0 NOT NULL,
+ max_per_week_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_week int DEFAULT 0 NOT NULL,
+ max_per_month_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_month int DEFAULT 0 NOT NULL,
+ max_per_year_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_year int DEFAULT 0 NOT NULL,
+ max_per_future_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_future int DEFAULT 0 NOT NULL,
custom_html text,
approval_enabled smallint,
reminders_enabled smallint,
@@ -140,6 +150,6 @@
);
INSERT INTO mrbs_variables (variable_name, variable_content)
- VALUES ('db_version', '29');
+ VALUES ('db_version', '30');
INSERT INTO mrbs_variables (variable_name, variable_content)
VALUES ('local_db_version', '1');
Modified: mrbs/trunk/tables.pg.sql
===================================================================
--- mrbs/trunk/tables.pg.sql 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/tables.pg.sql 2012-05-23 09:17:11 UTC (rev 2297)
@@ -55,6 +55,16 @@
min_book_ahead_secs int,
max_book_ahead_enabled smallint,
max_book_ahead_secs int,
+ max_per_day_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_day int DEFAULT 0 NOT NULL,
+ max_per_week_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_week int DEFAULT 0 NOT NULL,
+ max_per_month_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_month int DEFAULT 0 NOT NULL,
+ max_per_year_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_year int DEFAULT 0 NOT NULL,
+ max_per_future_enabled smallint DEFAULT 0 NOT NULL,
+ max_per_future int DEFAULT 0 NOT NULL,
custom_html text,
approval_enabled smallint,
reminders_enabled smallint,
@@ -153,6 +163,6 @@
);
INSERT INTO mrbs_variables (variable_name, variable_content)
- VALUES ('db_version', '29');
+ VALUES ('db_version', '30');
INSERT INTO mrbs_variables (variable_name, variable_content)
VALUES ('local_db_version', '1');
Modified: mrbs/trunk/web/Themes/default/header.inc
===================================================================
--- mrbs/trunk/web/Themes/default/header.inc 2012-05-08 16:07:58 UTC (rev
2296)
+++ mrbs/trunk/web/Themes/default/header.inc 2012-05-23 09:17:11 UTC (rev
2297)
@@ -649,26 +649,6 @@
}
}
- // disable the min and max book ahead values and units if the corresponding
- // checkbox isn't checked; and enable it it is.
- function check_book_ahead()
- {
- var form = document.getElementById('edit_area');
-
- if (form)
- {
- if (form.area_min_ba_enabled)
- {
- form.area_min_ba_value.disabled = !form.area_min_ba_enabled.checked;
- form.area_min_ba_units.disabled = !form.area_min_ba_enabled.checked;
- }
- if (form.area_max_ba_enabled)
- {
- form.area_max_ba_value.disabled = !form.area_max_ba_enabled.checked;
- form.area_max_ba_units.disabled = !form.area_max_ba_enabled.checked;
- }
- }
- }
<?php
} // edit_area_room
@@ -2576,7 +2556,7 @@
// Also show or hide the periods note as appropriate
// [This method works if there are no periods-specific settings.
// When we get those we will have to do something different]
- ?>
+ ?>
var form = document.getElementById('edit_area');
if (form)
{
@@ -2590,10 +2570,20 @@
{
$('#book_ahead_periods_note').hide();
}
- check_book_ahead();
}
- <?php
+ <?php
+ // Where we've got enabling checkboxes, apply a change event to them so
that
+ // when the enabling checkbox is changed the associated inputs are enabled
or
+ // disabled as appropriate. Also trigger the change event when the page
is loaded
+ // so that the inputs are enabled/disabled correctly initially.
+ ?>
+ $('.enabler').change(function(){
+ $(this).nextAll('input, select').attr('disabled',
!$(this).is(':checked'));
+ })
+ .change();
+
+ <?php
}
// EDIT_ENTRY.PHP
Modified: mrbs/trunk/web/areadefaults.inc.php
===================================================================
--- mrbs/trunk/web/areadefaults.inc.php 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/areadefaults.inc.php 2012-05-23 09:17:11 UTC (rev 2297)
@@ -131,7 +131,27 @@
// will allow somebody to make a booking at 11:59 pm for the first period the
next day, which
// which may occur at 8.00 am.
+// DEFAULT VALUES FOR NEW AREAS
+// Set the maximum number of bookings that can be made in an area by any one
user, in an
+// interval, which can be a day, week, month or year, or else in the future.
(A week is
+// defined by the $weekstarts setting). These are per-area settings but you
can use them
+// in conjunction with the global settings. This would allow you to set
policies such as
+// allowing a maximum of 10 bookings per month in total with a maximum of 1
per day in Area A.
+$max_per_interval_area_enabled['day'] = FALSE;
+$max_per_interval_area['day'] = 1; // max 1 bookings per day in an area
+$max_per_interval_area_enabled['week'] = FALSE;
+$max_per_interval_area['week'] = 5; // max 5 bookings per week in an area
+
+$max_per_interval_area_enabled['month'] = FALSE;
+$max_per_interval_area['month'] = 10; // max 10 bookings per month in an area
+
+$max_per_interval_area_enabled['year'] = FALSE;
+$max_per_interval_area['year'] = 50; // max 50 bookings per year in an area
+
+$max_per_interval_area_enabled['future'] = FALSE;
+$max_per_interval_area['future'] = 100; // max 100 bookings in the future in
an area
+
/************************
* Miscellaneous settings
************************/
Modified: mrbs/trunk/web/dbsys.inc
===================================================================
--- mrbs/trunk/web/dbsys.inc 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/dbsys.inc 2012-05-23 09:17:11 UTC (rev 2297)
@@ -16,7 +16,7 @@
$tbl_zoneinfo = $db_tbl_prefix . "zoneinfo";
-$db_schema_version = 29;
+$db_schema_version = 30;
$local_db_schema_version = 1;
Modified: mrbs/trunk/web/edit_area_room.php
===================================================================
--- mrbs/trunk/web/edit_area_room.php 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/edit_area_room.php 2012-05-23 09:17:11 UTC (rev 2297)
@@ -173,6 +173,15 @@
$change_room = get_form_var('change_room', 'string');
$change_area = get_form_var('change_area', 'string');
+// Get the max_per_interval form variables
+foreach ($interval_types as $interval_type)
+{
+ $var = "area_max_per_${interval_type}";
+ $$var = get_form_var($var, 'int');
+ $var = "area_max_per_${interval_type}_enabled";
+ $$var = get_form_var($var, 'string');
+}
+
// Get the information about the fields in the room table
$fields = sql_field_info($tbl_room);
@@ -447,6 +456,11 @@
$area_enable_periods = (!empty($area_enable_periods)) ? 1 : 0;
$area_confirmation_enabled = (!empty($area_confirmation_enabled)) ? 1 : 0;
$area_confirmed_default = (!empty($area_confirmed_default)) ? 1 : 0;
+ foreach ($interval_types as $interval_type)
+ {
+ $var = "area_max_per_${interval_type}_enabled";
+ $$var = (!empty($$var)) ? 1 : 0;
+ }
if (!$area_enable_periods)
{
@@ -510,6 +524,22 @@
$assign_array[] = "max_book_ahead_secs=" . $area_max_ba_value;
}
+ foreach($interval_types as $interval_type)
+ {
+ $var = "max_per_${interval_type}_enabled";
+ $area_var = "area_" . $var;
+ $assign_array[] = "$var=" . $$area_var;
+
+ $var = "max_per_${interval_type}";
+ $area_var = "area_" . $var;
+ if (isset($$area_var))
+ {
+ // only update these fields if they are set; they might be NULL
because
+ // they have been disabled by JavaScript
+ $assign_array[] = "$var=" . $$area_var;
+ }
+ }
+
$assign_array[] = "private_enabled=" . $area_private_enabled;
$assign_array[] = "private_default=" . $area_private_default;
$assign_array[] = "private_mandatory=" . $area_private_mandatory;
@@ -1096,10 +1126,9 @@
// Minimum book ahead
echo "<div>\n";
echo "<label>" . get_vocab("min_book_ahead") . ":</label>\n";
- echo "<input class=\"checkbox\" type=\"checkbox\"
id=\"area_min_ba_enabled\" name=\"area_min_ba_enabled\"" .
- (($min_book_ahead_enabled) ? " checked=\"checked\"" : "") .
- " onChange=\"check_book_ahead()\">\n";
- echo "<input class=\"text\" type=\"text\" name=\"area_min_ba_value\"
value=\"$min_ba_value\">";
+ echo "<input class=\"enabler checkbox\" type=\"checkbox\"
id=\"area_min_ba_enabled\" name=\"area_min_ba_enabled\"" .
+ (($min_book_ahead_enabled) ? " checked=\"checked\"" : "") . ">\n";
+ echo "<input class=\"text\" type=\"number\" min=\"0\" step=\"1\"
name=\"area_min_ba_value\" value=\"$min_ba_value\">";
echo "<select id=\"area_min_ba_units\" name=\"area_min_ba_units\">\n";
$units = array("seconds", "minutes", "hours", "days", "weeks");
foreach ($units as $unit)
@@ -1113,10 +1142,9 @@
// Maximum book ahead
echo "<div>\n";
echo "<label>" . get_vocab("max_book_ahead") . ":</label>\n";
- echo "<input class=\"checkbox\" type=\"checkbox\"
id=\"area_max_ba_enabled\" name=\"area_max_ba_enabled\"" .
- (($max_book_ahead_enabled) ? " checked=\"checked\"" : "") .
- " onChange=\"check_book_ahead()\">\n";
- echo "<input class=\"text\" type=\"text\" name=\"area_max_ba_value\"
value=\"$max_ba_value\">";
+ echo "<input class=\"enabler checkbox\" type=\"checkbox\"
id=\"area_max_ba_enabled\" name=\"area_max_ba_enabled\"" .
+ (($max_book_ahead_enabled) ? " checked=\"checked\"" : "") . ">\n";
+ echo "<input class=\"text\" type=\"number\" min=\"0\" step=\"1\"
name=\"area_max_ba_value\" value=\"$max_ba_value\">";
echo "<select id=\"area_max_ba_units\" name=\"area_max_ba_units\">\n";
$units = array("seconds", "minutes", "hours", "days", "weeks");
foreach ($units as $unit)
@@ -1127,6 +1155,42 @@
}
echo "</select>\n";
echo "</div>\n";
+
+ // The max_per booking policies
+ echo "<table>\n";
+
+ echo "<thead>\n";
+ echo "<tr>\n";
+ echo "<th></th>\n";
+ echo "<th>" . get_vocab("this_area") . "</th>\n";
+ echo "<th title=\"" . get_vocab("whole_system_note") . "\">" .
get_vocab("whole_system") . "</th>\n";
+ echo "</tr>\n";
+ echo "</thead>\n";
+
+ echo "<tbody>\n";
+ foreach ($interval_types as $interval_type)
+ {
+ echo "<tr>\n";
+ echo "<td><label>" . get_vocab("max_per_${interval_type}") .
":</label></td>\n";
+ $var = "max_per_${interval_type}_enabled";
+ echo "<td><input class=\"enabler checkbox\" type=\"checkbox\"
id=\"area_max_per_${interval_type}_enabled\"
name=\"area_max_per_${interval_type}_enabled\"" .
+ (($max_per_interval_area_enabled[$interval_type]) ? "
checked=\"checked\"" : "") .
+ ">\n";
+ $var = "max_per_${interval_type}";
+ echo "<input class=\"text\" type=\"number\" min=\"0\" step=\"1\"
name=\"area_max_per_${interval_type}\"
value=\"$max_per_interval_area[$interval_type]\"></td>\n";
+ echo "<td>\n";
+ echo "<input class=\"checkbox\" type=\"checkbox\"
disabled=\"disabled\"" .
+ (($max_per_interval_global_enabled[$interval_type]) ? "
checked=\"checked\"" : "") .
+ ">\n";
+ echo "<input class=\"text\" disabled=\"disabled\" value=\"" .
$max_per_interval_global[$interval_type] . "\">\n";
+ echo "</td>\n";
+ echo "</tr>\n";
+ }
+ echo "</tbody>\n";
+
+ echo "</table>\n";
+
+
echo "</fieldset>\n";
?>
Modified: mrbs/trunk/web/functions.inc
===================================================================
--- mrbs/trunk/web/functions.inc 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/functions.inc 2012-05-23 09:17:11 UTC (rev 2297)
@@ -799,6 +799,8 @@
global $min_book_ahead_enabled, $max_book_ahead_enabled,
$min_book_ahead_secs, $max_book_ahead_secs;
global $approval_enabled, $reminders_enabled, $enable_periods;
global $confirmation_enabled, $confirmed_default, $timezone;
+ global $max_per_interval_area_enabled, $max_per_interval_area;
+ global $interval_types;
if (empty($area))
{
@@ -812,6 +814,11 @@
private_enabled, private_default, private_mandatory,
private_override,
min_book_ahead_enabled, max_book_ahead_enabled,
min_book_ahead_secs, max_book_ahead_secs,
+ max_per_day_enabled, max_per_day,
+ max_per_week_enabled, max_per_week,
+ max_per_month_enabled, max_per_month,
+ max_per_year_enabled, max_per_year,
+ max_per_future_enabled, max_per_future,
approval_enabled, reminders_enabled, enable_periods,
confirmation_enabled, confirmed_default
FROM $tbl_area
@@ -835,6 +842,17 @@
}
// Set the timezone
mrbs_default_timezone_set($timezone);
+
+ // Set the $max_per_interval_area_enabled and $max_per_interval_area arrays,
+ // which are handled slightly differently
+ foreach ($interval_types as $interval_type)
+ {
+ $var = "max_per_${interval_type}_enabled";
+ $max_per_interval_area_enabled[$interval_type] = $$var;
+ $var = "max_per_${interval_type}";
+ $max_per_interval_area[$interval_type] = $$var;
+ }
+
}
Modified: mrbs/trunk/web/internalconfig.inc.php
===================================================================
--- mrbs/trunk/web/internalconfig.inc.php 2012-05-08 16:07:58 UTC (rev
2296)
+++ mrbs/trunk/web/internalconfig.inc.php 2012-05-23 09:17:11 UTC (rev
2297)
@@ -224,6 +224,11 @@
'private_mandatory',
'min_book_ahead_enabled',
'max_book_ahead_enabled',
+ 'max_per_day_enabled',
+ 'max_per_week_enabled',
+ 'max_per_month_enabled',
+ 'max_per_year_enabled',
+ 'max_per_future_enabled',
'max_duration_enabled', // not yet a per-area
setting, but will be sometime
'approval_enabled',
'reminders_enabled',
@@ -260,6 +265,16 @@
$area_defaults['max_book_ahead_enabled'] = $max_book_ahead_enabled;
$area_defaults['min_book_ahead_secs'] = $min_book_ahead_secs;
$area_defaults['max_book_ahead_secs'] = $max_book_ahead_secs;
+$area_defaults['max_per_day_enabled'] =
$max_per_interval_area_enabled['day'];
+$area_defaults['max_per_day'] = $max_per_interval_area['day'];
+$area_defaults['max_per_week_enabled'] =
$max_per_interval_area_enabled['week'];
+$area_defaults['max_per_week'] = $max_per_interval_area['week'];
+$area_defaults['max_per_month_enabled'] =
$max_per_interval_area_enabled['month'];
+$area_defaults['max_per_month'] = $max_per_interval_area['month'];
+$area_defaults['max_per_year_enabled'] =
$max_per_interval_area_enabled['year'];
+$area_defaults['max_per_year'] = $max_per_interval_area['year'];
+$area_defaults['max_per_future_enabled'] =
$max_per_interval_area_enabled['future'];
+$area_defaults['max_per_future'] = $max_per_interval_area['future'];
$area_defaults['approval_enabled'] = $approval_enabled;
$area_defaults['reminders_enabled'] = $reminders_enabled;
$area_defaults['enable_periods'] = $enable_periods;
@@ -271,6 +286,9 @@
// error, we split the requests into batches with a maximum number of ids
// in the array defined below.
define('DEL_ENTRY_AJAX_BATCH_SIZE', 100);
+
+// Interval types used in booking policies
+$interval_types = array('day', 'week', 'month', 'year', 'future');
/********************************************************
* PHP System Configuration - internal use, do not change
Modified: mrbs/trunk/web/lang.en
===================================================================
--- mrbs/trunk/web/lang.en 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/lang.en 2012-05-23 09:17:11 UTC (rev 2297)
@@ -184,6 +184,11 @@
$vocab["max_per_month_global"] = "The maximum number of bookings per month
per user across the whole system is";
$vocab["max_per_year_global"] = "The maximum number of bookings per year
per user across the whole system is";
$vocab["max_per_future_global"] = "The maximum number of outstanding
bookings per user across the whole system is";
+$vocab["max_per_day_area"] = "The maximum number of bookings per day
per user in this area is";
+$vocab["max_per_week_area"] = "The maximum number of bookings per week
per user in this area is";
+$vocab["max_per_month_area"] = "The maximum number of bookings per month
per user in this area is";
+$vocab["max_per_year_area"] = "The maximum number of bookings per year
per user in this area is";
+$vocab["max_per_future_area"] = "The maximum number of outstanding
bookings per user in this area is";
$vocab["skip_and_book"] = "Skip and book";
$vocab["skip_and_book_note"] = "Carry on with the booking, skipping past
the conflicting entries";
@@ -385,6 +390,14 @@
$vocab["booking_policies"] = "Booking policies";
$vocab["min_book_ahead"] = "Advance booking - minimum";
$vocab["max_book_ahead"] = "Advance booking - maximum";
+$vocab["this_area"] = "This area";
+$vocab["whole_system"] = "Whole system";
+$vocab["whole_system_note"] = "The values for the whole system are set
in the config file";
+$vocab["max_per_day"] = "Maximum number per day";
+$vocab["max_per_week"] = "Maximum number per week";
+$vocab["max_per_month"] = "Maximum number per month";
+$vocab["max_per_year"] = "Maximum number per year";
+$vocab["max_per_future"] = "Maximum number in the future";
$vocab["custom_html"] = "Custom HTML";
$vocab["custom_html_note"] = "This field can be used for displaying
your own HTML, for example an embedded Google map";
$vocab["email_list_note"] = "Enter a list of email addresses separated
by commas or newlines";
Modified: mrbs/trunk/web/mrbs.css.php
===================================================================
--- mrbs/trunk/web/mrbs.css.php 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/mrbs.css.php 2012-05-23 09:17:11 UTC (rev 2297)
@@ -514,7 +514,7 @@
$db_logon_form_min_width = number_format($db_logon_form_min_width, 1,
'.', ''); // get rid of any commas
// Specific to the "edit_area_room" form
-$edit_area_room_left_col_width = '15'; // em
+$edit_area_room_left_col_width = '17'; // em
$edit_area_room_left_col_max_width = '30'; // em
$edit_area_room_input_width = '12'; // em
$edit_area_room_form_min_width = $edit_area_room_left_col_width +
$edit_area_room_input_width + $general_gap;
@@ -584,7 +584,7 @@
.form_general input.radio {margin-top: 0.1em; margin-right: 2px}
.form_general input.checkbox {width: auto; margin-top: 0.2em}
.edit_area_room .form_general input.checkbox {margin-left: <?php echo
$general_gap ?>em}
-.edit_area_room .form_general #booking_policies input.text {width: 2.0em}
+.edit_area_room .form_general #booking_policies input.text {width: 4em}
.form_general input.submit {display: block; width: auto; float: left; clear:
left; margin-top: 1.0em}
div#import_submit {width: <?php echo $general_left_col_width ?>%;
max-width: <?php echo $import_left_col_max_width ?>em}
@@ -627,7 +627,11 @@
div.good {color: green}
div.bad {color: red}
+.form_general table {border-collapse: collapse}
+.form_general table, .form_general tr, .form_general th, .form_general td
{padding: 0; margin: 0; border: 0}
+.form_general th {font-weight: normal; font-style: italic; text-align: left;
padding: 0.2em 0 0.2em 1em}
+
/* ------------ EDIT_ENTRY_HANDLER.PHP ------------------*/
.edit_entry_handler div#submit_buttons {float: left}
.edit_entry_handler #submit_buttons form {float: left; margin: 1em 2em 1em 0}
Modified: mrbs/trunk/web/mrbs_sql.inc
===================================================================
--- mrbs/trunk/web/mrbs_sql.inc 2012-05-08 16:07:58 UTC (rev 2296)
+++ mrbs/trunk/web/mrbs_sql.inc 2012-05-23 09:17:11 UTC (rev 2297)
@@ -98,12 +98,25 @@
// Checks whether the proposed booking $booking would exceed the maximum
number of
// bookings in the interval of type $interval_type (can be 'day', 'week',
'month' or
-// 'year'). Returns NULL if OK, otherwise an error string.
-function checkInterval(&$booking, $interval_type='day')
+// 'year'). If $only_area is set then only the bookings in the same are
considered.
+// Returns NULL if OK, otherwise an error string.
+function checkInterval(&$booking, $interval_type='day', $only_area=FALSE)
{
- global $max_per_interval_global;
- global $tbl_entry;
+ global $max_per_interval_global, $max_per_interval_area;
+ global $tbl_entry, $tbl_room;
+ // Get the area id. We only need to do this once as all bookings will be
+ // in the same area.
+ static $area_id = NULL;
+ if (!isset($area_id))
+ {
+ $area_id = get_area($booking['room_id']);
+ }
+
+ // Get the location for indexing the $existing and $proposed arrays. If
it's a
+ // global check then $location = 0, otherwise use the area_id.
+ $location = ($only_area) ? $area_id : 0;
+
// Set up arrays recording the number of existing and proposed bookings for
the interval,
// indexed by the interval type and the Unix time at the start of that
interval. These
// are static variables because we test all the proposed bookings, which
could be for
@@ -155,31 +168,45 @@
$interval_end = PHP_INT_MAX;
break;
}
-
- if (!isset($existing[$interval_type][$interval_start]))
+
+ if (!isset($existing[$location][$interval_type][$interval_start]))
{
$sql = "SELECT COUNT(*)
- FROM $tbl_entry
- WHERE start_time<$interval_end
- AND end_time>$interval_start
- AND create_by='" . sql_escape($booking['create_by']) . "'";
- $existing[$interval_type][$interval_start] = sql_query1($sql);
- if ($existing[$interval_type][$interval_start] < 0)
+ FROM $tbl_entry E, $tbl_room R
+ WHERE E.start_time<$interval_end
+ AND E.end_time>$interval_start
+ AND E.create_by='" . sql_escape($booking['create_by']) . "'
+ AND E.room_id=R.id
+ AND R.disabled=0";
+ if ($only_area)
{
+ $sql .= " AND R.area_id=$area_id";
+ }
+ $existing[$location][$interval_type][$interval_start] = sql_query1($sql);
+ if ($existing[$location][$interval_type][$interval_start] < 0)
+ {
trigger_error(sql_error(), E_USER_WARNING);
fatal_error(FALSE, get_vocab("fatal_db_error"));
}
- $proposed[$interval_type][$interval_start] = 1;
+ $proposed[$location][$interval_type][$interval_start] = 1;
}
else
{
- $proposed[$interval_type][$interval_start]++;
+ $proposed[$location][$interval_type][$interval_start]++;
}
-
- if (($existing[$interval_type][$interval_start] +
$proposed[$interval_type][$interval_start]) >
- $max_per_interval_global[$interval_type])
+
+ $max_allowed = ($only_area) ? $max_per_interval_area[$interval_type] :
$max_per_interval_global[$interval_type];
+ if (($existing[$location][$interval_type][$interval_start] +
$proposed[$location][$interval_type][$interval_start]) >
+ $max_allowed)
{
- return get_vocab("max_per_${interval_type}_global") . "
$max_per_interval_global[$interval_type]";
+ if ($only_area)
+ {
+ return get_vocab("max_per_${interval_type}_area") . "
$max_per_interval_area[$interval_type]";
+ }
+ else
+ {
+ return get_vocab("max_per_${interval_type}_global") . "
$max_per_interval_global[$interval_type]";
+ }
}
$interval_start = $interval_end;
@@ -211,7 +238,8 @@
global $min_book_ahead_enabled, $min_book_ahead_secs;
global $max_book_ahead_enabled, $max_book_ahead_secs;
global $max_duration_enabled, $max_duration_secs, $max_duration_periods;
- global $max_per_interval_global_enabled;
+ global $max_per_interval_global_enabled, $max_per_interval_area_enabled;
+ global $interval_types;
$errors = array();
$secs_in_day = 60*60*24;
@@ -290,17 +318,27 @@
}
// Check max number of bookings allowed per interval for this user for each
of
- // the interval types
- foreach (array('day', 'week', 'month', 'year', 'future') as $interval_type)
+ // the interval types, both globally and for the area
+ foreach ($interval_types as $interval_type)
{
+ // globally
if (!empty($max_per_interval_global_enabled[$interval_type]) && !$delete)
{
- $tmp = checkInterval($booking, $interval_type);
+ $tmp = checkInterval($booking, $interval_type, FALSE);
if (isset($tmp))
{
$errors[] = $tmp;
}
}
+ // for the area
+ if (!empty($max_per_interval_area_enabled[$interval_type]) && !$delete)
+ {
+ $tmp = checkInterval($booking, $interval_type, TRUE);
+ if (isset($tmp))
+ {
+ $errors[] = $tmp;
+ }
+ }
}
return $errors;
@@ -1157,7 +1195,7 @@
}
-// Adds an area, returning the new id, or FALSE on failute with the
+// Adds an area, returning the new id, or FALSE on failure with the
// error in $error
function mrbsAddArea($name, &$error)
{
Added: mrbs/trunk/web/upgrade/30/mysql.sql
===================================================================
--- mrbs/trunk/web/upgrade/30/mysql.sql (rev 0)
+++ mrbs/trunk/web/upgrade/30/mysql.sql 2012-05-23 09:17:11 UTC (rev 2297)
@@ -0,0 +1,15 @@
+# $Id$
+
+# Add the max number of bookings fields
+
+ALTER TABLE %DB_TBL_PREFIX%area
+ADD COLUMN max_per_day_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_day int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_week_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_week int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_month_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_month int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_year_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_year int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_future_enabled tinyint(1) DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_future int DEFAULT 0 NOT NULL;
Property changes on: mrbs/trunk/web/upgrade/30/mysql.sql
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Added: mrbs/trunk/web/upgrade/30/pgsql.sql
===================================================================
--- mrbs/trunk/web/upgrade/30/pgsql.sql (rev 0)
+++ mrbs/trunk/web/upgrade/30/pgsql.sql 2012-05-23 09:17:11 UTC (rev 2297)
@@ -0,0 +1,15 @@
+-- $Id$
+
+-- Add the max number of bookings fields
+
+ALTER TABLE %DB_TBL_PREFIX%area
+ADD COLUMN max_per_day_enabled smallint DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_day int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_week_enabled smallint DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_week int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_month_enabled smallint DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_month int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_year_enabled smallint DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_year int DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_future_enabled smallint DEFAULT 0 NOT NULL,
+ADD COLUMN max_per_future int DEFAULT 0 NOT NULL;
Property changes on: mrbs/trunk/web/upgrade/30/pgsql.sql
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Mrbs-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mrbs-commits