public function uploadAction()
{
if (empty($_FILES['upload'])) {
$this->flashMessenger()->addErrorMessage('Can not upload translations');
return $this->redirect()->toRoute('content/translation');
}
$translator = new Translator();
foreach ($_FILES['upload']['tmp_name'] as $idx => $tmpName) {
if ($_FILES['upload']['error'][$idx] != UPLOAD_ERR_OK) {
continue;
}
$fileName = $_FILES['upload']['name'][$idx];
switch ($_FILES['upload']['type'][$idx]) {
case 'text/csv':
try {
$locale = str_replace('.csv', '', $fileName);
$file = new SplFileObject($tmpName);
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
if (empty($row[0])) {
continue;
}
list($source, $value) = $row;
$this->saveTranslation($translator, $locale, $source, $value);
}
} catch (Exception $e) {
$this->flashMessenger()->addErrorMessage($e->getMessage());
return $this->redirect()->toRoute('content/translation');
}
$this->flashMessenger()->addSuccessMessage(sprintf('Translations in %s are updated', $fileName));
break;
case 'text/php':
case 'application/x-php':
try {
$locale = str_replace('.php', '', $fileName);
$content = str_replace(array('<?php', '<?', '?>'), array('', '', ''), file_get_contents($tmpName));
if (!($data = @eval($content)) or !is_array($data)) {
throw new Exception(sprintf('File %s cannot be read', $fileName));
}
foreach ($data as $source => $value) {
$this->saveTranslation($translator, $locale, $source, $value);
}
} catch (Exception $e) {
$this->flashMessenger()->addErrorMessage($e->getMessage());
return $this->redirect()->toRoute('content/translation');
}
$translator->generateCache();
$this->flashMessenger()->addSuccessMessage(sprintf('Translations in %s are updated', $fileName));
break;
}
}
return $this->redirect()->toRoute('content/translation');
}