You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2010/09/07 20:27:59 UTC

svn commit: r993455 - in /incubator/vcl/trunk/web: .ht-inc/blockallocations.php js/blockallocations.js

Author: jfthomps
Date: Tue Sep  7 18:27:59 2010
New Revision: 993455

URL: http://svn.apache.org/viewvc?rev=993455&view=rev
Log:
VCL-254
block request improvements

added ability to set/modify the owner of a block allocation

Modified:
    incubator/vcl/trunk/web/.ht-inc/blockallocations.php
    incubator/vcl/trunk/web/js/blockallocations.js

Modified: incubator/vcl/trunk/web/.ht-inc/blockallocations.php
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/blockallocations.php?rev=993455&r1=993454&r2=993455&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/blockallocations.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/blockallocations.php Tue Sep  7 18:27:59 2010
@@ -121,6 +121,14 @@ function blockAllocationForm() {
 		print "postCreate=\"dijit.byId('brname').focus();\">\n";
 		print "    </td>\n";
 		print "  </tr>\n";
+		print "  <tr>\n";
+		print "    <th align=right>Owner:</th>\n";
+		print "    <td>\n";
+		print "      <input type=\"text\" value=\"{$data['owner']}\" dojoType=\"dijit.form.ValidationTextBox\" ";
+		print "id=\"browner\" required=\"true\" invalidMessage=\"Unknown user\" style=\"width: 300px\" ";
+		print "validator=\"checkOwner\" onFocus=\"ownerFocus\">\n";
+		print "    </td>\n";
+		print "  </tr>\n";
 	}
 	print "  <tr>\n";
 	print "    <th align=right>Environment:</th>\n";
