Example #1
0
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));
    }
}
Example #2
0
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";
    }
}