private function show()
 {
     $arguments = array_key_exists('arguments', $_SESSION) ? $_SESSION['arguments'] : 0;
     $sensor = $_SESSION['sensor'];
     $dataset = $_SESSION['dataset'];
     if (!is_null($sensor)) {
         // Populate the Sensor with its measurements
         $measurements = MeasurementsDB::getMeasurementsBy('sensor_id', $sensor->getSensorId());
         $sensor->setMeasurements($measurements);
         // Update the session sensor
         $_SESSION['sensor'] = $sensor;
         SensorView::show();
     } else {
         HomeView::show();
         header('Location: /' . $_SESSION['base']);
     }
 }
 private function newMeasurement()
 {
     $measurement = null;
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         $measurement = new Measurement($_POST);
     }
     $_SESSION['measurement'] = $measurement;
     if (is_null($measurement) || $measurement->getErrorCount() != 0) {
         MeasurementView::showNew();
     } else {
         $newMeasurement = MeasurementsDB::addMeasurement($measurement);
         if ($newMeasurement->getErrorCount() == 0) {
             $_SESSION['measurement'] = $newMeasurement;
         }
         SensorView::show();
         header('Location: /' . $_SESSION['base'] . '/sensor/show/' . $_SESSION['sensor']->getSensorId());
     }
 }
 public function testUpdateMeasurementValue()
 {
     $myDb = DBMaker::create('sensordatarepotest');
     Database::clearDB();
     $db = Database::getDB('sensordatarepotest', 'C:\\xampp\\myConfig.ini');
     $testMeasurementId = 1;
     $measurements = MeasurementsDB::getMeasurementsBy('measurement_id', $testMeasurementId);
     $measurement = $measurements[0];
     $this->assertEquals($measurement->getMeasurementValue(), '45.2', 'Before the update, the measurement should have value 45.2');
     $params = $measurement->getParameters();
     $params['measurement_value'] = '25.4';
     $params['sensorType'] = 'HEADING';
     $params['sequenceType'] = 'SEQUENTIAL';
     $newMeasurement = new Measurement($params);
     $newMeasurement->setMeasurementId($testMeasurementId);
     $returnedMeasurement = MeasurementsDB::updateMeasurement($newMeasurement);
     $this->assertEquals($returnedMeasurement->getMeasurementValue(), $params['measurement_value'], 'After the update it should have the value ' . $params['measurement_value']);
     $this->assertTrue(empty($returnedMeasurement->getErrors()), 'The updated measurement should be error-free');
 }
 public static function run()
 {
     $action = array_key_exists('action', $_SESSION) ? $_SESSION['action'] : "";
     $arguments = array_key_exists('arguments', $_SESSION) ? $_SESSION['arguments'] : "";
     if (is_numeric($arguments)) {
         $measurements = MeasurementsDB::getMeasurementsBy('sensor_id', $arguments);
         if (count($measurements) > 0) {
             $sensorId = $measurements[0]->getSensorId();
             $sensorArray = SensorsDB::getSensorsBy('sensor_id', $sensorId);
             if (count($sensorArray) > 0) {
                 $sensor = $sensorArray[0];
             } else {
                 HomeView::show();
             }
             $datasetArray = DatasetsDB::getDatasetsBy('dataset_id', $sensor->getDatasetId());
             if (count($datasetArray) > 0) {
                 $dataset = $datasetArray[0];
             } else {
                 HomeView::show();
             }
             $_SESSION['measurements'] = $measurements;
             $_SESSION['sensor'] = $sensor;
             $_SESSION['dataset'] = $dataset;
         } else {
             HomeView::show();
         }
         switch ($action) {
             case "column":
                 self::showColumnChart();
                 break;
             case "line":
                 self::showLineChart();
                 break;
             default:
                 HomeView::show();
         }
     } else {
         HomeView::show();
     }
 }
 private function showDetails()
 {
     $user = array_key_exists('user', $_SESSION) ? $_SESSION['user'] : null;
     $dataset = array_key_exists('dataset', $_SESSION) ? $_SESSION['dataset'] : array();
     $base = array_key_exists('base', $_SESSION) ? $_SESSION['base'] : "";
     if (!is_null($dataset)) {
         echo '<h1>Dataset Summary</h1>';
         $targetDatasetUserId = $dataset->getUserId();
         if (self::CurrentUserCanEditTargetDataset($targetDatasetUserId)) {
             echo '<p>';
             echo '<a class="btn btn-primary" ';
             echo 'role="button" ';
             echo 'href="/' . $base . '/dataset/update/' . $dataset->getDatasetId() . '"';
             echo '>Update Dataset</a>';
             echo '&nbsp&nbsp';
             echo '<a class="btn btn-success" ';
             echo 'role="button" ';
             echo 'href="/' . $base . '/sensor/create">Add Sensor</a>';
             echo '</p>';
         }
         echo '<section>';
         echo '<fieldset><legend>Summary Info</legend>';
         echo 'Dataset Name:&nbsp' . $dataset->getDatasetName() . '<br><br>' . "\n";
         echo 'Created:&nbsp' . $dataset->getDateCreated() . '<br><br>' . "\n";
         echo 'Created by:&nbsp<a href="/' . $base . '/profile/show/' . $dataset->getUserId() . '">' . $user->getUsername() . '</a><br><br>' . "\n";
         echo 'Description:&nbsp' . $dataset->getDescription() . '<br><br>' . "\n";
         echo '</fieldset></section>';
         echo '<section>';
         echo '<h2>Dataset Sensors</h2>';
         if (count($dataset->getSensors()) > 0) {
             echo '<div class="table-responsive">';
             echo '<table class="table table-striped">';
             echo '<thead>';
             echo '<tr><th>Name</th><th>Type</th><th>Units</th><th>Num Records</th><th>Plot</th></tr>';
             echo '</thead>' . "\n";
             echo '<tbody>';
             foreach ($dataset->getSensors() as $sensor) {
                 $numRecords = count(MeasurementsDB::getMeasurementsBy('sensor_id', $sensor->getSensorId()));
                 echo '<tr>';
                 echo '<td><a href="/' . $base . '/sensor/show/' . $sensor->getSensorId() . '">' . $sensor->getSensorName() . '</a></td>';
                 echo '<td>' . $sensor->getSensorType() . '</td>';
                 echo '<td>' . $sensor->getSensorUnits() . '</td>';
                 echo "<td>{$numRecords}</td>";
                 if ($numRecords > 0) {
                     echo "<td>" . self::LinksToPlotTypes($sensor->getSensorType(), $sensor->getSensorId()) . "<td>";
                 } else {
                     echo "<td>No data</td>";
                 }
                 echo '</tr>' . "\n";
             }
             echo '</tbody>';
             echo '</table>';
             echo '</div>';
         } else {
             echo '<p>No sensors associated with this dataset</p>';
         }
         echo '</section>';
     } else {
         echo '<p>Unknown dataset</p>';
     }
     echo '<br><br>';
 }
 public static function updateMeasurement($measurement)
 {
     try {
         $db = Database::getDB();
         if (is_null($measurement) || $measurement->getErrorCount() > 0) {
             return $measurement;
         }
         $checkMeasurement = MeasurementsDB::getMeasurementsBy('measurement_id', $measurement->getMeasurementId());
         if (empty($checkMeasurement)) {
             $measurement->setError('measurement_id', 'MEASUREMENT_DOES_NOT_EXIST');
             return $measurement;
         }
         if ($measurement->getErrorCount() > 0) {
             return $measurement;
         }
         $query = "UPDATE Measurements SET measurement_index = :measurement_index,\r\n\t\t\t\t\tmeasurement_value = :measurement_value, measurement_timestamp = :measurement_timestamp,\r\n\t\t\t\t\tsensor_id = :sensor_id WHERE measurement_id = :measurement_id";
         $statement = $db->prepare($query);
         $statement->bindValue(':measurement_index', $measurement->getMeasurementIndex());
         $statement->bindValue(':measurement_value', $measurement->getMeasurementValue());
         $statement->bindValue(':measurement_timestamp', $measurement->getMeasurementTimestamp());
         $statement->bindValue(':sensor_id', $measurement->getSensorId());
         $statement->bindValue(':measurement_id', $measurement->getMeasurementId());
         $statement->execute();
         $statement->closeCursor();
     } catch (Exception $e) {
         $measurement->setError('measurement_id', 'MEASUREMENT_COULD_NOT_BE_UPDATED');
         //echo $e->getMessage();
         //echo 'file: '.$e->getFile().' line: '.$e->getLine();
     }
     return $measurement;
 }