@@ -258,10 +266,10 @@ function blockAllocationForm() {
 	print "<td>\n";
 
 	print "Start:<div type=\"text\" id=\"weeklyaddstart\" dojoType=\"dijit.form.TimeTextBox\" ";
-	print "required=\"true\" onChange=\"blockFormWeeklyAddBtnCheck(1);\" style=\"width: 70px\"></div>\n";
+	print "required=\"true\" onChange=\"blockFormWeeklyAddBtnCheck(1);\" style=\"width: 78px\"></div>\n";
 	print "End:<div type=\"text\" id=\"weeklyaddend\" dojoType=\"vcldojo.TimeTextBoxEnd\" ";
 	print "required=\"true\" onChange=\"blockFormWeeklyAddBtnCheck(0);\" startid=\"weeklyaddstart\" ";
-	print "style=\"width: 70px\"></div>\n";
+	print "style=\"width: 78px\"></div>\n";
 	print "<button dojoType=\"dijit.form.Button\" type=\"button\" disabled=\"true\" ";
 	print "id=\"requestBlockWeeklyAddBtn\">\n";
 	print "  Add\n";
@@ -272,11 +280,11 @@ function blockAllocationForm() {
 	print "<div dojoType=\"dojo.data.ItemFileWriteStore\" jsId=\"requestBlockAddWeeklyStore\" ";
 	print "data=\"blockFormAddWeeklyData\"></div>\n";
 	print "<table dojoType=\"dojox.grid.DataGrid\" jsId=\"requestBlockAddWeeklyGrid\" sortInfo=1 ";
-	print "store=\"requestBlockAddWeeklyStore\" style=\"width: 314px; height: 120px;\">\n";
+	print "store=\"requestBlockAddWeeklyStore\" style=\"width: 330px; height: 120px;\">\n";
 	print "<thead>\n";
 	print "<tr>\n";
-	print "<th field=\"start\" width=\"94px\" formatter=\"gridTimePrimary\">Start</th>\n";
-	print "<th field=\"end\" width=\"94px\" formatter=\"timeFromTextBox\">End</th>\n";
+	print "<th field=\"start\" width=\"102px\" formatter=\"gridTimePrimary\">Start</th>\n";
+	print "<th field=\"end\" width=\"102px\" formatter=\"timeFromTextBox\">End</th>\n";
 	print "<th field=\"remove\" width=\"80px\">Remove</th>\n";
 	print "</tr>\n";
 	print "</thead>\n";
@@ -324,10 +332,10 @@ function blockAllocationForm() {
 	printSelectInput('day', $dayArr, $data['mndayid'], 0, 0, 'mnday');
 	print " of every month<br><br>\n";
 	print "Start:<div type=\"text\" id=\"monthlyaddstart\" dojoType=\"dijit.form.TimeTextBox\" ";
-	print "required=\"true\" onChange=\"blockFormMonthlyAddBtnCheck(1)\" style=\"width: 70px\"></div>\n";
+	print "required=\"true\" onChange=\"blockFormMonthlyAddBtnCheck(1)\" style=\"width: 78px\"></div>\n";
 	print "End:<div type=\"text\" id=\"monthlyaddend\" dojoType=\"vcldojo.TimeTextBoxEnd\" ";
 	print "required=\"true\" onChange=\"blockFormMonthlyAddBtnCheck(0)\" startid=\"monthlyaddstart\" ";
-	print "style=\"width: 70px\"></div>\n";
+	print "style=\"width: 78px\"></div>\n";
 	print "<button dojoType=\"dijit.form.Button\" type=\"button\" disabled=\"true\" ";
 	print "id=\"requestBlockMonthlyAddBtn\">\n";
 	print "  Add\n";
@@ -339,11 +347,11 @@ function blockAllocationForm() {
 	print "<div dojoType=\"dojo.data.ItemFileWriteStore\" jsId=\"requestBlockAddMonthlyStore\" ";
 	print "data=\"blockFormAddMonthlyData\"></div>\n";
 	print "<table dojoType=\"dojox.grid.DataGrid\" jsId=\"requestBlockAddMonthlyGrid\" sortInfo=1 ";
-	print "store=\"requestBlockAddMonthlyStore\" style=\"width: 314px; height: 120px;\">\n";
+	print "store=\"requestBlockAddMonthlyStore\" style=\"width: 330px; height: 120px;\">\n";
 	print "<thead>\n";
 	print "<tr>\n";
-	print "<th field=\"start\" width=\"94px\" formatter=\"gridTimePrimary\">Start</th>\n";
-	print "<th field=\"end\" width=\"94px\" formatter=\"timeFromTextBox\">End</th>\n";
+	print "<th field=\"start\" width=\"102px\" formatter=\"gridTimePrimary\">Start</th>\n";
+	print "<th field=\"end\" width=\"102px\" formatter=\"timeFromTextBox\">End</th>\n";
 	print "<th field=\"remove\" width=\"80px\">Remove</th>\n";
 	print "</tr>\n";
 	print "</thead>\n";
@@ -353,7 +361,7 @@ function blockAllocationForm() {
 	# list of times
 	print "<div id=\"listtab\" dojoType=\"dijit.layout.ContentPane\" title=\"List of Times\" {$data['type2']['list']}>\n";
 	print "Date:<div type=\"text\" id=\"listadddate\" dojoType=\"dijit.form.DateTextBox\" ";
-	print "required=\"true\" onChange=\"blockFormListAddBtnCheck\" style=\"width: 80px\"></div>\n";
+	print "required=\"true\" onChange=\"blockFormListAddBtnCheck\" style=\"width: 95px\"></div>\n";
 	print "Start:<input type=\"text\" id=\"listaddstart\" dojoType=\"dijit.form.TimeTextBox\" ";
 	print "required=\"true\" onChange=\"blockFormListAddBtnCheck\" />\n";
 	print "End:<input type=\"text\" id=\"listaddend\" dojoType=\"vcldojo.TimeTextBoxEnd\" ";
@@ -370,10 +378,10 @@ function blockAllocationForm() {
 	print "data=\"blockFormAddListData\"></div>\n";
 	print "<div>\n"; # grid wrapper
 	print "<table dojoType=\"dojox.grid.DataGrid\" jsId=\"requestBlockAddListGrid\" sortInfo=1 ";
-	print "store=\"requestBlockAddListStore\" style=\"width: 450px; height: 200px;\">\n";
+	print "store=\"requestBlockAddListStore\" style=\"width: 465px; height: 200px;\">\n";
 	print "<thead>\n";
 	print "<tr>\n";
-	print "<th field=\"date1\" width=\"100px\" formatter=\"gridDateTimePrimary\">Date</th>\n";
+	print "<th field=\"date1\" width=\"115px\" formatter=\"gridDateTimePrimary\">Date</th>\n";
 	print "<th field=\"start\" width=\"115px\" formatter=\"timeFromTextBox\">Start</th>\n";
 	print "<th field=\"end\" width=\"108px\" formatter=\"timeFromTextBox\">End</th>\n";
 	print "<th field=\"remove\" width=\"80px\">Remove</th>\n";
@@ -412,6 +420,8 @@ function blockAllocationForm() {
 	print "    blockFormConfirm('$arg');\n";
 	print "  </script>\n";
 	print "</button>\n";
+	$cont = addContinuationsEntry('AJvalidateUserid');
+	print "<input type=\"hidden\" id=\"valuseridcont\" value=\"$cont\">\n";
 
 	print "<div id=\"confirmDialog\" dojoType=\"dijit.Dialog\" title=\"Confirm Block Allocation\">\n";
 	print "<h2>Confirm Block Allocation</h2>\n";
@@ -422,6 +432,10 @@ function blockAllocationForm() {
 	print "    <td><span id=\"confname\"></span></td>\n";
 	print "  </tr>\n";
 	print "  <tr>\n";
+	print "    <th align=\"right\"><span id=\"confownertitle\"></span></th>\n";
+	print "    <td><span id=\"confowner\"></span></td>\n";
+	print "  </tr>\n";
+	print "  <tr>\n";
 	print "    <th align=\"right\">Environment:</th>\n";
 	print "    <td><span id=\"confimage\"></span></td>\n";
 	print "  </tr>\n";
@@ -609,7 +623,7 @@ function AJblockAllocationSubmit() {
 		       .        "{$data['seats']}, "
 		       .        "{$data['groupid']}, "
 		       .        "'{$data['type']}', "
-		       .        "{$user['id']}, "
+		       .        "{$data['ownerid']}, "
 		       .        "{$data['admingroupid']}, "
 		       .        "$mnid, "
 		       .        "'{$data['expiretime']}', "
@@ -653,7 +667,7 @@ function AJblockAllocationSubmit() {
 		       .     "imageid = {$data['imageid']}, "
 		       .     "numMachines = {$data['seats']}, "
 		       .     "groupid = {$data['groupid']}, "
-		       .     "ownerid = {$user['id']}, "
+		       .     "ownerid = {$data['ownerid']}, "
 		       .     "admingroupid = {$data['admingroupid']}, "
 		       .     "repeating = '{$data['type']}', "
 		       .     "expireTime = '{$data['expiretime']}' "
@@ -1069,6 +1083,8 @@ function getCurrentBlockHTML($listonly=0
 	$groupids = implode(',', array_keys($groups));
 	$query = "SELECT b.id, "
 	       .        "b.name AS blockname, "
+	       .        "b.ownerid, "
+	       .        "CONCAT(u.unityid, '@', ua.name) AS owner, "
 	       .        "b.imageid, "
 	       .        "i.prettyname AS image, "
 	       .        "b.numMachines AS machinecnt, "
@@ -1083,6 +1099,8 @@ function getCurrentBlockHTML($listonly=0
 	       . "LEFT JOIN affiliation a ON (g.affiliationid = a.id) "
 	       . "LEFT JOIN usergroup ga ON (b.admingroupid = ga.id) "
 	       . "LEFT JOIN affiliation aa ON (ga.affiliationid = aa.id) "
+	       . "LEFT JOIN user u ON (b.ownerid = u.id) "
+	       . "LEFT JOIN affiliation ua ON (u.affiliationid = ua.id) "
 	       . "WHERE (b.ownerid = {$user['id']} ";
 	if(! empty($groupids))
 		$query .=   "OR b.admingroupid IN ($groupids) ";
@@ -1297,6 +1315,10 @@ function getCurrentBlockHTML($listonly=0
 	$rt .= "    <td><span id=\"confname\"></span></td>\n";
 	$rt .= "  </tr>\n";
 	$rt .= "  <tr>\n";
+	$rt .= "    <th align=\"right\">Owner:</th>\n";
+	$rt .= "    <td><span id=\"confowner\"></span></td>\n";
+	$rt .= "  </tr>\n";
+	$rt .= "  <tr>\n";
 	$rt .= "    <th align=\"right\">Environment:</th>\n";
 	$rt .= "    <td><span id=\"confimage\"></span></td>\n";
 	$rt .= "  </tr>\n";
@@ -1394,6 +1416,8 @@ function getUserCurrentBlockHTML($liston
 	global $user, $days;
 	$query = "SELECT b.id, "
 	       .        "b.name AS blockname, "
+	       .        "b.ownerid, "
+	       .        "CONCAT(u.unityid, '@', ua.name) AS owner, "
 	       .        "i.prettyname AS image, "
 	       .        "b.numMachines AS machinecnt, "
 	       .        "CONCAT(g.name, '@', a.name) AS `group`, "
@@ -1403,6 +1427,8 @@ function getUserCurrentBlockHTML($liston
 	       .      "usergroup g, "
 	       .      "affiliation a, "
 	       .      "blockRequest b "
+	       . "LEFT JOIN user u ON (b.ownerid = u.id) "
+	       . "LEFT JOIN affiliation ua ON (u.affiliationid = ua.id) "
 	       . "WHERE b.ownerid = {$user['id']} AND "
 	       .       "b.imageid = i.id AND "
 	       .       "b.status IN ('accepted', 'requested') AND "
@@ -1568,6 +1594,10 @@ function getUserCurrentBlockHTML($liston
 	$rt .= "    <td><span id=\"confname\"></span></td>\n";
 	$rt .= "  </tr>\n";
 	$rt .= "  <tr>\n";
+	$rt .= "    <th align=\"right\">Owner:</th>\n";
+	$rt .= "    <td><span id=\"confowner\"></span></td>\n";
+	$rt .= "  </tr>\n";
+	$rt .= "  <tr>\n";
 	$rt .= "    <th align=\"right\">Environment:</th>\n";
 	$rt .= "    <td><span id=\"confimage\"></span></td>\n";
 	$rt .= "  </tr>\n";
@@ -2047,6 +2077,8 @@ function AJdeleteBlockAllocationConfirm(
 	$data = getContinuationVar();
 	if($data['available'] == 'weekly') {
 		$rt = array('name' => $data['blockname'],
+		            'ownerid' => $data['ownerid'],
+		            'owner' => $data['owner'],
 		            'image' => $data['image'],
 		            'seats' => $data['machinecnt'],
 		            'usergroup' => $data['group'],
@@ -2065,6 +2097,8 @@ function AJdeleteBlockAllocationConfirm(
 	}
 	elseif($data['available'] == 'monthly') {
 		$rt = array('name' => $data['blockname'],
+		            'ownerid' => $data['ownerid'],
+		            'owner' => $data['owner'],
 		            'image' => $data['image'],
 		            'seats' => $data['machinecnt'],
 		            'usergroup' => $data['group'],
@@ -2088,6 +2122,8 @@ function AJdeleteBlockAllocationConfirm(
 	}
 	elseif($data['available'] == 'list') {
 		$rt = array('name' => $data['blockname'],
+		            'ownerid' => $data['ownerid'],
+		            'owner' => $data['owner'],
 		            'image' => $data['image'],
 		            'seats' => $data['machinecnt'],
 		            'usergroup' => $data['group'],
@@ -2145,6 +2181,8 @@ function AJviewBlockAllocation() {
 	$data = getContinuationVar();
 	if($data['available'] == 'weekly') {
 		$rt = array('name' => $data['blockname'],
+		            'ownerid' => $data['ownerid'],
+		            'owner' => $data['owner'],
 		            'image' => $data['image'],
 		            'seats' => $data['machinecnt'],
 		            'usergroup' => $data['group'],
@@ -2162,6 +2200,8 @@ function AJviewBlockAllocation() {
 	}
 	elseif($data['available'] == 'monthly') {
 		$rt = array('name' => $data['blockname'],
+		            'ownerid' => $data['ownerid'],
+		            'owner' => $data['owner'],
 		            'image' => $data['image'],
 		            'seats' => $data['machinecnt'],
 		            'usergroup' => $data['group'],
@@ -2184,6 +2224,8 @@ function AJviewBlockAllocation() {
 	}
 	elseif($data['available'] == 'list') {
 		$rt = array('name' => $data['blockname'],
+		            'ownerid' => $data['ownerid'],
+		            'owner' => $data['owner'],
 		            'image' => $data['image'],
 		            'seats' => $data['machinecnt'],
 		            'usergroup' => $data['group'],
@@ -2898,6 +2940,7 @@ function processBlockAllocationInput() {
 	$return = array();
 	$method = getContinuationVar('method');
 	$return['name'] = processInputVar('name', ARG_STRING);
+	$return['owner'] = processInputVar('owner', ARG_STRING);
 	$return['imageid'] = processInputVar('imageid', ARG_NUMERIC);
 	$return['seats'] = processInputVar('seats', ARG_NUMERIC);
 	$return['groupid'] = processInputVar('groupid', ARG_NUMERIC);
@@ -2914,6 +2957,12 @@ function processBlockAllocationInput() {
 		$errmsg = 'The submitted image is invalid.';
 		$err = 1;
 	}
+	if(! $err && $method != 'request' && ! validateUserid($return['owner'])) {
+		$errmsg = 'The submitted owner is invalid.';
+		$err = 1;
+	}
+	else
+		$return['ownerid'] = getUserlistID($return['owner']);
 	$groups = getUserGroups(0, $user['affiliationid']);
 	$extragroups = getContinuationVar('extragroups');
 	if(! $err && ! array_key_exists($return['groupid'], $groups) &&
@@ -3168,6 +3217,8 @@ function getBlockAllocationStatus($id) {
 /// \b name - name of block allocation\n
 /// \b imageid - id of image\n
 /// \b seats - number of machines allocated for block allocation\n
+/// \b ownerid - id from user table of block allocation owner\n
+/// \b owner - block allocation owner\n
 /// \b usergroupid - id of group associated with block allocation\n
 /// \b admingroupid - id of admin group associated with block allocation\n
 /// \b repeating - weekly, monthly, or list\n
@@ -3192,6 +3243,8 @@ function getBlockAllocationData($blockid
 	$rt = array('name' => '',
 	            'imageid' => '',
 	            'seats' => MIN_BLOCK_MACHINES,
+	            'ownerid' => '',
+	            'owner' => '',
 	            'usergroupid' => '',
 	            'admingroupid' => '',
 	            'repeating' => '',
@@ -3215,6 +3268,8 @@ function getBlockAllocationData($blockid
 	$query = "SELECT b.name, "
 	       .        "b.imageid, "
 	       .        "b.numMachines AS seats, "
+	       .        "b.ownerid, "
+	       .        "CONCAT(u.unityid, '@', a.name) AS owner, "
 	       .        "b.groupid AS usergroupid, "
 	       .        "b.admingroupid, "
 	       .        "b.repeating, "
@@ -3226,6 +3281,8 @@ function getBlockAllocationData($blockid
 	       .        "d.weeknum AS mnweeknumid "
 	       . "FROM blockWebDate d, "
 	       .      "blockRequest b "
+	       . "LEFT JOIN user u ON (b.ownerid = u.id) "
+	       . "LEFT JOIN affiliation a ON (u.affiliationid = a.id) "
 	       . "WHERE b.id = d.blockRequestid AND "
 	       .       "b.id = $blockid";
 	$qh = doQuery($query, 101);

Modified: incubator/vcl/trunk/web/js/blockallocations.js
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/js/blockallocations.js?rev=993455&r1=993454&r2=993455&view=diff
==============================================================================
--- incubator/vcl/trunk/web/js/blockallocations.js (original)
+++ incubator/vcl/trunk/web/js/blockallocations.js Tue Sep  7 18:27:59 2010
@@ -1,3 +1,6 @@
+var timeout = null;
+var ownervalid = true;
+
 var blockFormAddWeeklyData = {
 	identifier: 'id',
 	items: []
@@ -358,7 +361,8 @@ function blockFormConfirm(mode) {
 	if(! dijit.byId('machinecnt').isValid() ||
 	   (dijit.byId('imagesel') && ! dijit.byId('imagesel').isValid()) ||
 	   (dijit.byId('groupsel') && ! dijit.byId('groupsel').isValid()) ||
-		(dijit.byId('brname') && ! dijit.byId('brname').isValid())) {
+		(dijit.byId('brname') && ! dijit.byId('brname').isValid()) ||
+		(dijit.byId('browner') && ! dijit.byId('browner').isValid())) {
 		alert('Please fix invalid values before submitting.');
 		return;
 	}
@@ -447,6 +451,8 @@ function blockFormVerifyWeekly(mode) {
 	if(mode != 'request') {
 		dojo.byId('confnametitle').innerHTML = 'Name:';
 		dojo.byId('confname').innerHTML = dijit.byId('brname').textbox.value;
+		dojo.byId('confownertitle').innerHTML = 'Owner:';
+		dojo.byId('confowner').innerHTML = dijit.byId('browner').textbox.value;
 	}
 	dojo.byId('confimage').innerHTML = getSelectText('imagesel');
 	dojo.byId('confseats').innerHTML = dijit.byId('machinecnt').value;
@@ -538,6 +544,7 @@ function blockFormSubmitWeekly(mode) {
 	            days: days2};
 	if(mode != 'request') {
 		data.name = dijit.byId('brname').value;
+		data.owner = dijit.byId('browner').value;
 		data.admingroupid = getSelectValue('admingroupsel');
 	}
 	else
@@ -589,6 +596,8 @@ function blockFormVerifyMonthly(mode) {
 	if(mode != 'request') {
 		dojo.byId('confnametitle').innerHTML = 'Name:';
 		dojo.byId('confname').innerHTML = dijit.byId('brname').textbox.value;
+		dojo.byId('confownertitle').innerHTML = 'Owner:';
+		dojo.byId('confowner').innerHTML = dijit.byId('browner').textbox.value;
 	}
 	dojo.byId('confimage').innerHTML = getSelectText('imagesel');
 	dojo.byId('confseats').innerHTML = dijit.byId('machinecnt').value;
@@ -671,6 +680,7 @@ function blockFormSubmitMonthly(mode) {
 	            times: alltimes};
 	if(mode != 'request') {
 		data.name = dijit.byId('brname').value;
+		data.owner = dijit.byId('browner').value;
 		data.admingroupid = getSelectValue('admingroupsel');
 	}
 	else
@@ -696,6 +706,8 @@ function blockFormVerifyList(mode) {
 	if(mode != 'request') {
 		dojo.byId('confnametitle').innerHTML = 'Name:';
 		dojo.byId('confname').innerHTML = dijit.byId('brname').textbox.value;
+		dojo.byId('confownertitle').innerHTML = 'Owner:';
+		dojo.byId('confowner').innerHTML = dijit.byId('browner').textbox.value;
 	}
 	dojo.byId('confimage').innerHTML = getSelectText('imagesel');
 	dojo.byId('confseats').innerHTML = dijit.byId('machinecnt').value;
@@ -758,6 +770,7 @@ function blockFormSubmitList(mode) {
 	            slots: allslots};
 	if(mode != 'request') {
 		data.name = dijit.byId('brname').value;
+		data.owner = dijit.byId('browner').value;
 		data.admingroupid = getSelectValue('admingroupsel');
 	}
 	else
@@ -770,6 +783,7 @@ function clearHideConfirmForm() {
 	dijit.byId('confirmDialog').hide();
 	dojo.byId('confnametitle').innerHTML = '';
 	dojo.byId('confname').innerHTML = '';
+	dojo.byId('confowner').innerHTML = '';
 	dojo.byId('confimage').innerHTML = '';
 	dojo.byId('confseats').innerHTML = '';
 	dojo.byId('confgroup').innerHTML = '';
@@ -790,6 +804,7 @@ function clearHideConfirmForm() {
 function clearHideConfirmDelete() {
 	dijit.byId('confirmDialog').hide();
 	dojo.byId('confname').innerHTML = '';
+	dojo.byId('confowner').innerHTML = '';
 	dojo.byId('confimage').innerHTML = '';
 	dojo.byId('confseats').innerHTML = '';
 	dojo.byId('confgroup').innerHTML = '';
@@ -808,6 +823,7 @@ function clearHideConfirmDelete() {
 function clearHideView() {
 	dijit.byId('viewDialog').hide();
 	dojo.byId('confname').innerHTML = '';
+	dojo.byId('confowner').innerHTML = '';
 	dojo.byId('confimage').innerHTML = '';
 	dojo.byId('confseats').innerHTML = '';
 	dojo.byId('confgroup').innerHTML = '';
@@ -880,6 +896,7 @@ function deleteBlockConfirm(cont) {
 function deleteBlockConfirmCB(data, ioArgs) {
 	if(data.items.repeating == 'weekly') {
 		dojo.byId('confname').innerHTML = data.items.name;
+		dojo.byId('confowner').innerHTML = data.items.owner;
 		dojo.byId('confimage').innerHTML = data.items.image;
 		dojo.byId('confseats').innerHTML = data.items.seats;
 		dojo.byId('confgroup').innerHTML = data.items.usergroup;
@@ -896,6 +913,7 @@ function deleteBlockConfirmCB(data, ioAr
 	}
 	else if(data.items.repeating == 'monthly') {
 		dojo.byId('confname').innerHTML = data.items.name;
+		dojo.byId('confowner').innerHTML = data.items.owner;
 		dojo.byId('confimage').innerHTML = data.items.image;
 		dojo.byId('confseats').innerHTML = data.items.seats;
 		dojo.byId('confgroup').innerHTML = data.items.usergroup;
@@ -912,6 +930,7 @@ function deleteBlockConfirmCB(data, ioAr
 	}
 	else if(data.items.repeating == 'list') {
 		dojo.byId('confname').innerHTML = data.items.name;
+		dojo.byId('confowner').innerHTML = data.items.owner;
 		dojo.byId('confimage').innerHTML = data.items.image;
 		dojo.byId('confseats').innerHTML = data.items.seats;
 		dojo.byId('confgroup').innerHTML = data.items.usergroup;
@@ -941,6 +960,7 @@ function viewBlockAllocation(cont) {
 function viewBlockAllocationCB(data, ioArgs) {
 	if(data.items.repeating == 'weekly') {
 		dojo.byId('confname').innerHTML = data.items.name;
+		dojo.byId('confowner').innerHTML = data.items.owner;
 		dojo.byId('confimage').innerHTML = data.items.image;
 		dojo.byId('confseats').innerHTML = data.items.seats;
 		dojo.byId('confgroup').innerHTML = data.items.usergroup;
@@ -956,6 +976,7 @@ function viewBlockAllocationCB(data, ioA
 	}
 	else if(data.items.repeating == 'monthly') {
 		dojo.byId('confname').innerHTML = data.items.name;
+		dojo.byId('confowner').innerHTML = data.items.owner;
 		dojo.byId('confimage').innerHTML = data.items.image;
 		dojo.byId('confseats').innerHTML = data.items.seats;
 		dojo.byId('confgroup').innerHTML = data.items.usergroup;
@@ -971,6 +992,7 @@ function viewBlockAllocationCB(data, ioA
 	}
 	else if(data.items.repeating == 'list') {
 		dojo.byId('confname').innerHTML = data.items.name;
+		dojo.byId('confowner').innerHTML = data.items.owner;
 		dojo.byId('confimage').innerHTML = data.items.image;
 		dojo.byId('confseats').innerHTML = data.items.seats;
 		dojo.byId('confgroup').innerHTML = data.items.usergroup;
@@ -1256,3 +1278,38 @@ function blockTimesGridEnd(val) {
 	var min = parseInt(val.substr(14, 2), 10);
 	return formatHourMin(hour, min);
 }
+
+function ownerFocus() {
+	if(! dijit.byId('browner')._hasBeenBlurred)
+		dijit.byId('browner')._hasBeenBlurred = true;
+}
+
+function checkOwner(val, constraints) {
+	if(! dijit.byId('browner')._hasBeenBlurred)
+		return true;
+	if(timeout != null)
+		clearTimeout(timeout);
+	timeout = setTimeout(checkOwner2, 700);
+	return ownervalid;
+}
+
+function checkOwner2() {
+	var data = {user: dijit.byId('browner').textbox.value,
+	            continuation: dojo.byId('valuseridcont').value};
+	RPCwrapper(data, checkOwnerCB, 1);
+}
+
+function checkOwnerCB(data, ioArgs) {
+	var obj = dijit.byId('browner');
+	if(data.items.status && data.items.status == 'invalid') {
+		obj.attr('state', 'Error');
+		obj._setStateClass();
+		obj.displayMessage(obj.getErrorMessage('Unknown user'));
+		ownervalid = false;
+	}
+	else {
+		dijit.byId('browner').attr('valid', true);
+		obj._setStateClass();
+		ownervalid = true;
+	}
+}