form to upload file

This commit is contained in:
Nicolas Lœuillet 2015-10-22 16:57:56 +02:00 committed by Jeremy Benoist
parent 8c3c77c1bd
commit d275bdf4d3
7 changed files with 109 additions and 16 deletions

View file

@ -30,6 +30,8 @@ wallabag_core:
en: 'English'
fr: 'Français'
de: 'Deutsch'
import:
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
# Twig Configuration
twig:

View file

@ -51,7 +51,7 @@ class ImportCommand extends ContainerAwareCommand
$batchSize = 20;
$i = 1;
$user = $em->getRepository('WallabagCoreBundle:User')
$user = $em->getRepository('WallabagUserBundle:User')
->findOneById($input->getArgument('userId'));
if (!is_object($user)) {
@ -116,6 +116,7 @@ class ImportCommand extends ContainerAwareCommand
protected function get(InputInterface $input, OutputInterface $output)
{
$filename = __DIR__.'/../../../../web/uploads/import/'.$input->getArgument('userId').'.json';
$data = $this->convert($filename);
return $data;

View file

@ -8,6 +8,7 @@ use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\HttpFoundation\Request;
use Wallabag\CoreBundle\Command\ImportCommand;
use Wallabag\CoreBundle\Form\Type\UploadImportType;
class ImportController extends Controller
{
@ -18,23 +19,46 @@ class ImportController extends Controller
*/
public function importAction(Request $request)
{
$command = new ImportCommand();
$command->setContainer($this->container);
$input = new ArrayInput(array('userId' => $this->getUser()->getId()));
$return = $command->run($input, new NullOutput());
$importForm = $this->createForm(new UploadImportType());
$importForm->handleRequest($request);
$user = $this->getUser();
$importConfig = $this->container->getParameter('wallabag_core.import');
if ($return == 0) {
$this->get('session')->getFlashBag()->add(
'notice',
'Import successful'
);
} else {
$this->get('session')->getFlashBag()->add(
'warning',
'Import failed'
);
if ($importForm->isValid()) {
$file = $importForm->get('file')->getData();
$name = $user->getId().'.json';
$dir = __DIR__.'/../../../../web/uploads/import';
if (in_array($file->getMimeType(), $importConfig['allow_mimetypes']) && $file->move($dir, $name)) {
$command = new ImportCommand();
$command->setContainer($this->container);
$input = new ArrayInput(array('userId' => $user->getId()));
$return = $command->run($input, new NullOutput());
if ($return == 0) {
$this->get('session')->getFlashBag()->add(
'notice',
'Import successful'
);
} else {
$this->get('session')->getFlashBag()->add(
'notice',
'Import failed'
);
}
return $this->redirect('/');
} else {
$this->get('session')->getFlashBag()->add(
'notice',
'Error while processing import. Please verify your import file.'
);
}
}
return $this->redirect('/');
return $this->render('WallabagCoreBundle:Import:index.html.twig', array(
'form' => array(
'import' => $importForm->createView(), ),
));
}
}

View file

@ -4,6 +4,7 @@ namespace Wallabag\CoreBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
class Configuration implements ConfigurationInterface
{
@ -17,9 +18,21 @@ class Configuration implements ConfigurationInterface
->arrayNode('languages')
->prototype('scalar')->end()
->end()
->arrayNode('import')
->append($this->getAllowMimetypes())
->end()
->end()
;
return $treeBuilder;
}
private function getAllowMimetypes()
{
$node = new ArrayNodeDefinition('allow_mimetypes');
$node->prototype('scalar')->end();
return $node;
}
}

View file

@ -14,6 +14,7 @@ class WallabagCoreExtension extends Extension
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$container->setParameter('wallabag_core.languages', $config['languages']);
$container->setParameter('wallabag_core.import', $config['import']);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

View file

@ -0,0 +1,29 @@
<?php
namespace Wallabag\CoreBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class UploadImportType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', 'file')
->add('save', 'submit')
;
}
public function getDefaultOptions(array $options)
{
return array(
'csrf_protection' => false,
);
}
public function getName()
{
return 'upload_import_file';
}
}

View file

@ -0,0 +1,23 @@
{% extends "WallabagCoreBundle::layout.html.twig" %}
{% block title %}{% trans %}import{% endtrans %}{% endblock %}
{% block content %}
<div id="set1" class="col s12">
<form action="{{ path('import') }}" method="post" {{ form_enctype(form.import) }}>
{{ form_errors(form.import) }}
<div class="row">
<div class="input-field col s12">
{{ form_errors(form.import.file) }}
{{ form_widget(form.import.file) }}
<label class="required">{% trans %}File{% endtrans %}</label>
</div>
</div>
<div class="hidden">{{ form_rest(form.import) }}</div>
<button class="btn waves-effect waves-light" type="submit" name="action">
{% trans %}Upload file{% endtrans %}
</button>
</form>
</div>
{% endblock %}