Implement CSV file upload for creating parameters

This commit is contained in:
Eike Foken
2011-08-18 18:08:46 +02:00
parent 574fc9cd20
commit 15cdbd1861
3 changed files with 95 additions and 27 deletions

View File

@@ -76,6 +76,54 @@ class Parameters extends Admin_Controller {
$this->load->view('admin/parameters/create', $data); $this->load->view('admin/parameters/create', $data);
} }
/**
* Allows admins to upload a CSV file to create a bunch of parameters.
*
* @param string $programId
*/
public function upload_csv($programId = '') {
$program = $this->program->getByID($programId);
if (empty($programId) || !isset($program['id'])) {
show_404();
}
if (count($_FILES) > 0) {
if ($_FILES['csv_file']['type'] == 'text/csv') {
$row = 1;
$inserted = 0;
$handler = fopen($_FILES['csv_file']['tmp_name'], "r");
while (($parameter = fgetcsv($handler, 1000, ',')) !== false) {
if ($row > 1) {
$data = array(
'program_id' => $program['id'],
'name' => $parameter[0],
'readable' => $parameter[1],
'unit' => $parameter[2],
'type' => $parameter[3],
'default_value' => $parameter[4],
'description' => $parameter[5],
);
if ($this->parameter->create($data)) {
$inserted++;
}
}
$row++;
}
if ($inserted > 0) {
$this->messages->add(sprintf(_('%s parameters were successfully created.'), $inserted), 'success');
}
} else {
$this->messages->add(_('No CSV file specified.'), 'error');
}
}
redirect('admin/programs/edit/' . $program['id'], 303);
}
/** /**
* Allows admins to edit a parameter. * Allows admins to edit a parameter.
* *

View File

@@ -20,7 +20,7 @@ $(document).ready(function() {
</div> </div>
<div class="box"> <div class="box">
<form name="createUser" method="post" action="<?=site_url('admin/programs/edit/' . $program['id'])?>"> <form name="editProgram" method="post" action="<?=site_url('admin/programs/edit/' . $program['id'])?>">
<h3><?=_('Required information');?></h3> <h3><?=_('Required information');?></h3>
<ul> <ul>
<li> <li>
@@ -33,9 +33,10 @@ $(document).ready(function() {
</li> </li>
</ul> </ul>
<p> <p>
<a class="button save" href="javascript:void(0);" onclick="$('form[name=createUser]').submit();"><?=_('Save');?></a> <a class="button save" href="javascript:void(0);" onclick="$('form[name=editProgram]').submit();"><?=_('Save');?></a>
<a class="button cancel" href="<?=site_url('admin/programs');?>"><?=_('Cancel');?></a> <a class="button cancel" href="<?=site_url('admin/programs');?>"><?=_('Cancel');?></a>
</p> </p>
</form>
<h3><?=_('Parameters');?></h3> <h3><?=_('Parameters');?></h3>
<table class="tableList sortable" id="parameters"> <table class="tableList sortable" id="parameters">
@@ -67,7 +68,21 @@ $(document).ready(function() {
<p> <p>
<a class="button add" href="<?=site_url('admin/parameters/create/' . $program['id']);?>"><?=_('Add new parameter');?></a> <a class="button add" href="<?=site_url('admin/parameters/create/' . $program['id']);?>"><?=_('Add new parameter');?></a>
</p> </p>
</form>
<form name="uploadCSV" method="post" action="<?=site_url('admin/parameters/upload_csv/' . $program['id'])?>" enctype="multipart/form-data">
<ul>
<li>
<?=form_label(_('CVS file'), 'csv_file');?>
<div>
<input type="file" name="csv_file" id="csv_file" class="file" />
<?=form_error('csv_file')?>
</div>
<label class="note">You can upload a CVS file, containing a bunch of parameters. The rows of the file must be in the following format: <em>parameter name, human-readable name, unit, type, default value, description</em>. The first row is reserved for headlines.</label>
</li>
</ul>
<p>
<a class="button upload" href="javascript:void(0);" onclick="$('form[name=uploadCSV]').submit();"><?=_('Upload');?></a>
</p>
</div> </div>
</div> </div>

View File

@@ -423,6 +423,11 @@ a.save {
padding-left: 30px; padding-left: 30px;
} }
a.upload {
background: url(../images/icons/drive-upload.png) 10px center no-repeat #f3f3f3;
padding-left: 30px;
}
a.add { a.add {
background: url(../images/icons/plus-circle.png) 10px center no-repeat #f3f3f3; background: url(../images/icons/plus-circle.png) 10px center no-repeat #f3f3f3;
padding-left: 30px; padding-left: 30px;