function AJpopulateBlockStore() { $blockid = getContinuationVar('blockid'); $query = "SELECT repeating FROM blockRequest WHERE id = {$blockid}"; $qh = doQuery($query, 101); if (!($row = mysql_fetch_assoc($qh))) { sendJSON(array('error' => i("Error: Failed to fetch start/end times for block allocation."))); return; } if ($row['repeating'] == 'weekly' || $row['repeating'] == 'monthly') { $type = $row['repeating']; $query = "SELECT starthour, " . "startminute, " . "startmeridian, " . "endhour, " . "endminute, " . "endmeridian " . "FROM blockWebTime " . "WHERE blockRequestid = {$blockid}"; $qh = doQuery($query, 101); $starths = array(); $startms = array(); $endhs = array(); $endms = array(); while ($row = mysql_fetch_assoc($qh)) { $starth = hour12to24($row['starthour'], $row['startmeridian']); $endh = hour12to24($row['endhour'], $row['endmeridian']); $starths[] = $starth; $startms[] = $row['startminute']; $endhs[] = $endh; $endms[] = $row['endminute']; } sendJSON(array('type' => $type, 'starths' => $starths, 'startms' => $startms, 'endhs' => $endhs, 'endms' => $endms)); } elseif ($row['repeating'] == 'list') { $query = "SELECT starthour, " . "startminute, " . "startmeridian, " . "endhour, " . "endminute, " . "endmeridian, " . "`order` " . "FROM blockWebTime " . "WHERE blockRequestid = {$blockid}"; $qh = doQuery($query, 101); $data = array(); while ($row = mysql_fetch_assoc($qh)) { $data[$row['order']] = $row; } $query = "SELECT MONTH(start) AS month, " . "DAY(start) AS day, " . "YEAR(start) AS year, " . "days " . "FROM blockWebDate " . "WHERE blockRequestid = {$blockid}"; $qh = doQuery($query, 101); $months = array(); $days = array(); $years = array(); $starths = array(); $startms = array(); $endhs = array(); $endms = array(); while ($row = mysql_fetch_assoc($qh)) { $id = $row['days']; $months[] = $row['month']; $days[] = $row['day']; $years[] = $row['year']; $starth = hour12to24($data[$id]['starthour'], $data[$id]['startmeridian']); $endh = hour12to24($data[$id]['endhour'], $data[$id]['endmeridian']); $starths[] = $starth; $startms[] = $data[$id]['startminute']; $endhs[] = $endh; $endms[] = $data[$id]['endminute']; } sendJSON(array('type' => 'list', 'months' => $months, 'days' => $days, 'years' => $years, 'starths' => $starths, 'startms' => $startms, 'endhs' => $endhs, 'endms' => $endms)); } }
function submitBlockRequest() { global $submitErr, $user, $days; $data = processBlockRequestInput(); if ($submitErr) { newBlockRequest(); return; } # FIXME need to handle creation of a block time that we're currently in the # middle of if there wasn't already on we're in the middle of if ($data['state'] == 1) { # get blockTime entry for this request if we're in the middle of one $checkCurBlockTime = 0; $query = "SELECT id, " . "start, " . "end " . "FROM blockTimes " . "WHERE start <= NOW() AND " . "end > NOW() AND " . "blockRequestid = {$data['blockRequestid']}"; $qh = doQuery($query, 101); if ($row = mysql_fetch_assoc($qh)) { $checkCurBlockTime = 1; $curBlockTime = $row; } # delete entries from blockTimes that start later than now $query = "DELETE FROM blockTimes " . "WHERE blockRequestid = {$data['blockRequestid']} AND " . "start > NOW()"; doQuery($query, 101); # delete entries from blockWebDate and blockWebTime $query = "DELETE FROM blockWebDate WHERE blockRequestid = {$data['blockRequestid']}"; doQuery($query, 101); $query = "DELETE FROM blockWebTime WHERE blockRequestid = {$data['blockRequestid']}"; doQuery($query, 101); } if ($data['available'] == 'weekly') { $daymask = 0; $startarr = split('/', $data['swdate']); $startdate = "20{$startarr[2]}-{$startarr[0]}-{$startarr[1]}"; $startts = datetimeToUnix("20{$startarr[2]}-{$startarr[0]}-{$startarr[1]} 00:00:00"); $endarr = split('/', $data['ewdate']); $enddt = "20{$endarr[2]}-{$endarr[0]}-{$endarr[1]} 23:59:59"; $enddate = "20{$endarr[2]}-{$endarr[0]}-{$endarr[1]}"; $endts = datetimeToUnix($enddt); foreach ($data['wdays'] as $day) { $key = array_search($day, $days); $daymask |= 1 << $key; } } elseif ($data['available'] == 'monthly') { $startarr = split('/', $data['smdate']); $startdate = "20{$startarr[2]}-{$startarr[0]}-{$startarr[1]}"; $startts = datetimeToUnix("20{$startarr[2]}-{$startarr[0]}-{$startarr[1]} 00:00:00"); $endarr = split('/', $data['emdate']); $enddt = "20{$endarr[2]}-{$endarr[0]}-{$endarr[1]} 23:59:59"; $enddate = "20{$endarr[2]}-{$endarr[0]}-{$endarr[1]}"; $endts = datetimeToUnix($enddt); $selectedday = $data['day']; } elseif ($data['available'] == 'list') { $last = -1; $enddtArr[-1] = '1970-01-01 00:00:00'; for ($i = 0; $i < 4; $i++) { $data['slhour24'][$i] = hour12to24($data['slhour'][$i], $data['slmeridian'][$i]); $data['elhour24'][$i] = hour12to24($data['elhour'][$i], $data['elmeridian'][$i]); if (empty($data['date'][$i])) { $startdtArr[$i] = "0000-00-00 00:00:00"; $enddtArr[$i] = "0000-00-00 00:00:00"; } else { $datearr = explode('/', $data['date'][$i]); $startdtArr[$i] = "20{$datearr[2]}-{$datearr[0]}-{$datearr[1]} {$data['slhour24'][$i]}:{$data['slminute'][$i]}:00"; $enddtArr[$i] = "20{$datearr[2]}-{$datearr[0]}-{$datearr[1]} {$data['elhour24'][$i]}:{$data['elminute'][$i]}:00"; } if ($data['stime'][$i] == $data['etime'][$i]) { continue; } if ($startdtArr[$i] != $enddtArr[$i] && datetimeToUnix($enddtArr[$last]) < datetimeToUnix($enddtArr[$i])) { $last = $i; } } unset($enddtArr[-1]); $endts = datetimeToUnix($enddtArr[$last]); $enddt = $enddtArr[$last]; } if ($data['state'] == 1) { $query = "UPDATE blockRequest " . "SET name = '{$data['blockname']}', " . "imageid = {$data['imageid']}, " . "numMachines = {$data['machinecnt']}, " . "groupid = {$data['usergroupid']}, " . "admingroupid = {$data['admingroupid']}, " . "repeating = '{$data['available']}', " . "expireTime = '{$enddt}' " . "WHERE id = {$data['blockRequestid']}"; doQuery($query, 101); $blockreqid = $data['blockRequestid']; } else { $managementnodes = getManagementNodes('future'); if (empty($managementnodes)) { abort(40); } $mnid = array_rand($managementnodes); $query = "INSERT INTO blockRequest " . "(name, " . "imageid, " . "numMachines, " . "groupid, " . "repeating, " . "ownerid, " . "admingroupid, " . "managementnodeid, " . "expireTime) " . "VALUES " . "('{$data['blockname']}', " . "{$data['imageid']}, " . "{$data['machinecnt']}, " . "{$data['usergroupid']}, " . "'{$data['available']}', " . "{$user['id']}, " . "{$data['admingroupid']}, " . "{$mnid}, " . "'{$enddt}')"; doQuery($query, 101); $qh = doQuery("SELECT LAST_INSERT_ID() FROM blockRequest", 101); if (!($row = mysql_fetch_row($qh))) { abort(380); } $blockreqid = $row[0]; } if ($data['available'] == 'weekly') { $query = "INSERT INTO blockWebDate " . "(blockRequestid, " . "start, " . "end, " . "days) " . "VALUES " . "({$blockreqid}, " . "'{$startdate}', " . "'{$enddate}', " . "{$daymask})"; doQuery($query, 101); for ($i = 0; $i < 4; $i++) { $query = "INSERT INTO blockWebTime " . "(blockRequestid, " . "starthour, " . "startminute, " . "startmeridian, " . "endhour, " . "endminute, " . "endmeridian, " . "`order`) " . "VALUES " . "({$blockreqid}, " . "'{$data['swhour'][$i]}', " . "'{$data['swminute'][$i]}', " . "'{$data['swmeridian'][$i]}', " . "'{$data['ewhour'][$i]}', " . "'{$data['ewminute'][$i]}', " . "'{$data['ewmeridian'][$i]}', " . "{$i})"; doQuery($query, 101); } for ($day = $startts; $day <= $endts; $day += SECINDAY) { if (!in_array(date('l', $day), $data['wdays'])) { continue; } for ($i = 0; $i < 4; $i++) { if ($data['stime'][$i] == $data['etime'][$i]) { continue; } $data['swhour'][$i] = hour12to24($data['swhour'][$i], $data['swmeridian'][$i]); $data['ewhour'][$i] = hour12to24($data['ewhour'][$i], $data['ewmeridian'][$i]); $start = date("Y-m-d", $day) . " {$data['swhour'][$i]}:{$data['swminute'][$i]}:00"; $end = date("Y-m-d", $day) . " {$data['ewhour'][$i]}:{$data['ewminute'][$i]}:00"; $query = "INSERT INTO blockTimes " . "(blockRequestid, " . "start, " . "end) " . "VALUES " . "({$blockreqid}, " . "'{$start}', " . "'{$end}')"; doQuery($query, 101); } } } elseif ($data['available'] == 'monthly') { $query = "INSERT INTO blockWebDate " . "(blockRequestid, " . "start, " . "end, " . "days, " . "weeknum) " . "VALUES " . "({$blockreqid}, " . "'{$startdate}', " . "'{$enddate}', " . "{$selectedday}, " . "{$data['weeknum']})"; doQuery($query, 101); for ($i = 0; $i < 4; $i++) { $query = "INSERT INTO blockWebTime " . "(blockRequestid, " . "starthour, " . "startminute, " . "startmeridian, " . "endhour, " . "endminute, " . "endmeridian, " . "`order`) " . "VALUES " . "({$blockreqid}, " . "'{$data['smhour'][$i]}', " . "'{$data['smminute'][$i]}', " . "'{$data['smmeridian'][$i]}', " . "'{$data['emhour'][$i]}', " . "'{$data['emminute'][$i]}', " . "'{$data['emmeridian'][$i]}', " . "{$i})"; doQuery($query, 101); } for ($day = $startts; $day <= $endts; $day += SECINDAY) { if (date('w', $day) + 1 != $data['day']) { continue; } $dayofmon = date('j', $day); if ($data['weeknum'] == 1 && $dayofmon < 8 || $data['weeknum'] == 2 && 7 < $dayofmon && $dayofmon < 15 || $data['weeknum'] == 3 && 14 < $dayofmon && $dayofmon < 22 || $data['weeknum'] == 4 && 21 < $dayofmon && $dayofmon < 29 || $data['weeknum'] == 5 && 28 < $dayofmon && $dayofmon < 32) { $thedate = date("Y-m-d", $day); for ($i = 0; $i < 4; $i++) { if ($data['stime'][$i] == $data['etime'][$i]) { continue; } $data['smhour'][$i] = hour12to24($data['smhour'][$i], $data['smmeridian'][$i]); $data['emhour'][$i] = hour12to24($data['emhour'][$i], $data['emmeridian'][$i]); $start = "{$thedate} {$data['smhour'][$i]}:{$data['smminute'][$i]}:00"; $end = "{$thedate} {$data['emhour'][$i]}:{$data['emminute'][$i]}:00"; $query = "INSERT INTO blockTimes " . "(blockRequestid, " . "start, " . "end) " . "VALUES " . "({$blockreqid}, " . "'{$start}', " . "'{$end}')"; doQuery($query, 101); } } } } elseif ($data['available'] == 'list') { for ($i = 0; $i < 4; $i++) { $query = "INSERT INTO blockWebDate " . "(blockRequestid, " . "start, " . "end, " . "days) " . "VALUES " . "({$blockreqid}, " . "'{$startdtArr[$i]}', " . "'{$enddtArr[$i]}', " . "{$i})"; doQuery($query, 101); $query = "INSERT INTO blockWebTime " . "(blockRequestid, " . "starthour, " . "startminute, " . "startmeridian, " . "endhour, " . "endminute, " . "endmeridian, " . "`order`) " . "VALUES " . "({$blockreqid}, " . "'{$data['slhour'][$i]}', " . "'{$data['slminute'][$i]}', " . "'{$data['slmeridian'][$i]}', " . "'{$data['elhour'][$i]}', " . "'{$data['elminute'][$i]}', " . "'{$data['elmeridian'][$i]}', " . "{$i})"; doQuery($query, 101); if ($data['stime'][$i] == $data['etime'][$i]) { continue; } $query = "INSERT INTO blockTimes " . "(blockRequestid, " . "start, " . "end) " . "VALUES " . "({$blockreqid}, " . "'{$startdtArr[$i]}', " . "'{$enddtArr[$i]}')"; doQuery($query, 101); } } if ($data['state'] == 1) { if ($checkCurBlockTime) { $query = "SELECT id, " . "start, " . "end " . "FROM blockTimes " . "WHERE start <= NOW() AND " . "end > NOW() AND " . "blockRequestid = {$data['blockRequestid']} AND " . "id != {$curBlockTime['id']}"; $qh = doQuery($query, 101); if ($row = mysql_fetch_assoc($qh)) { if ($curBlockTime['end'] != $row['end']) { # update old end time $query = "UPDATE blockTimes " . "SET end = '{$row['end']}' " . "WHERE id = {$curBlockTime['id']}"; doQuery($query, 101); } # delete $row entry doQuery("DELETE FROM blockTimes WHERE id = {$row['id']}", 101); } else { # the blockTime we were in the middle of was not recreated, so # delete the old one doQuery("DELETE FROM blockTimes WHERE id = {$curBlockTime['id']}", 101); } } print "<H2>Edit Block Reservation</H2>\n"; print "Block request has been updated<br>\n"; } else { print "<H2>New Block Reservation</H2>\n"; print "Block request added to database<br>\n"; } }