if (isset($changes['Width']) || isset($changes['Height'])) { $newW = $_REQUEST['newMonitor']['Width']; $newH = $_REQUEST['newMonitor']['Height']; $newA = $newW * $newH; $oldW = $monitor['Width']; $oldH = $monitor['Height']; $oldA = $oldW * $oldH; $zones = dbFetchAll("select * from Zones where MonitorId=?", NULL, array($mid)); foreach ($zones as $zone) { $newZone = $zone; $points = coordsToPoints($zone['Coords']); for ($i = 0; $i < count($points); $i++) { $points[$i]['x'] = intval($points[$i]['x'] * ($newW - 1) / ($oldW - 1)); $points[$i]['y'] = intval($points[$i]['y'] * ($newH - 1) / ($oldH - 1)); } $newZone['Coords'] = pointsToCoords($points); $newZone['Area'] = intval(round($zone['Area'] * $newA / $oldA)); $newZone['MinAlarmPixels'] = intval(round($newZone['MinAlarmPixels'] * $newA / $oldA)); $newZone['MaxAlarmPixels'] = intval(round($newZone['MaxAlarmPixels'] * $newA / $oldA)); $newZone['MinFilterPixels'] = intval(round($newZone['MinFilterPixels'] * $newA / $oldA)); $newZone['MaxFilterPixels'] = intval(round($newZone['MaxFilterPixels'] * $newA / $oldA)); $newZone['MinBlobPixels'] = intval(round($newZone['MinBlobPixels'] * $newA / $oldA)); $newZone['MaxBlobPixels'] = intval(round($newZone['MaxBlobPixels'] * $newA / $oldA)); $changes = getFormChanges($zone, $newZone, $types); if (count($changes)) { dbQuery("update Zones set " . implode(", ", $changes) . " WHERE MonitorId=? AND Id=?", array($mid, $zone['Id'])); } } } } elseif (!$user['MonitorIds']) { # FIXME This is actually a race condition. Should lock the table.
$maxY = $monitor['Height'] - 1; if (!isset($newZone)) { if ($zid > 0) { $zone = dbFetchOne('SELECT * FROM Zones WHERE MonitorId = ? AND Id=?', NULL, array($monitor['Id'], $zid)); } else { $zone = array('Name' => translate('New'), 'Id' => 0, 'MonitorId' => $monitor['Id'], 'NumCoords' => 4, 'Coords' => sprintf("%d,%d %d,%d, %d,%d %d,%d", $minX, $minY, $maxX, $minY, $maxX, $maxY, $minX, $maxY), 'Area' => $monitor['Width'] * $monitor['Height'], 'AlarmRGB' => 0xff0000, 'CheckMethod' => 'Blobs', 'MinPixelThreshold' => '', 'MaxPixelThreshold' => '', 'MinAlarmPixels' => '', 'MaxAlarmPixels' => '', 'FilterX' => '', 'FilterY' => '', 'MinFilterPixels' => '', 'MaxFilterPixels' => '', 'MinBlobPixels' => '', 'MaxBlobPixels' => '', 'MinBlobs' => '', 'MaxBlobs' => '', 'OverloadFrames' => '', 'ExtendAlarmFrames' => ''); } $zone['Points'] = coordsToPoints($zone['Coords']); $newZone = $zone; } //if ( !$points ) //{ //$points = $zone['Points']; //} ksort($newZone['Points'], SORT_NUMERIC); $newZone['Coords'] = pointsToCoords($newZone['Points']); $newZone['Area'] = getPolyArea($newZone['Points']); $selfIntersecting = isSelfIntersecting($newZone['Points']); $wd = getcwd(); chdir(ZM_DIR_IMAGES); $command = getZmuCommand(" -m " . $mid . " -z"); $command .= '"' . $zid . ' ' . $hicolor . ' ' . $newZone['Coords'] . '"'; $status = exec(escapeshellcmd($command)); chdir($wd); $zoneImage = ZM_DIR_IMAGES . '/Zones' . $monitor['Id'] . '.jpg?' . time(); $focusWindow = true; xhtmlHeaders(__FILE__, translate('Zone')); ?> <body> <div id="page"> <div id="header">