diff --git a/application/controllers/experiments.php b/application/controllers/experiments.php index ab9376d..8fd5f92 100644 --- a/application/controllers/experiments.php +++ b/application/controllers/experiments.php @@ -47,14 +47,12 @@ class Experiments extends MY_Controller { * @param string $projectId */ public function create($projectId = '', $copyId = '') { - // TODO: Handle copying of experiments - $project = $this->project->getByID($projectId); - if (empty($projectId) || !isset($project['id'])){ + if (empty($projectId) || !isset($project['id'])) { show_404(); } - + $programs = $this->program->getAll(); // get the parameters for a specific program @@ -125,6 +123,12 @@ class Experiments extends MY_Controller { $data['programs'] = $programs; $data['project'] = $project; + // handle copying of experiments + if (!empty($copyId)) { + $data['copy'] = $this->experiment->getById($copyId); + $data['copy_params'] = $this->experiment->getParameters($copyId); + } + $this->load->view('experiments/new', $data); } @@ -155,6 +159,13 @@ class Experiments extends MY_Controller { $this->load->helper('typography'); + // update parameters + foreach ($_POST as $key => $value) { + if (preg_match('/^param-[0-9a-z]+/', $key)) { + $this->experiment->updateParameter($this->input->post($key), $experiment['id'], substr($key, 6, 16)); + } + } + $data['experiment'] = $experiment; $data['parameters'] = $this->experiment->getParameters($experiment['id']); $data['job'] = $this->job->getByExperimentId($experiment['id']); diff --git a/application/models/experiment.php b/application/models/experiment.php index 4196adf..26c0313 100644 --- a/application/models/experiment.php +++ b/application/models/experiment.php @@ -96,7 +96,7 @@ class Experiment extends CI_Model { return false; } - $experiment = $this->get($experimentId); + $experiment = $this->getById($experimentId); $parameter = $this->db->get_where('parameters', array('id' => $data['parameter_id']))->row_array(); if (isset($experiment['id']) && $experiment['program_id'] == $parameter['program_id']) { @@ -106,6 +106,30 @@ class Experiment extends CI_Model { return $this->db->affected_rows() == 1 ? $experimentId : false; } + /** + * Updates a specific parameter for the specified experiment. + * + * @param string $value + * @param string $experimentId + * @param string $parameterId + * @return boolean + */ + public function updateParameter($value, $experimentId, $parameterId) { + if (!empty($value)) { + // replace into, to overwrite existing parameters + $this->db->query("REPLACE INTO `experiments_parameters`" + . " (`experiment_id`, `parameter_id`, `value`) VALUES" + . " ('{$experimentId}', '{$parameterId}', '{$value}')"); + } else { + // delete table entry, if value is empty + $this->db->where('experiment_id', $experimentId); + $this->db->where('parameter_id', $parameterId); + $this->db->delete('experiments_parameters'); + } + + return $this->db->affected_rows() > 0; + } + /** * Gets all parameters for the specified experiment. * @@ -116,7 +140,8 @@ class Experiment extends CI_Model { $programId = $this->db->get_where('experiments', array('id' => $experimentId))->row()->program_id; $query = $this->db->query("SELECT `experiments_parameters`.*, `parameters`.`readable`," - . " `parameters`.`name`, `parameters`.`type`, `parameters`.`unit`" + . " `parameters`.`name`, `parameters`.`type`, `parameters`.`unit`," + . " `parameters`.`description`, `parameters`.`id` AS parameter_id" . " FROM `parameters` LEFT JOIN `experiments_parameters`" . " ON (`experiments_parameters`.`parameter_id` = `parameters`.`id`" . " AND `experiment_id` = '{$experimentId}') WHERE `program_id` = '{$programId}' ORDER BY `sort_number` ASC"); diff --git a/application/views/experiments/detail.php b/application/views/experiments/detail.php index 523cf06..5a8709a 100644 --- a/application/views/experiments/detail.php +++ b/application/views/experiments/detail.php @@ -31,44 +31,46 @@
-

- - - - - - - - - + +

+
+ + + + + + + + - - - + + - - + + + + - -
- +
+ - -   - + +   + - -
-

- -

+ + +

+ +

+
-

+

- + @@ -95,26 +95,28 @@ - +   @@ -132,4 +134,11 @@ + + + + load->view('footer');?>