Migrate to php 5.6 + Laravel 5.1 + add phpunit test
authorymh <ymh.work@gmail.com>
Tue, 23 Jun 2015 17:01:39 +0200
changeset 2 00e2916104fe
parent 1 01a844d292ac
child 3 2b3247d02769
Migrate to php 5.6 + Laravel 5.1 + add phpunit test
.hgignore
dev/provisioning/files/.bashrc
dev/provisioning/files/site.j2
dev/provisioning/playbook.yml
server/src/app/Commands/Command.php
server/src/app/Console/Commands/ImportCocoonRDF.php
server/src/app/Console/Commands/Inspire.php
server/src/app/Console/Kernel.php
server/src/app/Events/Event.php
server/src/app/Exceptions/Handler.php
server/src/app/Http/Controllers/Auth/AuthController.php
server/src/app/Http/Controllers/Auth/PasswordController.php
server/src/app/Http/Controllers/Bo/DocumentListController.php
server/src/app/Http/Controllers/Controller.php
server/src/app/Http/Controllers/HomeController.php
server/src/app/Http/Controllers/WelcomeController.php
server/src/app/Http/Kernel.php
server/src/app/Http/Middleware/Authenticate.php
server/src/app/Http/Middleware/RedirectIfAuthenticated.php
server/src/app/Http/Middleware/VerifyCsrfToken.php
server/src/app/Http/Requests/Request.php
server/src/app/Http/routes.php
server/src/app/Libraries/Utils.php
server/src/app/Models/Document.php
server/src/app/Models/User.php
server/src/app/Providers/AppServiceProvider.php
server/src/app/Providers/BusServiceProvider.php
server/src/app/Providers/ConfigServiceProvider.php
server/src/app/Providers/EventServiceProvider.php
server/src/app/Providers/RepositoryServiceProvider.php
server/src/app/Providers/RouteServiceProvider.php
server/src/app/Repositories/DocumentRepository.php
server/src/app/Repositories/RdfDocumentRepository.php
server/src/app/Services/Registrar.php
server/src/app/User.php
server/src/bootstrap/app.php
server/src/bootstrap/autoload.php
server/src/bootstrap/cache/.hgkeep
server/src/composer.json
server/src/composer.lock
server/src/config/app.php
server/src/config/auth.php
server/src/config/cache.php
server/src/config/compile.php
server/src/config/constants.php
server/src/config/corpusparole.php
server/src/config/database.php
server/src/config/filesystems.php
server/src/config/mail.php
server/src/config/queue.php
server/src/config/services.php
server/src/config/session.php
server/src/config/view.php
server/src/database/migrations/2014_10_12_000000_create_users_table.php
server/src/database/migrations/2014_10_12_100000_create_password_resets_table.php
server/src/database/seeds/DatabaseSeeder.php
server/src/phpspec.yml
server/src/phpunit.xml
server/src/resources/lang/en/bo.php
server/src/resources/lang/en/pagination.php
server/src/resources/lang/en/passwords.php
server/src/resources/lang/en/validation.php
server/src/resources/lang/fr/bo.php
server/src/resources/lang/fr/pagination.php
server/src/resources/lang/fr/passwords.php
server/src/resources/lang/fr/validation.php
server/src/resources/views/bo/docDetail.blade.php
server/src/resources/views/bo/docEdit.blade.php
server/src/resources/views/bo/docList.blade.php
server/src/resources/views/welcome.blade.php
server/src/tests/Controllers/DocumentListControllerTest.php
server/src/tests/ExampleTest.php
server/src/tests/Models/DocumentTest.php
server/src/tests/Repositories/DocumentRepositoryTest.php
server/src/tests/TestCase.php
server/src/vendor/monolog/monolog/tests/Monolog/Handler/Fixtures/.hgkeep
--- a/.hgignore	Mon Jun 15 19:30:32 2015 +0200
+++ b/.hgignore	Tue Jun 23 17:01:39 2015 +0200
@@ -6,6 +6,7 @@
 ^server/src/composer.phar$
 ^server/src/vendor
 ^server/src/node_modules
+^server/src/bootstrap/cache/
 ^server/src/database/.*\.sqlite$
 ^server/src/storage/laravel.log$
 ^server/src/storage/app/
--- a/dev/provisioning/files/.bashrc	Mon Jun 15 19:30:32 2015 +0200
+++ b/dev/provisioning/files/.bashrc	Tue Jun 23 17:01:39 2015 +0200
@@ -144,3 +144,7 @@
         . /etc/bash_completion
     fi
 fi
+
+
+#activate remi php56 scl
+source /opt/remi/php56/enable
--- a/dev/provisioning/files/site.j2	Mon Jun 15 19:30:32 2015 +0200
+++ b/dev/provisioning/files/site.j2	Tue Jun 23 17:01:39 2015 +0200
@@ -38,7 +38,7 @@
 
         location ~ \.php$ {
             fastcgi_split_path_info ^(.+\.php)(/.+)$;
-            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
+            fastcgi_pass unix:/opt/remi/php56/root/var/run/php-fpm/php-fpm.sock;
             fastcgi_index index.php;
             include fastcgi_params;
             fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
@@ -77,7 +77,7 @@
 
         location ~ \.php$ {
             fastcgi_split_path_info ^(.+\.php)(/.+)$;
-            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
+            fastcgi_pass unix:/opt/remi/php56/root/var/run/php-fpm/php-fpm.sock;
             fastcgi_index index.php;
             include fastcgi_params;
             fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
--- a/dev/provisioning/playbook.yml	Mon Jun 15 19:30:32 2015 +0200
+++ b/dev/provisioning/playbook.yml	Tue Jun 23 17:01:39 2015 +0200
@@ -16,6 +16,14 @@
 
     - name: set hostname
       hostname: name={{site_name}}
+    - name: set hosts IPv4
+      lineinfile:
+        dest: /etc/hosts
+        line: 127.0.0.1   corpus-parole corpus-parole.local
+    - name: set hosts IPv6
+      lineinfile:
+        dest: /etc/hosts
+        line: ::1         corpus-parole corpus-parole.local
 
     - name: ensure correct locale LC_ALL
       lineinfile: dest=/etc/sysconfig/i18n regexp=^LC_ALL= line=LC_ALL="en_US.UTF-8"
@@ -95,82 +103,72 @@
         - python-psycopg2
         - htop
         - openssl
-        - php
-        - php-cli
-        - php-fpm
-        - php-mbstring
-        - php-mcrypt
-        - php-curl
-        - php-gd
-        - php-json
-        - php-pgsql
-        - php-xml
+        - php56
+        - php56-php-fpm
+        - php56-php-mbstring
+        - php56-php-mcrypt
+        - php56-php-gd
+        - php56-php-pgsql
         - java-1.8.0-openjdk
         - tomcat6
 
-#TODO: check php-fpm config in /etc/php5/fpm/...
-
-#    - name: Start the services
-#      service: name={{item}} state=started enabled=true
-#      with_items:
-#        - postgres
-#        - nginx
-#        - tomcat
 
 ## php-fpm config
 
 # set fpm user to nginx
-# authoroze /var/log/php-fpm
+# authorize /var/log/php-fpm
     - name: copy sysconfig for php-fpm
-      copy: src=files/sysconfig_php-fpm dest=/etc/sysconfig/php-fpm
-    - name: set /var/log/php-fpm permission
-      file: path=/var/log/php-fpm/ state=directory owner=nginx group=nginx
+      copy: src=files/sysconfig_php-fpm dest=/opt/remi/php56/root/etc/sysconfig/php-fpm
+    - name: set /opt/remi/php56/root/var/log/php-fpm permission
+      file: path=/opt/remi/php56/root/var/log/php-fpm/ state=directory owner=nginx group=nginx
 
     - name: set php-fpm listen to socket
       lineinfile:
-        dest: /etc/php-fpm.d/www.conf
+        dest: /opt/remi/php56/root/etc/php-fpm.d/www.conf
         regexp: '^listen\s*='
-        line: 'listen = /var/run/php-fpm/php-fpm.sock'
+        line: 'listen = /opt/remi/php56/root/var/run/php-fpm/php-fpm.sock'
         state: present
 
     - name: set php-fpm user
       lineinfile:
-        dest: /etc/php-fpm.d/www.conf
+        dest: /opt/remi/php56/root/etc/php-fpm.d/www.conf
         regexp: '^user\s*='
         line: 'user = nginx'
         state: present
 
     - name: set php-fpm group
       lineinfile:
-        dest: /etc/php-fpm.d/www.conf
+        dest: /opt/remi/php56/root/etc/php-fpm.d/www.conf
         regexp: '^group\s*='
         line: 'group = nginx'
         state: present
 
     - name: set php-fpm user
       lineinfile:
-        dest: /etc/php-fpm.d/www.conf
+        dest: /opt/remi/php56/root/etc/php-fpm.d/www.conf
         regexp: '^;listen.owner\s*='
         line: 'listen.owner = nginx'
         state: present
 
     - name: set php-fpm group
       lineinfile:
-        dest: /etc/php-fpm.d/www.conf
+        dest: /opt/remi/php56/root/etc/php-fpm.d/www.conf
         regexp: '^;listen.group\s*='
         line: 'listen.group = nginx'
         state: present
 
     - name: set php-fpm permission
       lineinfile:
-        dest: /etc/php-fpm.d/www.conf
+        dest: /opt/remi/php56/root/etc/php-fpm.d/www.conf
         regexp: '^;listen.mode\s*='
         line: 'listen.mode = 0660'
         state: present
 
+    - name: add link to php56 fpm log
+      file: path=/var/log/php56-php-fpm src=/opt/remi/php56/root/var/log/php-fpm state=link
 
     - name: restart php-fpm
-      service: name=php-fpm state=restarted enabled=yes
+      service: name=php56-php-fpm state=restarted enabled=yes
 
 
 ## nginx config
@@ -293,10 +291,10 @@
       register: composer_bin
 
     - name: install composer
-      shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin
+      shell: curl -sS https://getcomposer.org/installer | scl enable php56 'php -- --install-dir=/usr/local/bin'
       when: composer_bin.stat.exists == False
-    - name: rename composer
-      command: mv /usr/local/bin/composer.phar /usr/local/bin/composer
+    - name: link composer
+      file: path=/usr/local/bin/composer src=/usr/local/bin/composer.phar state=link
       when: composer_bin.stat.exists == False
 
     #install node
--- a/server/src/app/Commands/Command.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Commands/Command.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,7 +1,7 @@
-<?php namespace App\Commands;
+<?php
+
+namespace CorpusParole\Commands;
 
 abstract class Command {
-
-	//
-
+    //
 }
--- a/server/src/app/Console/Commands/ImportCocoonRDF.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Console/Commands/ImportCocoonRDF.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,73 +1,96 @@
-<?php namespace App\Console\Commands;
+<?php
 
+namespace CorpusParole\Console\Commands;
+
+use Config;
 use Illuminate\Console\Command;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputArgument;
-
-class ImportCocoonRDF extends Command {
+use Phpoaipmh\Client;
+use Phpoaipmh\Endpoint;
 
-	/**
-	 * The console command name.
-	 *
-	 * @var string
-	 */
-	protected $name = 'corpus-parole:importRDF';
+class ImportCocoonRDF extends Command
+{
+    /**
+     * The console command name.
+     *
+     * @var string
+     */
+    protected $name = 'corpus-parole:importRDF';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Command description.';
 
-	/**
-	 * The console command description.
-	 *
-	 * @var string
-	 */
-	protected $description = 'Command description.';
+    /**
+     * Create a new command instance.
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
 
-	/**
-	 * Create a new command instance.
-	 *
-	 * @return void
-	 */
-	public function __construct()
-	{
-		parent::__construct();
-	}
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function fire()
+    {
+        echo("hello\n");
+        libxml_use_internal_errors(true);
+
+        $gs = new \EasyRdf_GraphStore(Config::get('corpusparole.sesame_update_url'));
+
+        //$doc = new \EasyRdf_Graph("http://cocoon.huma-num.fr/exist/crdo/rdf/crdo-ESLO1_ENTCONT_203");
+        //$doc->load();
 
-	/**
-	 * Execute the console command.
-	 *
-	 * @return mixed
-	 */
-	public function fire()
-	{
-		echo("hello\n");
-		$doc = new \EasyRdf_Graph("http://cocoon.huma-num.fr/exist/crdo/rdf/crdo-ESLO1_ENTCONT_203");
-		$doc->load();
+        $client = new Client(Config::get('corpusparole.cocoon_oaipmh_url'));
+        //$client = new Client('http://memory.loc.gov/cgi-bin/oai2_0');
+        $endpoint = new Endpoint($client);
+
+        $recs = $endpoint->listRecords('olac', null, null, 'LanguesDeFrance');
+        //$recs = $endpoint->listRecords('oai_dc', null, null, 'mussm');
 
-		echo $doc->dump('text');
-
-		echo(join(', ', $doc->allOfType('foaf:Agent')));
-	}
+        foreach ($recs as $item) {
+            if ($recs->getNumRequests() > 1) {
+                break;
+            }
+            $identifier = (string) $item->xpath('/record/header/identifier')[0];
+            $docRdfUrl = Config::get('corpusparole.cocoon_rdf_base_uri').substr($identifier, strlen(Config::get('corpusparole.cocoon_doc_id_base')));
+            print("Processing $identifier : $docRdfUrl\n");
+            $doc = new \EasyRdf_Graph($docRdfUrl);
+            $doc->load();
+            $subjects = $doc->resourcesMatching('foaf:primaryTopic');
+            $subject = reset($subjects)->getUri();
+            $gs->insert($doc, $subject);
+        }
+    }
 
-	/**
-	 * Get the console command arguments.
-	 *
-	 * @return array
-	 */
-	protected function getArguments()
-	{
-		return [
-			['example', InputArgument::REQUIRED, 'An example argument.'],
-		];
-	}
+    /**
+     * Get the console command arguments.
+     *
+     * @return array
+     */
+    protected function getArguments()
+    {
+        return [
+            ['example', InputArgument::REQUIRED, 'An example argument.'],
+        ];
+    }
 
-	/**
-	 * Get the console command options.
-	 *
-	 * @return array
-	 */
-	protected function getOptions()
-	{
-		return [
-			//['example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null],
-		];
-	}
-
+    /**
+     * Get the console command options.
+     *
+     * @return array
+     */
+    protected function getOptions()
+    {
+        return [
+            //['example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null],
+        ];
+    }
 }
--- a/server/src/app/Console/Commands/Inspire.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Console/Commands/Inspire.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,32 +1,33 @@
-<?php namespace App\Console\Commands;
+<?php
+
+namespace CorpusParole\Console\Commands;
 
 use Illuminate\Console\Command;
 use Illuminate\Foundation\Inspiring;
 
-class Inspire extends Command {
-
-	/**
-	 * The console command name.
-	 *
-	 * @var string
-	 */
-	protected $name = 'inspire';
+class Inspire extends Command
+{
+    /**
+     * The console command name.
+     *
+     * @var string
+     */
+    protected $name = 'inspire';
 
-	/**
-	 * The console command description.
-	 *
-	 * @var string
-	 */
-	protected $description = 'Display an inspiring quote';
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Display an inspiring quote';
 
-	/**
-	 * Execute the console command.
-	 *
-	 * @return mixed
-	 */
-	public function handle()
-	{
-		$this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);
-	}
-
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);
+    }
 }
--- a/server/src/app/Console/Kernel.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Console/Kernel.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,30 +1,30 @@
-<?php namespace App\Console;
+<?php
+
+namespace CorpusParole\Console;
 
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 
-class Kernel extends ConsoleKernel {
-
-	/**
-	 * The Artisan commands provided by your application.
-	 *
-	 * @var array
-	 */
-	protected $commands = [
-		'App\Console\Commands\Inspire',
-		'App\Console\Commands\ImportCocoonRDF',
-	];
+class Kernel extends ConsoleKernel
+{
+    /**
+     * The Artisan commands provided by your application.
+     *
+     * @var array
+     */
+    protected $commands = [
+        'CorpusParole\Console\Commands\Inspire',
+        'CorpusParole\Console\Commands\ImportCocoonRDF',
+    ];
 
-	/**
-	 * Define the application's command schedule.
-	 *
-	 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
-	 * @return void
-	 */
-	protected function schedule(Schedule $schedule)
-	{
-		$schedule->command('inspire')
-				 ->hourly();
-	}
-
+    /**
+     * Define the application's command schedule.
+     *
+     * @param \Illuminate\Console\Scheduling\Schedule $schedule
+     */
+    protected function schedule(Schedule $schedule)
+    {
+        $schedule->command('inspire')
+                 ->hourly();
+    }
 }
--- a/server/src/app/Events/Event.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Events/Event.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,7 +1,8 @@
-<?php namespace App\Events;
+<?php
 
-abstract class Event {
+namespace CorpusParole\Events;
 
-	//
-
+abstract class Event
+{
+    //
 }
--- a/server/src/app/Exceptions/Handler.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Exceptions/Handler.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,42 +1,43 @@
-<?php namespace App\Exceptions;
+<?php
+
+namespace CorpusParole\Exceptions;
 
 use Exception;
 use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 
-class Handler extends ExceptionHandler {
-
-	/**
-	 * A list of the exception types that should not be reported.
-	 *
-	 * @var array
-	 */
-	protected $dontReport = [
-		'Symfony\Component\HttpKernel\Exception\HttpException'
-	];
+class Handler extends ExceptionHandler
+{
+    /**
+     * A list of the exception types that should not be reported.
+     *
+     * @var array
+     */
+    protected $dontReport = [
+        'Symfony\Component\HttpKernel\Exception\HttpException',
+    ];
 
-	/**
-	 * Report or log an exception.
-	 *
-	 * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
-	 *
-	 * @param  \Exception  $e
-	 * @return void
-	 */
-	public function report(Exception $e)
-	{
-		return parent::report($e);
-	}
+    /**
+     * Report or log an exception.
+     *
+     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
+     *
+     * @param \Exception $e
+     */
+    public function report(Exception $e)
+    {
+        return parent::report($e);
+    }
 
-	/**
-	 * Render an exception into an HTTP response.
-	 *
-	 * @param  \Illuminate\Http\Request  $request
-	 * @param  \Exception  $e
-	 * @return \Illuminate\Http\Response
-	 */
-	public function render($request, Exception $e)
-	{
-		return parent::render($request, $e);
-	}
-
+    /**
+     * Render an exception into an HTTP response.
+     *
+     * @param \Illuminate\Http\Request $request
+     * @param \Exception               $e
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function render($request, Exception $e)
+    {
+        return parent::render($request, $e);
+    }
 }
--- a/server/src/app/Http/Controllers/Auth/AuthController.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Controllers/Auth/AuthController.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,38 +1,75 @@
-<?php namespace App\Http\Controllers\Auth;
+<?php
+
+namespace CorpusParole\Http\Controllers\Auth;
+
 
-use App\Http\Controllers\Controller;
+use Validator;
+
+use CorpusParole\Models\User;
+use CorpusParole\Http\Controllers\Controller;
+
 use Illuminate\Contracts\Auth\Guard;
 use Illuminate\Contracts\Auth\Registrar;
 use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
 
 class AuthController extends Controller {
 
-	/*
-	|--------------------------------------------------------------------------
-	| Registration & Login Controller
-	|--------------------------------------------------------------------------
-	|
-	| This controller handles the registration of new users, as well as the
-	| authentication of existing users. By default, this controller uses
-	| a simple trait to add these behaviors. Why don't you explore it?
-	|
-	*/
-
-	use AuthenticatesAndRegistersUsers;
+    /**
+     * Get a validator for an incoming registration request.
+     *
+     * @param array $data
+     *
+     * @return \Illuminate\Contracts\Validation\Validator
+     */
+    public function validator(array $data)
+    {
+        return Validator::make($data, [
+            'name' => 'required|max:255',
+            'email' => 'required|email|max:255|unique:users',
+            'password' => 'required|confirmed|min:6',
+        ]);
+    }
 
-	/**
-	 * Create a new authentication controller instance.
-	 *
-	 * @param  \Illuminate\Contracts\Auth\Guard  $auth
-	 * @param  \Illuminate\Contracts\Auth\Registrar  $registrar
-	 * @return void
-	 */
-	public function __construct(Guard $auth, Registrar $registrar)
-	{
-		$this->auth = $auth;
-		$this->registrar = $registrar;
+    /**
+     * Create a new user instance after a valid registration.
+     *
+     * @param array $data
+     *
+     * @return User
+     */
+    public function create(array $data)
+    {
+        return User::create([
+            'name' => $data['name'],
+            'email' => $data['email'],
+            'password' => bcrypt($data['password']),
+        ]);
+    }
 
-		$this->middleware('guest', ['except' => 'getLogout']);
-	}
+    /*
+    |--------------------------------------------------------------------------
+    | Registration & Login Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller handles the registration of new users, as well as the
+    | authentication of existing users. By default, this controller uses
+    | a simple trait to add these behaviors. Why don't you explore it?
+    |
+    */
+
+    use AuthenticatesAndRegistersUsers;
 
+    /**
+     * Create a new authentication controller instance.
+     *
+     * @param \Illuminate\Contracts\Auth\Guard     $auth
+     * @param \Illuminate\Contracts\Auth\Registrar $registrar
+     */
+    public function __construct(Guard $auth, Registrar $registrar)
+    {
+        $this->auth = $auth;
+        $this->registrar = $registrar;
+
+        $this->middleware('guest', ['except' => 'getLogout']);
+    }
 }
--- a/server/src/app/Http/Controllers/Auth/PasswordController.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Controllers/Auth/PasswordController.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,38 +1,33 @@
-<?php namespace App\Http\Controllers\Auth;
+<?php
 
-use App\Http\Controllers\Controller;
+namespace CorpusParole\Http\Controllers\Auth;
+
+use CorpusParole\Http\Controllers\Controller;
 use Illuminate\Contracts\Auth\Guard;
 use Illuminate\Contracts\Auth\PasswordBroker;
 use Illuminate\Foundation\Auth\ResetsPasswords;
 
-class PasswordController extends Controller {
-
-	/*
-	|--------------------------------------------------------------------------
-	| Password Reset Controller
-	|--------------------------------------------------------------------------
-	|
-	| This controller is responsible for handling password reset requests
-	| and uses a simple trait to include this behavior. You're free to
-	| explore this trait and override any methods you wish to tweak.
-	|
-	*/
-
-	use ResetsPasswords;
+class PasswordController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller is responsible for handling password reset requests
+    | and uses a simple trait to include this behavior. You're free to
+    | explore this trait and override any methods you wish to tweak.
+    |
+    */
 
-	/**
-	 * Create a new password controller instance.
-	 *
-	 * @param  \Illuminate\Contracts\Auth\Guard  $auth
-	 * @param  \Illuminate\Contracts\Auth\PasswordBroker  $passwords
-	 * @return void
-	 */
-	public function __construct(Guard $auth, PasswordBroker $passwords)
-	{
-		$this->auth = $auth;
-		$this->passwords = $passwords;
+    use ResetsPasswords;
 
-		$this->middleware('guest');
-	}
-
+    /**
+     * Create a new password controller instance.
+     *
+     */
+    public function __construct()
+    {
+        $this->middleware('guest');
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Http/Controllers/Bo/DocumentListController.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,117 @@
+<?php
+
+namespace CorpusParole\Http\Controllers\Bo;
+
+use Config;
+use Log;
+
+use CorpusParole\Http\Controllers\Controller;
+use CorpusParole\Repositories\DocumentRepository;
+
+use Illuminate\Http\Request;
+
+class DocumentListController extends Controller {
+
+    /**
+     * Create a new controller instance.
+     */
+    public function __construct(DocumentRepository $documentRepo) {
+        $this->documentRepository = $documentRepo;
+    }
+
+    /**
+     * Display a listing of the resource.
+     *
+     * @return Response
+     */
+    public function index() {
+        return view('bo.docList', ['docs' => $this->documentRepository->all()]);
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @return Response
+     */
+    public function store()
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param string $id
+     *
+     * @return Response
+     */
+    public function show($id)
+    {
+        //$doc->add("<$doc_uri>");
+        $doc = $this->documentRepository->get($id);
+
+        return view('bo.docDetail', ['doc' => $doc]);
+
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param int $id
+     *
+     * @return Response
+     */
+    public function edit($id)
+    {
+        $doc = $this->documentRepository->get($id);
+
+        return view('bo.docEdit', ['doc' => $doc]);
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param int $id
+     *
+     * @return Response
+     */
+    public function update($id, Request $request)
+    {
+        Log::debug('REQUEST : '.print_r($request->input(), true));
+
+        $doc = $this->documentRepository->get($id);
+
+        $newDoc = clone $doc;
+
+        $newDoc->updateDiscourseTypes(array_unique($request->input('discourse_type')));
+
+        Log::debug("Graph isomorphes ? " . print_r(\EasyRdf_Isomorphic::bijectionBetween($doc->getGraph(), $doc->getGraph()), true));
+
+        //TODO: save change in store
+        //TODO: create log object
+
+        return redirect()->route('bo.docs.show', ['id' => $id]);
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param int $id
+     *
+     * @return Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+}
--- a/server/src/app/Http/Controllers/Controller.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Controllers/Controller.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,11 +1,12 @@
-<?php namespace App\Http\Controllers;
+<?php
+
+namespace CorpusParole\Http\Controllers;
 
 use Illuminate\Foundation\Bus\DispatchesCommands;
 use Illuminate\Routing\Controller as BaseController;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 
-abstract class Controller extends BaseController {
-
-	use DispatchesCommands, ValidatesRequests;
-
+abstract class Controller extends BaseController
+{
+    use DispatchesCommands, ValidatesRequests;
 }
--- a/server/src/app/Http/Controllers/HomeController.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Controllers/HomeController.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,36 +1,35 @@
-<?php namespace App\Http\Controllers;
+<?php
 
-class HomeController extends Controller {
+namespace CorpusParole\Http\Controllers;
 
-	/*
-	|--------------------------------------------------------------------------
-	| Home Controller
-	|--------------------------------------------------------------------------
-	|
-	| This controller renders your application's "dashboard" for users that
-	| are authenticated. Of course, you are free to change or remove the
-	| controller as you wish. It is just here to get your app started!
-	|
-	*/
+class HomeController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Home Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller renders your application's "dashboard" for users that
+    | are authenticated. Of course, you are free to change or remove the
+    | controller as you wish. It is just here to get your app started!
+    |
+    */
 
-	/**
-	 * Create a new controller instance.
-	 *
-	 * @return void
-	 */
-	public function __construct()
-	{
-		$this->middleware('auth');
-	}
+    /**
+     * Create a new controller instance.
+     */
+    public function __construct()
+    {
+        $this->middleware('auth');
+    }
 
-	/**
-	 * Show the application dashboard to the user.
-	 *
-	 * @return Response
-	 */
-	public function index()
-	{
-		return view('home');
-	}
-
+    /**
+     * Show the application dashboard to the user.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        return view('home');
+    }
 }
--- a/server/src/app/Http/Controllers/WelcomeController.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Controllers/WelcomeController.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,36 +1,35 @@
-<?php namespace App\Http\Controllers;
+<?php
 
-class WelcomeController extends Controller {
+namespace CorpusParole\Http\Controllers;
 
-	/*
-	|--------------------------------------------------------------------------
-	| Welcome Controller
-	|--------------------------------------------------------------------------
-	|
-	| This controller renders the "marketing page" for the application and
-	| is configured to only allow guests. Like most of the other sample
-	| controllers, you are free to modify or remove it as you desire.
-	|
-	*/
+class WelcomeController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Welcome Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller renders the "marketing page" for the application and
+    | is configured to only allow guests. Like most of the other sample
+    | controllers, you are free to modify or remove it as you desire.
+    |
+    */
 
-	/**
-	 * Create a new controller instance.
-	 *
-	 * @return void
-	 */
-	public function __construct()
-	{
-		$this->middleware('guest');
-	}
+    /**
+     * Create a new controller instance.
+     */
+    public function __construct()
+    {
+        $this->middleware('guest');
+    }
 
-	/**
-	 * Show the application welcome screen to the user.
-	 *
-	 * @return Response
-	 */
-	public function index()
-	{
-		return view('welcome');
-	}
-
+    /**
+     * Show the application welcome screen to the user.
+     *
+     * @return Response
+     */
+    public function index()
+    {
+        return view('welcome');
+    }
 }
--- a/server/src/app/Http/Kernel.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Kernel.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,32 +1,33 @@
-<?php namespace App\Http;
+<?php
+
+namespace CorpusParole\Http;
 
 use Illuminate\Foundation\Http\Kernel as HttpKernel;
 
-class Kernel extends HttpKernel {
+class Kernel extends HttpKernel
+{
+    /**
+     * The application's global HTTP middleware stack.
+     *
+     * @var array
+     */
+    protected $middleware = [
+        'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
+        'Illuminate\Cookie\Middleware\EncryptCookies',
+        'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
+        'Illuminate\Session\Middleware\StartSession',
+        'Illuminate\View\Middleware\ShareErrorsFromSession',
+        'CorpusParole\Http\Middleware\VerifyCsrfToken',
+    ];
 
-	/**
-	 * The application's global HTTP middleware stack.
-	 *
-	 * @var array
-	 */
-	protected $middleware = [
-		'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
-		'Illuminate\Cookie\Middleware\EncryptCookies',
-		'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
-		'Illuminate\Session\Middleware\StartSession',
-		'Illuminate\View\Middleware\ShareErrorsFromSession',
-		'App\Http\Middleware\VerifyCsrfToken',
-	];
-
-	/**
-	 * The application's route middleware.
-	 *
-	 * @var array
-	 */
-	protected $routeMiddleware = [
-		'auth' => 'App\Http\Middleware\Authenticate',
-		'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
-		'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
-	];
-
+    /**
+     * The application's route middleware.
+     *
+     * @var array
+     */
+    protected $routeMiddleware = [
+        'auth' => 'CorpusParole\Http\Middleware\Authenticate',
+        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
+        'guest' => 'CorpusParole\Http\Middleware\RedirectIfAuthenticated',
+    ];
 }
--- a/server/src/app/Http/Middleware/Authenticate.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Middleware/Authenticate.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,50 +1,47 @@
-<?php namespace App\Http\Middleware;
+<?php
+
+namespace CorpusParole\Http\Middleware;
 
 use Closure;
 use Illuminate\Contracts\Auth\Guard;
 
-class Authenticate {
-
-	/**
-	 * The Guard implementation.
-	 *
-	 * @var Guard
-	 */
-	protected $auth;
+class Authenticate
+{
+    /**
+     * The Guard implementation.
+     *
+     * @var Guard
+     */
+    protected $auth;
 
-	/**
-	 * Create a new filter instance.
-	 *
-	 * @param  Guard  $auth
-	 * @return void
-	 */
-	public function __construct(Guard $auth)
-	{
-		$this->auth = $auth;
-	}
+    /**
+     * Create a new filter instance.
+     *
+     * @param Guard $auth
+     */
+    public function __construct(Guard $auth)
+    {
+        $this->auth = $auth;
+    }
 
-	/**
-	 * Handle an incoming request.
-	 *
-	 * @param  \Illuminate\Http\Request  $request
-	 * @param  \Closure  $next
-	 * @return mixed
-	 */
-	public function handle($request, Closure $next)
-	{
-		if ($this->auth->guest())
-		{
-			if ($request->ajax())
-			{
-				return response('Unauthorized.', 401);
-			}
-			else
-			{
-				return redirect()->guest('auth/login');
-			}
-		}
+    /**
+     * Handle an incoming request.
+     *
+     * @param \Illuminate\Http\Request $request
+     * @param \Closure                 $next
+     *
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        if ($this->auth->guest()) {
+            if ($request->ajax()) {
+                return response('Unauthorized.', 401);
+            } else {
+                return redirect()->guest('auth/login');
+            }
+        }
 
-		return $next($request);
-	}
-
+        return $next($request);
+    }
 }
--- a/server/src/app/Http/Middleware/RedirectIfAuthenticated.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Middleware/RedirectIfAuthenticated.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,44 +1,44 @@
-<?php namespace App\Http\Middleware;
+<?php
+
+namespace CorpusParole\Http\Middleware;
 
 use Closure;
 use Illuminate\Contracts\Auth\Guard;
 use Illuminate\Http\RedirectResponse;
 
-class RedirectIfAuthenticated {
-
-	/**
-	 * The Guard implementation.
-	 *
-	 * @var Guard
-	 */
-	protected $auth;
+class RedirectIfAuthenticated
+{
+    /**
+     * The Guard implementation.
+     *
+     * @var Guard
+     */
+    protected $auth;
 
-	/**
-	 * Create a new filter instance.
-	 *
-	 * @param  Guard  $auth
-	 * @return void
-	 */
-	public function __construct(Guard $auth)
-	{
-		$this->auth = $auth;
-	}
+    /**
+     * Create a new filter instance.
+     *
+     * @param Guard $auth
+     */
+    public function __construct(Guard $auth)
+    {
+        $this->auth = $auth;
+    }
 
-	/**
-	 * Handle an incoming request.
-	 *
-	 * @param  \Illuminate\Http\Request  $request
-	 * @param  \Closure  $next
-	 * @return mixed
-	 */
-	public function handle($request, Closure $next)
-	{
-		if ($this->auth->check())
-		{
-			return new RedirectResponse(url('/home'));
-		}
+    /**
+     * Handle an incoming request.
+     *
+     * @param \Illuminate\Http\Request $request
+     * @param \Closure                 $next
+     *
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        if ($this->auth->check()) {
+            return new RedirectResponse(url('/home'));
+        }
 
-		return $next($request);
-	}
-
+        return $next($request);
+    }
 }
--- a/server/src/app/Http/Middleware/VerifyCsrfToken.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Middleware/VerifyCsrfToken.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,20 +1,22 @@
-<?php namespace App\Http\Middleware;
+<?php
+
+namespace CorpusParole\Http\Middleware;
 
 use Closure;
 use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
 
-class VerifyCsrfToken extends BaseVerifier {
-
-	/**
-	 * Handle an incoming request.
-	 *
-	 * @param  \Illuminate\Http\Request  $request
-	 * @param  \Closure  $next
-	 * @return mixed
-	 */
-	public function handle($request, Closure $next)
-	{
-		return parent::handle($request, $next);
-	}
-
+class VerifyCsrfToken extends BaseVerifier
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param \Illuminate\Http\Request $request
+     * @param \Closure                 $next
+     *
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        return parent::handle($request, $next);
+    }
 }
--- a/server/src/app/Http/Requests/Request.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/Requests/Request.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,9 +1,10 @@
-<?php namespace App\Http\Requests;
+<?php
+
+namespace CorpusParole\Http\Requests;
 
 use Illuminate\Foundation\Http\FormRequest;
 
-abstract class Request extends FormRequest {
-
-	//
-
+abstract class Request extends FormRequest
+{
+    //
 }
--- a/server/src/app/Http/routes.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Http/routes.php	Tue Jun 23 17:01:39 2015 +0200
@@ -15,7 +15,9 @@
 
 Route::get('home', 'HomeController@index');
 
+Route::resource('bo/docs', 'Bo\DocumentListController');
+
 Route::controllers([
-	'auth' => 'Auth\AuthController',
-	'password' => 'Auth\PasswordController',
+    'auth' => 'Auth\AuthController',
+    'password' => 'Auth\PasswordController',
 ]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Libraries/Utils.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,49 @@
+<?php
+
+namespace CorpusParole\Libraries;
+
+/**
+ * Utilities functions
+ */
+class Utils {
+
+    /*
+     * From http://www.thecave.info/php-get-mime-type-from-file-extension/
+     */
+    public static function get_mimetype($file) {
+
+        // our list of mime types
+        $mime_types = array(
+                "pdf"=>"application/pdf",
+                "exe"=>"application/octet-stream",
+                "zip"=>"application/zip",
+                "docx"=>"application/msword",
+                "doc"=>"application/msword",
+                "xls"=>"application/vnd.ms-excel",
+                "ppt"=>"application/vnd.ms-powerpoint",
+                "gif"=>"image/gif",
+                "png"=>"image/png",
+                "jpeg"=>"image/jpg",
+                "jpg"=>"image/jpg",
+                "mp3"=>"audio/mpeg",
+                "wav"=>"audio/x-wav",
+                "mpeg"=>"video/mpeg",
+                "mpg"=>"video/mpeg",
+                "mpe"=>"video/mpeg",
+                "mov"=>"video/quicktime",
+                "avi"=>"video/x-msvideo",
+                "3gp"=>"video/3gpp",
+                "css"=>"text/css",
+                "jsc"=>"application/javascript",
+                "js"=>"application/javascript",
+                "php"=>"text/html",
+                "htm"=>"text/html",
+                "html"=>"text/html"
+        );
+
+        $split_ext = explode('.',$file);
+        $extension = strtolower(end($split_ext));
+
+        return $mime_types[$extension];
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Models/Document.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,92 @@
+<?php
+namespace CorpusParole\Models;
+
+use Config;
+use CorpusParole\Libraries\Utils;
+use Log;
+
+/**
+ * Model class for Document. Inherit from EasyRdf_Resource
+ */
+class Document extends \EasyRdf_Resource {
+
+    public function __construct($uri, $graph = null) {
+        parent::__construct($uri, $graph);
+        $this->innerDocument = $this->getResource('foaf:primaryTopic');
+    }
+
+    private $id = null;
+    private $innerDocument = null;
+
+    public function getId() {
+        if(is_null($this->id)) {
+            $this->id = substr($this->uri, strlen(Config::get('corpusparole.cocoon_doc_id_base_uri')));
+        }
+        return $this->id;
+    }
+
+    public function getTitle() {
+        return $this->innerDocument->getLiteral('dc11:title');
+    }
+
+    public function getPublishers() {
+        return $this->innerDocument->allLiterals('dc11:publisher');
+    }
+
+    public function getMediaArray() {
+
+        //TODO: add media type
+        $res = [];
+        $formats = $this->innerDocument->allResources("dc:isFormatOf");
+        foreach ($formats as $f) {
+            $uri = $f->getUri();
+            $mimetype = Utils::get_mimetype($uri);
+            array_push($res, ["url" => $uri, "format" => $mimetype]);
+        }
+        array_push($res, ["url" => $this->innerDocument->getUri(), "format" => $this->innerDocument->getLiteral('dc11:format')]);
+        return $res;
+    }
+
+    public function getTypes() {
+        return $this->innerDocument->all('dc11:type');
+    }
+
+    public function getDiscourseTypes() {
+        return array_values(array_filter($this->getTypes(), function($v) {
+            return $v instanceof \EasyRdf_Literal && $v->getDatatypeUri() === Config::get('constants.OLAC_DISCOURSE_TYPE')['uri'];
+        }));
+    }
+
+    public function getOtherTypes() {
+        $res = array_values(array_filter($this->getTypes(), function($v) {
+            return $v instanceof \EasyRdf_Resource || $v->getDatatypeUri() !== Config::get('constants.OLAC_DISCOURSE_TYPE')['uri'];
+        }));
+        return $res;
+    }
+
+    public function updateDiscourseTypes(array $discoursesTypes) {
+        foreach($this->getDiscourseTypes() as $discourseType) {
+            $this->innerDocument->delete('dc11:type', $discourseType);
+        }
+        // re-add them
+
+        foreach($discoursesTypes as $dType) {
+            $this->innerDocument->add('dc11:type', new \EasyRdf_Literal($dType, null, Config::get('constants.OLAC_DISCOURSE_TYPE')['uri']));
+        }
+    }
+
+    public function isIsomorphic($doc) {
+        return \EasyRdf_Isomorphic::isomorphic($this->graph, $doc->graph);
+    }
+
+    /*
+     * Clone document.
+     * clone also the innerDocumenent
+     */
+    public function __clone() {
+
+        $this->graph = new \EasyRdf_Graph($this->graph->getUri(), $this->graph->toRdfPhp());
+        $this->innerDocument = $this->getResource('foaf:primaryTopic');
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Models/User.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,35 @@
+<?php
+
+namespace CorpusParole\Models;
+
+use Illuminate\Auth\Authenticatable;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Auth\Passwords\CanResetPassword;
+use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
+use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
+
+class User extends Model implements AuthenticatableContract, CanResetPasswordContract
+{
+    use Authenticatable, CanResetPassword;
+
+    /**
+     * The database table used by the model.
+     *
+     * @var string
+     */
+    protected $table = 'users';
+
+    /**
+     * The attributes that are mass assignable.
+     *
+     * @var array
+     */
+    protected $fillable = ['name', 'email', 'password'];
+
+    /**
+     * The attributes excluded from the model's JSON form.
+     *
+     * @var array
+     */
+    protected $hidden = ['password', 'remember_token'];
+}
--- a/server/src/app/Providers/AppServiceProvider.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Providers/AppServiceProvider.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,34 +1,31 @@
-<?php namespace App\Providers;
+<?php
+
+namespace CorpusParole\Providers;
 
 use Illuminate\Support\ServiceProvider;
 
-class AppServiceProvider extends ServiceProvider {
-
-	/**
-	 * Bootstrap any application services.
-	 *
-	 * @return void
-	 */
-	public function boot()
-	{
-		//
-	}
+class AppServiceProvider extends ServiceProvider
+{
+    /**
+     * Bootstrap any application services.
+     */
+    public function boot()
+    {
+        //
+    }
 
-	/**
-	 * Register any application services.
-	 *
-	 * This service provider is a great spot to register your various container
-	 * bindings with the application. As you can see, we are registering our
-	 * "Registrar" implementation here. You can add your own bindings too!
-	 *
-	 * @return void
-	 */
-	public function register()
-	{
-		$this->app->bind(
-			'Illuminate\Contracts\Auth\Registrar',
-			'App\Services\Registrar'
-		);
-	}
-
+    /**
+     * Register any application services.
+     *
+     * This service provider is a great spot to register your various container
+     * bindings with the application. As you can see, we are registering our
+     * "Registrar" implementation here. You can add your own bindings too!
+     */
+    public function register()
+    {
+        $this->app->bind(
+            'Illuminate\Contracts\Auth\Registrar',
+            'CorpusParole\Services\Registrar'
+        );
+    }
 }
--- a/server/src/app/Providers/BusServiceProvider.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Providers/BusServiceProvider.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,34 +1,31 @@
-<?php namespace App\Providers;
+<?php
+
+namespace CorpusParole\Providers;
 
 use Illuminate\Bus\Dispatcher;
 use Illuminate\Support\ServiceProvider;
 
-class BusServiceProvider extends ServiceProvider {
+class BusServiceProvider extends ServiceProvider
+{
+    /**
+     * Bootstrap any application services.
+     *
+     * @param \Illuminate\Bus\Dispatcher $dispatcher
+     */
+    public function boot(Dispatcher $dispatcher)
+    {
+        $dispatcher->mapUsing(function ($command) {
+            return Dispatcher::simpleMapping(
+                $command, 'CorpusParole\Commands', 'CorpusParole\Handlers\Commands'
+            );
+        });
+    }
 
-	/**
-	 * Bootstrap any application services.
-	 *
-	 * @param  \Illuminate\Bus\Dispatcher  $dispatcher
-	 * @return void
-	 */
-	public function boot(Dispatcher $dispatcher)
-	{
-		$dispatcher->mapUsing(function($command)
-		{
-			return Dispatcher::simpleMapping(
-				$command, 'App\Commands', 'App\Handlers\Commands'
-			);
-		});
-	}
-
-	/**
-	 * Register any application services.
-	 *
-	 * @return void
-	 */
-	public function register()
-	{
-		//
-	}
-
+    /**
+     * Register any application services.
+     */
+    public function register()
+    {
+        //
+    }
 }
--- a/server/src/app/Providers/ConfigServiceProvider.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Providers/ConfigServiceProvider.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,23 +1,22 @@
-<?php namespace App\Providers;
+<?php
+
+namespace CorpusParole\Providers;
 
 use Illuminate\Support\ServiceProvider;
 
-class ConfigServiceProvider extends ServiceProvider {
-
-	/**
-	 * Overwrite any vendor / package configuration.
-	 *
-	 * This service provider is intended to provide a convenient location for you
-	 * to overwrite any "vendor" or package configuration that you may want to
-	 * modify before the application handles the incoming request / command.
-	 *
-	 * @return void
-	 */
-	public function register()
-	{
-		config([
-			//
-		]);
-	}
-
+class ConfigServiceProvider extends ServiceProvider
+{
+    /**
+     * Overwrite any vendor / package configuration.
+     *
+     * This service provider is intended to provide a convenient location for you
+     * to overwrite any "vendor" or package configuration that you may want to
+     * modify before the application handles the incoming request / command.
+     */
+    public function register()
+    {
+        config([
+            //
+        ]);
+    }
 }
--- a/server/src/app/Providers/EventServiceProvider.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Providers/EventServiceProvider.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,32 +1,32 @@
-<?php namespace App\Providers;
+<?php
+
+namespace CorpusParole\Providers;
 
 use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
 use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
 
-class EventServiceProvider extends ServiceProvider {
-
-	/**
-	 * The event handler mappings for the application.
-	 *
-	 * @var array
-	 */
-	protected $listen = [
-		'event.name' => [
-			'EventListener',
-		],
-	];
+class EventServiceProvider extends ServiceProvider
+{
+    /**
+     * The event handler mappings for the application.
+     *
+     * @var array
+     */
+    protected $listen = [
+        'event.name' => [
+            'EventListener',
+        ],
+    ];
 
-	/**
-	 * Register any other events for your application.
-	 *
-	 * @param  \Illuminate\Contracts\Events\Dispatcher  $events
-	 * @return void
-	 */
-	public function boot(DispatcherContract $events)
-	{
-		parent::boot($events);
+    /**
+     * Register any other events for your application.
+     *
+     * @param \Illuminate\Contracts\Events\Dispatcher $events
+     */
+    public function boot(DispatcherContract $events)
+    {
+        parent::boot($events);
 
-		//
-	}
-
+        //
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Providers/RepositoryServiceProvider.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,17 @@
+<?php
+namespace CorpusParole\Providers;
+
+use Illuminate\Support\ServiceProvider;
+
+/**
+ * Service provider charged to bind repository interfaces to implementations
+ */
+class RepositoryServiceProvider extends ServiceProvider {
+
+    public function register() {
+        $this->app->bind(
+            'CorpusParole\Repositories\DocumentRepository',
+            'CorpusParole\Repositories\RdfDocumentRepository'
+        );
+    }
+}
--- a/server/src/app/Providers/RouteServiceProvider.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/app/Providers/RouteServiceProvider.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,44 +1,42 @@
-<?php namespace App\Providers;
+<?php
+
+namespace CorpusParole\Providers;
 
 use Illuminate\Routing\Router;
 use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
 
-class RouteServiceProvider extends ServiceProvider {
-
-	/**
-	 * This namespace is applied to the controller routes in your routes file.
-	 *
-	 * In addition, it is set as the URL generator's root namespace.
-	 *
-	 * @var string
-	 */
-	protected $namespace = 'App\Http\Controllers';
+class RouteServiceProvider extends ServiceProvider
+{
+    /**
+     * This namespace is applied to the controller routes in your routes file.
+     *
+     * In addition, it is set as the URL generator's root namespace.
+     *
+     * @var string
+     */
+    protected $namespace = 'CorpusParole\Http\Controllers';
 
-	/**
-	 * Define your route model bindings, pattern filters, etc.
-	 *
-	 * @param  \Illuminate\Routing\Router  $router
-	 * @return void
-	 */
-	public function boot(Router $router)
-	{
-		parent::boot($router);
+    /**
+     * Define your route model bindings, pattern filters, etc.
+     *
+     * @param \Illuminate\Routing\Router $router
+     */
+    public function boot(Router $router)
+    {
+        parent::boot($router);
 
-		//
-	}
+        //
+    }
 
-	/**
-	 * Define the routes for the application.
-	 *
-	 * @param  \Illuminate\Routing\Router  $router
-	 * @return void
-	 */
-	public function map(Router $router)
-	{
-		$router->group(['namespace' => $this->namespace], function($router)
-		{
-			require app_path('Http/routes.php');
-		});
-	}
-
+    /**
+     * Define the routes for the application.
+     *
+     * @param \Illuminate\Routing\Router $router
+     */
+    public function map(Router $router)
+    {
+        $router->group(['namespace' => $this->namespace], function ($router) {
+            require app_path('Http/routes.php');
+        });
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Repositories/DocumentRepository.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,10 @@
+<?php
+
+namespace CorpusParole\Repositories;
+
+interface DocumentRepository {
+    
+    public function all();
+
+    public function get($id);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Repositories/RdfDocumentRepository.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,64 @@
+<?php
+
+namespace CorpusParole\Repositories;
+
+use Config;
+use Log;
+use CorpusParole\Models\Document;
+
+/**
+ * Implement the DocumentRepository using EasyRdf
+ */
+class RdfDocumentRepository implements DocumentRepository {
+
+    private $sparqlClient;
+
+    function __construct() {
+        $this->sparqlClient = new \EasyRdf_Sparql_Client(Config::get('corpusparole.sesame_query_url'));
+    }
+
+    public function all() {
+
+        $docs = $this->sparqlClient->query(
+            'SELECT * WHERE {'.
+            '    ?uri <http://xmlns.com/foaf/0.1/primaryTopic> ?b;'.
+            '} ORDER BY ?uri'
+        );
+
+        $data = [];
+
+        foreach ($docs as $doc) {
+            array_push($data, new Document($doc->uri->getUri()));
+        }
+
+        return $data;
+    }
+
+    public function get($id) {
+
+        $doc_uri = Config::get('corpusparole.cocoon_doc_id_base_uri').$id;
+
+        //$doc = $sparql->query(
+        //	"CONSTRUCT {".
+        //	"    ?doc ?p ?v.".
+        //	"}".
+        //	"WHERE {".
+        //	"    <$doc_uri> <http://xmlns.com/foaf/0.1/primaryTopic> ?doc.".
+        //	"    ?doc ?p ?v;".
+        //	"}"
+        //);
+
+        // We want the CBD (Concise Bounded Description, cf. http://www.w3.org/Submission/CBD/)
+        // WARNING: This seems to work in sesame for our dataset.
+        $doc = $this->sparqlClient->query(
+            'DESCRIBE ?doc '.
+            'WHERE {'.
+            "    <$doc_uri> <http://xmlns.com/foaf/0.1/primaryTopic> ?doc;".
+            '}'
+        );
+
+        return new Document($doc_uri, $doc);
+
+    }
+
+}
--- a/server/src/app/Services/Registrar.php	Mon Jun 15 19:30:32 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<?php namespace App\Services;
-
-use App\User;
-use Validator;
-use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
-
-class Registrar implements RegistrarContract {
-
-	/**
-	 * Get a validator for an incoming registration request.
-	 *
-	 * @param  array  $data
-	 * @return \Illuminate\Contracts\Validation\Validator
-	 */
-	public function validator(array $data)
-	{
-		return Validator::make($data, [
-			'name' => 'required|max:255',
-			'email' => 'required|email|max:255|unique:users',
-			'password' => 'required|confirmed|min:6',
-		]);
-	}
-
-	/**
-	 * Create a new user instance after a valid registration.
-	 *
-	 * @param  array  $data
-	 * @return User
-	 */
-	public function create(array $data)
-	{
-		return User::create([
-			'name' => $data['name'],
-			'email' => $data['email'],
-			'password' => bcrypt($data['password']),
-		]);
-	}
-
-}
--- a/server/src/app/User.php	Mon Jun 15 19:30:32 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-<?php namespace App;
-
-use Illuminate\Auth\Authenticatable;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Auth\Passwords\CanResetPassword;
-use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
-use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
-
-class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
-
-	use Authenticatable, CanResetPassword;
-
-	/**
-	 * The database table used by the model.
-	 *
-	 * @var string
-	 */
-	protected $table = 'users';
-
-	/**
-	 * The attributes that are mass assignable.
-	 *
-	 * @var array
-	 */
-	protected $fillable = ['name', 'email', 'password'];
-
-	/**
-	 * The attributes excluded from the model's JSON form.
-	 *
-	 * @var array
-	 */
-	protected $hidden = ['password', 'remember_token'];
-
-}
--- a/server/src/bootstrap/app.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/bootstrap/app.php	Tue Jun 23 17:01:39 2015 +0200
@@ -28,17 +28,17 @@
 
 $app->singleton(
 	'Illuminate\Contracts\Http\Kernel',
-	'App\Http\Kernel'
+	'CorpusParole\Http\Kernel'
 );
 
 $app->singleton(
 	'Illuminate\Contracts\Console\Kernel',
-	'App\Console\Kernel'
+	'CorpusParole\Console\Kernel'
 );
 
 $app->singleton(
 	'Illuminate\Contracts\Debug\ExceptionHandler',
-	'App\Exceptions\Handler'
+	'CorpusParole\Exceptions\Handler'
 );
 
 /*
--- a/server/src/bootstrap/autoload.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/bootstrap/autoload.php	Tue Jun 23 17:01:39 2015 +0200
@@ -27,7 +27,7 @@
 |
 */
 
-$compiledPath = __DIR__.'/../vendor/compiled.php';
+$compiledPath = __DIR__.'/cache/compiled.php';
 
 if (file_exists($compiledPath))
 {
--- a/server/src/composer.json	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/composer.json	Tue Jun 23 17:01:39 2015 +0200
@@ -5,20 +5,25 @@
 	"license": "MIT",
 	"type": "project",
 	"require": {
-		"laravel/framework": "5.0.*",
+		"laravel/framework": "5.1.*",
 		"easyrdf/easyrdf": "*",
-		"ml/json-ld": "*"
+		"ml/json-ld": "*",
+		"caseyamcl/phpoaipmh": "~2.4",
+		"guzzlehttp/guzzle":   "~6.0",
+		"laravelcollective/html": "5.1.*"
 	},
 	"require-dev": {
 		"phpunit/phpunit": "~4.0",
-		"phpspec/phpspec": "~2.1"
+		"phpspec/phpspec": "~2.1",
+		"fabpot/php-cs-fixer": "^1.9",
+		"mockery/mockery": "dev-master"
 	},
 	"autoload": {
 		"classmap": [
 			"database"
 		],
 		"psr-4": {
-			"App\\": "app/"
+			"CorpusParole\\": "app/"
 		}
 	},
 	"autoload-dev": {
--- a/server/src/composer.lock	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/composer.lock	Tue Jun 23 17:01:39 2015 +0200
@@ -4,9 +4,68 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "b73a574d7aa6eda1874a7ffe8b72dbf1",
+    "hash": "3548116cfb0402c4629216e7c27d4465",
     "packages": [
         {
+            "name": "caseyamcl/phpoaipmh",
+            "version": "v2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/caseyamcl/phpoaipmh.git",
+                "reference": "8a8a10e34e6d6b7f30849617aa7100b52331d0ef"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/caseyamcl/phpoaipmh/zipball/8a8a10e34e6d6b7f30849617aa7100b52331d0ef",
+                "reference": "8a8a10e34e6d6b7f30849617aa7100b52331d0ef",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "guzzlehttp/guzzle": "~5.0",
+                "mockery/mockery": "~0.9",
+                "phpunit/phpunit": "~4.0",
+                "symfony/config": "~2.5",
+                "symfony/console": "~2.5",
+                "symfony/dependency-injection": "~2.5",
+                "symfony/yaml": "~2.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Phpoaipmh": [
+                        "src/",
+                        "tests"
+                    ]
+                },
+                "psr-4": {
+                    "Phpoaipmh\\Example\\": "example/src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Casey McLaughlin",
+                    "email": "caseyamcl@gmail.com",
+                    "homepage": "http://caseymclaughlin.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A PHP OAI-PMH 2.0 Harvester library",
+            "homepage": "https://github.com/caseyamcl/phpoaipmh",
+            "keywords": [
+                "Harvester",
+                "OAI",
+                "OAI-PMH"
+            ],
+            "time": "2015-05-18 14:40:02"
+        },
+        {
             "name": "classpreloader/classpreloader",
             "version": "1.4.0",
             "source": {
@@ -285,26 +344,99 @@
             "time": "2015-02-27 09:45:49"
         },
         {
-            "name": "ircmaxell/password-compat",
-            "version": "v1.0.4",
+            "name": "guzzlehttp/guzzle",
+            "version": "6.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ircmaxell/password_compat.git",
-                "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "f992b7b487a816c957d317442bed4966409873e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c",
-                "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f992b7b487a816c957d317442bed4966409873e0",
+                "reference": "f992b7b487a816c957d317442bed4966409873e0",
                 "shasum": ""
             },
+            "require": {
+                "guzzlehttp/promises": "^1.0.0",
+                "guzzlehttp/psr7": "^1.0.0",
+                "php": ">=5.5.0"
+            },
             "require-dev": {
-                "phpunit/phpunit": "4.*"
+                "ext-curl": "*",
+                "phpunit/phpunit": "^4.0",
+                "psr/log": "^1.0"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.0-dev"
+                }
+            },
             "autoload": {
                 "files": [
-                    "lib/password.php"
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "time": "2015-05-27 16:57:51"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "01abc3232138f330d8a1eaa808fcbdf9b4292f47"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/01abc3232138f330d8a1eaa808fcbdf9b4292f47",
+                "reference": "01abc3232138f330d8a1eaa808fcbdf9b4292f47",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -313,18 +445,74 @@
             ],
             "authors": [
                 {
-                    "name": "Anthony Ferrara",
-                    "email": "ircmaxell@php.net",
-                    "homepage": "http://blog.ircmaxell.com"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
                 }
             ],
-            "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
-            "homepage": "https://github.com/ircmaxell/password_compat",
+            "description": "Guzzle promises library",
             "keywords": [
-                "hashing",
-                "password"
+                "promise"
             ],
-            "time": "2014-11-20 16:49:30"
+            "time": "2015-05-13 05:05:10"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "19e510056d8d671d9d9e25dc16937b3dd3802ae6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/19e510056d8d671d9d9e25dc16937b3dd3802ae6",
+                "reference": "19e510056d8d671d9d9e25dc16937b3dd3802ae6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/http-message": "^1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "PSR-7 message implementation",
+            "keywords": [
+                "http",
+                "message",
+                "stream",
+                "uri"
+            ],
+            "time": "2015-05-19 17:58:45"
         },
         {
             "name": "jakub-onderka/php-console-color",
@@ -371,16 +559,16 @@
         },
         {
             "name": "jakub-onderka/php-console-highlighter",
-            "version": "v0.3.1",
+            "version": "v0.3.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
-                "reference": "05bce997da20acf873e6bf396276798f3cd2c76a"
+                "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/05bce997da20acf873e6bf396276798f3cd2c76a",
-                "reference": "05bce997da20acf873e6bf396276798f3cd2c76a",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+                "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
                 "shasum": ""
             },
             "require": {
@@ -390,6 +578,7 @@
             "require-dev": {
                 "jakub-onderka/php-code-style": "~1.0",
                 "jakub-onderka/php-parallel-lint": "~0.5",
+                "jakub-onderka/php-var-dump-check": "~0.1",
                 "phpunit/phpunit": "~4.0",
                 "squizlabs/php_codesniffer": "~1.5"
             },
@@ -410,7 +599,7 @@
                     "homepage": "http://www.acci.cz/"
                 }
             ],
-            "time": "2014-07-14 20:59:35"
+            "time": "2015-04-20 18:58:01"
         },
         {
             "name": "jeremeamia/SuperClosure",
@@ -472,16 +661,16 @@
         },
         {
             "name": "laravel/framework",
-            "version": "v5.0.33",
+            "version": "v5.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "b11c8ab88245f920b30e5f30e16b141ac8d461d3"
+                "reference": "65a3a4ca4b20083517a9e2effa6a86a49f3e9c96"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/b11c8ab88245f920b30e5f30e16b141ac8d461d3",
-                "reference": "b11c8ab88245f920b30e5f30e16b141ac8d461d3",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/65a3a4ca4b20083517a9e2effa6a86a49f3e9c96",
+                "reference": "65a3a4ca4b20083517a9e2effa6a86a49f3e9c96",
                 "shasum": ""
             },
             "require": {
@@ -489,31 +678,31 @@
                 "danielstjules/stringy": "~1.8",
                 "doctrine/inflector": "~1.0",
                 "ext-mbstring": "*",
-                "ext-mcrypt": "*",
                 "ext-openssl": "*",
-                "ircmaxell/password-compat": "~1.0",
                 "jeremeamia/superclosure": "~2.0",
                 "league/flysystem": "~1.0",
                 "monolog/monolog": "~1.11",
                 "mtdowling/cron-expression": "~1.0",
-                "nesbot/carbon": "~1.0",
-                "php": ">=5.4.0",
+                "nesbot/carbon": "~1.19",
+                "php": ">=5.5.9",
                 "psy/psysh": "0.4.*",
                 "swiftmailer/swiftmailer": "~5.1",
-                "symfony/console": "2.6.*",
-                "symfony/debug": "2.6.*",
-                "symfony/finder": "2.6.*",
-                "symfony/http-foundation": "2.6.*",
-                "symfony/http-kernel": "2.6.*",
-                "symfony/process": "2.6.*",
-                "symfony/routing": "2.6.*",
-                "symfony/security-core": "2.6.*",
-                "symfony/translation": "2.6.*",
-                "symfony/var-dumper": "2.6.*",
+                "symfony/console": "2.7.*",
+                "symfony/css-selector": "2.7.*",
+                "symfony/debug": "2.7.*",
+                "symfony/dom-crawler": "2.7.*",
+                "symfony/finder": "2.7.*",
+                "symfony/http-foundation": "2.7.*",
+                "symfony/http-kernel": "2.7.*",
+                "symfony/process": "2.7.*",
+                "symfony/routing": "2.7.*",
+                "symfony/translation": "2.7.*",
+                "symfony/var-dumper": "2.7.*",
                 "vlucas/phpdotenv": "~1.0"
             },
             "replace": {
                 "illuminate/auth": "self.version",
+                "illuminate/broadcasting": "self.version",
                 "illuminate/bus": "self.version",
                 "illuminate/cache": "self.version",
                 "illuminate/config": "self.version",
@@ -543,27 +732,29 @@
                 "illuminate/view": "self.version"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "~2.4",
-                "iron-io/iron_mq": "~1.5",
-                "mockery/mockery": "~0.9",
+                "aws/aws-sdk-php": "~3.0",
+                "iron-io/iron_mq": "~2.0",
+                "mockery/mockery": "~0.9.1",
                 "pda/pheanstalk": "~3.0",
                 "phpunit/phpunit": "~4.0",
                 "predis/predis": "~1.0"
             },
             "suggest": {
-                "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~2.4).",
+                "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).",
                 "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).",
-                "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (~5.0).",
-                "iron-io/iron_mq": "Required to use the iron queue driver (~1.5).",
-                "league/flysystem-aws-s3-v2": "Required to use the Flysystem S3 driver (~1.0).",
+                "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
+                "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (~5.3|~6.0).",
+                "iron-io/iron_mq": "Required to use the iron queue driver (~2.0).",
+                "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
                 "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
                 "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
-                "predis/predis": "Required to use the redis cache and queue drivers (~1.0)."
+                "predis/predis": "Required to use the redis cache and queue drivers (~1.0).",
+                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0)."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-master": "5.1-dev"
                 }
             },
             "autoload": {
@@ -594,7 +785,57 @@
                 "framework",
                 "laravel"
             ],
-            "time": "2015-06-09 13:12:19"
+            "time": "2015-06-15 18:25:50"
+        },
+        {
+            "name": "laravelcollective/html",
+            "version": "v5.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/LaravelCollective/html.git",
+                "reference": "0918dac79ff8d294a92048f2d8b3c0c3078139b0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/LaravelCollective/html/zipball/0918dac79ff8d294a92048f2d8b3c0c3078139b0",
+                "reference": "0918dac79ff8d294a92048f2d8b3c0c3078139b0",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/http": "5.1.*",
+                "illuminate/routing": "5.1.*",
+                "illuminate/session": "5.1.*",
+                "illuminate/support": "5.1.*",
+                "php": ">=5.5.9"
+            },
+            "require-dev": {
+                "mockery/mockery": "~0.9",
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Collective\\Html\\": "src/"
+                },
+                "files": [
+                    "src/helpers.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylorotwell@gmail.com"
+                },
+                {
+                    "name": "Adam Engebretson",
+                    "email": "adam@laravelcollective.com"
+                }
+            ],
+            "time": "2015-06-18 02:16:50"
         },
         {
             "name": "league/flysystem",
@@ -778,16 +1019,16 @@
         },
         {
             "name": "monolog/monolog",
-            "version": "1.13.1",
+            "version": "1.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac"
+                "reference": "b287fbbe1ca27847064beff2bad7fb6920bf08cc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
-                "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b287fbbe1ca27847064beff2bad7fb6920bf08cc",
+                "reference": "b287fbbe1ca27847064beff2bad7fb6920bf08cc",
                 "shasum": ""
             },
             "require": {
@@ -798,12 +1039,14 @@
                 "psr/log-implementation": "1.0.0"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "~2.4, >2.4.8",
+                "aws/aws-sdk-php": "^2.4.9",
                 "doctrine/couchdb": "~1.0@dev",
                 "graylog2/gelf-php": "~1.0",
-                "phpunit/phpunit": "~4.0",
-                "raven/raven": "~0.5",
-                "ruflin/elastica": "0.90.*",
+                "php-console/php-console": "^3.1.3",
+                "phpunit/phpunit": "~4.5",
+                "phpunit/phpunit-mock-objects": "2.3.0",
+                "raven/raven": "~0.8",
+                "ruflin/elastica": ">=0.90 <3.0",
                 "swiftmailer/swiftmailer": "~5.3",
                 "videlalvaro/php-amqplib": "~2.4"
             },
@@ -813,6 +1056,7 @@
                 "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
                 "ext-mongo": "Allow sending log messages to a MongoDB server",
                 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "php-console/php-console": "Allow sending log messages to Google Chrome",
                 "raven/raven": "Allow sending log messages to a Sentry server",
                 "rollbar/rollbar": "Allow sending log messages to Rollbar",
                 "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
@@ -821,7 +1065,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.13.x-dev"
+                    "dev-master": "1.14.x-dev"
                 }
             },
             "autoload": {
@@ -847,7 +1091,7 @@
                 "logging",
                 "psr-3"
             ],
-            "time": "2015-03-09 09:58:04"
+            "time": "2015-06-19 13:29:54"
         },
         {
             "name": "mtdowling/cron-expression",
@@ -986,6 +1230,55 @@
             "time": "2015-05-02 15:40:40"
         },
         {
+            "name": "psr/http-message",
+            "version": "1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+                "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2015-05-04 20:22:00"
+        },
+        {
             "name": "psr/log",
             "version": "1.0.0",
             "source": {
@@ -1149,21 +1442,20 @@
         },
         {
             "name": "symfony/console",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Console",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "b5ec0c11a204718f2b656357f5505a8e578f30dd"
+                "reference": "564398bc1f33faf92fc2ec86859983d30eb81806"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/b5ec0c11a204718f2b656357f5505a8e578f30dd",
-                "reference": "b5ec0c11a204718f2b656357f5505a8e578f30dd",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/564398bc1f33faf92fc2ec86859983d30eb81806",
+                "reference": "564398bc1f33faf92fc2ec86859983d30eb81806",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "psr/log": "~1.0",
@@ -1179,11 +1471,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Console\\": ""
                 }
             },
@@ -1203,25 +1495,77 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-29 14:42:58"
+            "time": "2015-06-10 15:30:22"
+        },
+        {
+            "name": "symfony/css-selector",
+            "version": "v2.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/CssSelector.git",
+                "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
+                "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "require-dev": {
+                "symfony/phpunit-bridge": "~2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\CssSelector\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jean-François Simon",
+                    "email": "jeanfrancois.simon@sensiolabs.com"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony CssSelector Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-05-15 13:33:16"
         },
         {
             "name": "symfony/debug",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Debug",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Debug.git",
-                "reference": "4851a041c48e76b91a221db84ab5850daa6a7b33"
+                "reference": "075070230c5bbc65abde8241191655bbce0716e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Debug/zipball/4851a041c48e76b91a221db84ab5850daa6a7b33",
-                "reference": "4851a041c48e76b91a221db84ab5850daa6a7b33",
+                "url": "https://api.github.com/repos/symfony/Debug/zipball/075070230c5bbc65abde8241191655bbce0716e2",
+                "reference": "075070230c5bbc65abde8241191655bbce0716e2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.9",
                 "psr/log": "~1.0"
             },
             "conflict": {
@@ -1240,11 +1584,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Debug\\": ""
                 }
             },
@@ -1264,7 +1608,60 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-20 13:09:45"
+            "time": "2015-06-08 09:37:21"
+        },
+        {
+            "name": "symfony/dom-crawler",
+            "version": "v2.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/DomCrawler.git",
+                "reference": "11d8eb8ccc1533f4c2d89a025f674894fda520b3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/11d8eb8ccc1533f4c2d89a025f674894fda520b3",
+                "reference": "11d8eb8ccc1533f4c2d89a025f674894fda520b3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "require-dev": {
+                "symfony/css-selector": "~2.3",
+                "symfony/phpunit-bridge": "~2.7"
+            },
+            "suggest": {
+                "symfony/css-selector": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\DomCrawler\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony DomCrawler Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-05-22 14:54:25"
         },
         {
             "name": "symfony/event-dispatcher",
@@ -1375,21 +1772,20 @@
         },
         {
             "name": "symfony/finder",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Finder",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Finder.git",
-                "reference": "ffedd3e0ff8155188155e9322fe21b9ee012ac14"
+                "reference": "c13a40d638aeede1e8400f8c956c7f9246c05f75"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Finder/zipball/ffedd3e0ff8155188155e9322fe21b9ee012ac14",
-                "reference": "ffedd3e0ff8155188155e9322fe21b9ee012ac14",
+                "url": "https://api.github.com/repos/symfony/Finder/zipball/c13a40d638aeede1e8400f8c956c7f9246c05f75",
+                "reference": "c13a40d638aeede1e8400f8c956c7f9246c05f75",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "~2.7"
@@ -1397,11 +1793,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Finder\\": ""
                 }
             },
@@ -1421,25 +1817,24 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-15 13:32:45"
+            "time": "2015-06-04 20:11:48"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/HttpFoundation",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpFoundation.git",
-                "reference": "f9b28dcc6d3e50f5568b42dda7292656a9fe8432"
+                "reference": "4f363c426b0ced57e3d14460022feb63937980ff"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/f9b28dcc6d3e50f5568b42dda7292656a9fe8432",
-                "reference": "f9b28dcc6d3e50f5568b42dda7292656a9fe8432",
+                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/4f363c426b0ced57e3d14460022feb63937980ff",
+                "reference": "4f363c426b0ced57e3d14460022feb63937980ff",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/expression-language": "~2.4",
@@ -1448,15 +1843,15 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\HttpFoundation\\": ""
                 },
                 "classmap": [
-                    "Symfony/Component/HttpFoundation/Resources/stubs"
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1475,34 +1870,36 @@
             ],
             "description": "Symfony HttpFoundation Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-22 14:53:08"
+            "time": "2015-06-10 15:30:22"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/HttpKernel",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/HttpKernel.git",
-                "reference": "7c883eb1a5d8b52b1fa6d4134b82304c6bb7007f"
+                "reference": "208101c7a11e31933183bd2a380486e528c74302"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/7c883eb1a5d8b52b1fa6d4134b82304c6bb7007f",
-                "reference": "7c883eb1a5d8b52b1fa6d4134b82304c6bb7007f",
+                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/208101c7a11e31933183bd2a380486e528c74302",
+                "reference": "208101c7a11e31933183bd2a380486e528c74302",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.9",
                 "psr/log": "~1.0",
                 "symfony/debug": "~2.6,>=2.6.2",
                 "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
                 "symfony/http-foundation": "~2.5,>=2.5.4"
             },
+            "conflict": {
+                "symfony/config": "<2.7"
+            },
             "require-dev": {
                 "symfony/browser-kit": "~2.3",
                 "symfony/class-loader": "~2.1",
-                "symfony/config": "~2.0,>=2.0.5",
+                "symfony/config": "~2.7",
                 "symfony/console": "~2.3",
                 "symfony/css-selector": "~2.0,>=2.0.5",
                 "symfony/dependency-injection": "~2.2",
@@ -1529,11 +1926,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\HttpKernel\\": ""
                 }
             },
@@ -1553,25 +1950,24 @@
             ],
             "description": "Symfony HttpKernel Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-29 22:55:07"
+            "time": "2015-06-11 21:15:28"
         },
         {
             "name": "symfony/process",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Process",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "7856d78ab6cce6e59d02d9e1a873441f6bd21306"
+                "reference": "552d8efdc80980cbcca50b28d626ac8e36e3cdd1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/7856d78ab6cce6e59d02d9e1a873441f6bd21306",
-                "reference": "7856d78ab6cce6e59d02d9e1a873441f6bd21306",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/552d8efdc80980cbcca50b28d626ac8e36e3cdd1",
+                "reference": "552d8efdc80980cbcca50b28d626ac8e36e3cdd1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "~2.7"
@@ -1579,11 +1975,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Process\\": ""
                 }
             },
@@ -1603,31 +1999,33 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-15 13:32:45"
+            "time": "2015-06-08 09:37:21"
         },
         {
             "name": "symfony/routing",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Routing",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Routing.git",
-                "reference": "dc9df18a1cfe87de65e270e8f01407ca6d7c39cb"
+                "reference": "5581be29185b8fb802398904555f70da62f6d50d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Routing/zipball/dc9df18a1cfe87de65e270e8f01407ca6d7c39cb",
-                "reference": "dc9df18a1cfe87de65e270e8f01407ca6d7c39cb",
+                "url": "https://api.github.com/repos/symfony/Routing/zipball/5581be29185b8fb802398904555f70da62f6d50d",
+                "reference": "5581be29185b8fb802398904555f70da62f6d50d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
+            },
+            "conflict": {
+                "symfony/config": "<2.7"
             },
             "require-dev": {
                 "doctrine/annotations": "~1.0",
                 "doctrine/common": "~2.2",
                 "psr/log": "~1.0",
-                "symfony/config": "~2.2",
+                "symfony/config": "~2.7",
                 "symfony/expression-language": "~2.4",
                 "symfony/http-foundation": "~2.3",
                 "symfony/phpunit-bridge": "~2.7",
@@ -1642,11 +2040,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Routing\\": ""
                 }
             },
@@ -1672,93 +2070,31 @@
                 "uri",
                 "url"
             ],
-            "time": "2015-05-15 13:32:45"
+            "time": "2015-06-11 17:20:40"
         },
         {
-            "name": "symfony/security-core",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Security/Core",
+            "name": "symfony/translation",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/security-core.git",
-                "reference": "1ad0ee4b2a1ab32924cd0be397f0196b5d47e5d0"
+                "url": "https://github.com/symfony/Translation.git",
+                "reference": "8349a2b0d11bd0311df9e8914408080912983a0b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-core/zipball/1ad0ee4b2a1ab32924cd0be397f0196b5d47e5d0",
-                "reference": "1ad0ee4b2a1ab32924cd0be397f0196b5d47e5d0",
+                "url": "https://api.github.com/repos/symfony/Translation/zipball/8349a2b0d11bd0311df9e8914408080912983a0b",
+                "reference": "8349a2b0d11bd0311df9e8914408080912983a0b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "ircmaxell/password-compat": "1.0.*",
-                "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1",
-                "symfony/expression-language": "~2.6",
-                "symfony/http-foundation": "~2.4",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/translation": "~2.0,>=2.0.5",
-                "symfony/validator": "~2.5,>=2.5.5"
-            },
-            "suggest": {
-                "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5",
-                "symfony/event-dispatcher": "",
-                "symfony/expression-language": "For using the expression voter",
-                "symfony/http-foundation": "",
-                "symfony/validator": "For using the user password constraint"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.6-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Symfony\\Component\\Security\\Core\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Security Component - Core Library",
-            "homepage": "https://symfony.com",
-            "time": "2015-05-15 13:53:19"
-        },
-        {
-            "name": "symfony/translation",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/Translation",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Translation.git",
-                "reference": "89cdf3c43bc24c85dd8173dfcf5a979a95e5bd9c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Translation/zipball/89cdf3c43bc24c85dd8173dfcf5a979a95e5bd9c",
-                "reference": "89cdf3c43bc24c85dd8173dfcf5a979a95e5bd9c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
+            },
+            "conflict": {
+                "symfony/config": "<2.7"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~2.3,>=2.3.12",
+                "symfony/config": "~2.7",
                 "symfony/intl": "~2.3",
                 "symfony/phpunit-bridge": "~2.7",
                 "symfony/yaml": "~2.2"
@@ -1771,11 +2107,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\Translation\\": ""
                 }
             },
@@ -1795,25 +2131,24 @@
             ],
             "description": "Symfony Translation Component",
             "homepage": "https://symfony.com",
-            "time": "2015-05-29 14:42:58"
+            "time": "2015-06-11 17:26:34"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v2.6.9",
-            "target-dir": "Symfony/Component/VarDumper",
+            "version": "v2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "89eec96645fb44af4a454a26c74c72ba6311f5bc"
+                "reference": "c509921f260353bf07b257f84017777c8b0aa4bc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89eec96645fb44af4a454a26c74c72ba6311f5bc",
-                "reference": "89eec96645fb44af4a454a26c74c72ba6311f5bc",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c509921f260353bf07b257f84017777c8b0aa4bc",
+                "reference": "c509921f260353bf07b257f84017777c8b0aa4bc",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.9"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "~2.7"
@@ -1824,14 +2159,14 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
                 "files": [
                     "Resources/functions/dump.php"
                 ],
-                "psr-0": {
+                "psr-4": {
                     "Symfony\\Component\\VarDumper\\": ""
                 }
             },
@@ -1855,7 +2190,7 @@
                 "debug",
                 "dump"
             ],
-            "time": "2015-05-01 14:14:24"
+            "time": "2015-06-08 09:37:21"
         },
         {
             "name": "vlucas/phpdotenv",
@@ -1960,6 +2295,170 @@
             "time": "2015-06-14 21:17:01"
         },
         {
+            "name": "fabpot/php-cs-fixer",
+            "version": "v1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
+                "reference": "ef528b9d3f1dd66197baabf8f77c8402c62bb9fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/ef528b9d3f1dd66197baabf8f77c8402c62bb9fc",
+                "reference": "ef528b9d3f1dd66197baabf8f77c8402c62bb9fc",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.3.6",
+                "sebastian/diff": "~1.1",
+                "symfony/console": "~2.3",
+                "symfony/event-dispatcher": "~2.1",
+                "symfony/filesystem": "~2.1",
+                "symfony/finder": "~2.1",
+                "symfony/process": "~2.3",
+                "symfony/stopwatch": "~2.5"
+            },
+            "require-dev": {
+                "satooshi/php-coveralls": "0.7.*@dev"
+            },
+            "bin": [
+                "php-cs-fixer"
+            ],
+            "type": "application",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\CS\\": "Symfony/CS/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dariusz Rumiński",
+                    "email": "dariusz.ruminski@gmail.com"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "A tool to automatically fix PHP code style",
+            "time": "2015-06-13 09:30:19"
+        },
+        {
+            "name": "hamcrest/hamcrest-php",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hamcrest/hamcrest-php.git",
+                "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c",
+                "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "replace": {
+                "cordoval/hamcrest-php": "*",
+                "davedevelopment/hamcrest-php": "*",
+                "kodova/hamcrest-php": "*"
+            },
+            "require-dev": {
+                "phpunit/php-file-iterator": "1.3.3",
+                "satooshi/php-coveralls": "dev-master"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "hamcrest"
+                ],
+                "files": [
+                    "hamcrest/Hamcrest.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD"
+            ],
+            "description": "This is the PHP port of Hamcrest Matchers",
+            "keywords": [
+                "test"
+            ],
+            "time": "2015-05-11 14:41:42"
+        },
+        {
+            "name": "mockery/mockery",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/padraic/mockery.git",
+                "reference": "a4817105ee32b8a05056986ad23ce3a54781f693"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/padraic/mockery/zipball/a4817105ee32b8a05056986ad23ce3a54781f693",
+                "reference": "a4817105ee32b8a05056986ad23ce3a54781f693",
+                "shasum": ""
+            },
+            "require": {
+                "hamcrest/hamcrest-php": "~1.1",
+                "lib-pcre": ">=7.0",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Mockery": "library/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Padraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "http://blog.astrumfutura.com"
+                },
+                {
+                    "name": "Dave Marshall",
+                    "email": "dave.marshall@atstsolutions.co.uk",
+                    "homepage": "http://davedevelopment.co.uk"
+                }
+            ],
+            "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.",
+            "homepage": "http://github.com/padraic/mockery",
+            "keywords": [
+                "BDD",
+                "TDD",
+                "library",
+                "mock",
+                "mock objects",
+                "mockery",
+                "stub",
+                "test",
+                "test double",
+                "testing"
+            ],
+            "time": "2015-05-12 15:28:09"
+        },
+        {
             "name": "phpdocumentor/reflection-docblock",
             "version": "2.0.4",
             "source": {
@@ -2182,16 +2681,16 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "2.1.5",
+            "version": "2.1.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "be2286cb8c7e1773eded49d9719219e6f74f9e3e"
+                "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/be2286cb8c7e1773eded49d9719219e6f74f9e3e",
-                "reference": "be2286cb8c7e1773eded49d9719219e6f74f9e3e",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
+                "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
                 "shasum": ""
             },
             "require": {
@@ -2240,7 +2739,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-06-09 13:05:42"
+            "time": "2015-06-19 07:11:55"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -2291,16 +2790,16 @@
         },
         {
             "name": "phpunit/php-text-template",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
-                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
                 "shasum": ""
             },
             "require": {
@@ -2309,20 +2808,17 @@
             "type": "library",
             "autoload": {
                 "classmap": [
-                    "Text/"
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                ""
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
+                    "email": "sebastian@phpunit.de",
                     "role": "lead"
                 }
             ],
@@ -2331,7 +2827,7 @@
             "keywords": [
                 "template"
             ],
-            "time": "2014-01-30 17:20:04"
+            "time": "2015-06-21 13:50:34"
         },
         {
             "name": "phpunit/php-timer",
@@ -2376,16 +2872,16 @@
         },
         {
             "name": "phpunit/php-token-stream",
-            "version": "1.4.2",
+            "version": "1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "db63be1159c81df649cd0260e30249a586d4129e"
+                "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/db63be1159c81df649cd0260e30249a586d4129e",
-                "reference": "db63be1159c81df649cd0260e30249a586d4129e",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
+                "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
                 "shasum": ""
             },
             "require": {
@@ -2421,20 +2917,20 @@
             "keywords": [
                 "tokenizer"
             ],
-            "time": "2015-06-12 07:34:24"
+            "time": "2015-06-19 03:43:16"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "4.7.3",
+            "version": "4.7.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "41fea1e84ed84d373f5ac099a1276c4358c90708"
+                "reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41fea1e84ed84d373f5ac099a1276c4358c90708",
-                "reference": "41fea1e84ed84d373f5ac099a1276c4358c90708",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f6701ef3faea759acd1910a7751d8d102a7fd5bc",
+                "reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc",
                 "shasum": ""
             },
             "require": {
@@ -2448,7 +2944,7 @@
                 "phpunit/php-code-coverage": "~2.1",
                 "phpunit/php-file-iterator": "~1.4",
                 "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": "~1.0",
+                "phpunit/php-timer": ">=1.0.6",
                 "phpunit/phpunit-mock-objects": "~2.3",
                 "sebastian/comparator": "~1.1",
                 "sebastian/diff": "~1.2",
@@ -2493,7 +2989,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-06-11 16:20:25"
+            "time": "2015-06-21 07:23:36"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -2888,16 +3384,16 @@
         },
         {
             "name": "sebastian/version",
-            "version": "1.0.5",
+            "version": "1.0.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4"
+                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
-                "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
                 "shasum": ""
             },
             "type": "library",
@@ -2919,7 +3415,56 @@
             ],
             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
             "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-02-24 06:35:25"
+            "time": "2015-06-21 13:59:46"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v2.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Stopwatch.git",
+                "reference": "c653f1985f6c2b7dbffd04d48b9c0a96aaef814b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/c653f1985f6c2b7dbffd04d48b9c0a96aaef814b",
+                "reference": "c653f1985f6c2b7dbffd04d48b9c0a96aaef814b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "require-dev": {
+                "symfony/phpunit-bridge": "~2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-06-04 20:11:48"
         },
         {
             "name": "symfony/yaml",
@@ -2973,7 +3518,9 @@
     ],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": [],
+    "stability-flags": {
+        "mockery/mockery": 20
+    },
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": [],
--- a/server/src/config/app.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/app.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,197 +2,204 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Application Debug Mode
-	|--------------------------------------------------------------------------
-	|
-	| When your application is in debug mode, detailed error messages with
-	| stack traces will be shown on every error that occurs within your
-	| application. If disabled, a simple generic error page is shown.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Application Debug Mode
+    |--------------------------------------------------------------------------
+    |
+    | When your application is in debug mode, detailed error messages with
+    | stack traces will be shown on every error that occurs within your
+    | application. If disabled, a simple generic error page is shown.
+    |
+    */
 
-	'debug' => env('APP_DEBUG'),
+    'debug' => env('APP_DEBUG'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Application URL
-	|--------------------------------------------------------------------------
-	|
-	| This URL is used by the console to properly generate URLs when using
-	| the Artisan command line tool. You should set this to the root of
-	| your application so that it is used when running Artisan tasks.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Application URL
+    |--------------------------------------------------------------------------
+    |
+    | This URL is used by the console to properly generate URLs when using
+    | the Artisan command line tool. You should set this to the root of
+    | your application so that it is used when running Artisan tasks.
+    |
+    */
 
-	'url' => 'http://localhost',
+    'url' => env('APP_URL'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Application Timezone
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify the default timezone for your application, which
-	| will be used by the PHP date and date-time functions. We have gone
-	| ahead and set this to a sensible default for you out of the box.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Application Timezone
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the default timezone for your application, which
+    | will be used by the PHP date and date-time functions. We have gone
+    | ahead and set this to a sensible default for you out of the box.
+    |
+    */
 
-	'timezone' => 'UTC',
+    'timezone' => 'UTC',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Application Locale Configuration
-	|--------------------------------------------------------------------------
-	|
-	| The application locale determines the default locale that will be used
-	| by the translation service provider. You are free to set this value
-	| to any of the locales which will be supported by the application.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Application Locale Configuration
+    |--------------------------------------------------------------------------
+    |
+    | The application locale determines the default locale that will be used
+    | by the translation service provider. You are free to set this value
+    | to any of the locales which will be supported by the application.
+    |
+    */
 
-	'locale' => 'en',
+    'locale' => 'fr',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Application Fallback Locale
-	|--------------------------------------------------------------------------
-	|
-	| The fallback locale determines the locale to use when the current one
-	| is not available. You may change the value to correspond to any of
-	| the language folders that are provided through your application.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Application Fallback Locale
+    |--------------------------------------------------------------------------
+    |
+    | The fallback locale determines the locale to use when the current one
+    | is not available. You may change the value to correspond to any of
+    | the language folders that are provided through your application.
+    |
+    */
 
-	'fallback_locale' => 'en',
+    'fallback_locale' => 'fr',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Encryption Key
-	|--------------------------------------------------------------------------
-	|
-	| This key is used by the Illuminate encrypter service and should be set
-	| to a random, 32 character string, otherwise these encrypted strings
-	| will not be safe. Please do this before deploying an application!
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Encryption Key
+    |--------------------------------------------------------------------------
+    |
+    | This key is used by the Illuminate encrypter service and should be set
+    | to a random, 32 character string, otherwise these encrypted strings
+    | will not be safe. Please do this before deploying an application!
+    |
+    */
 
-	'key' => env('APP_KEY', 'SomeRandomString'),
+    'key' => env('APP_KEY', 'SomeRandomString'),
 
-	'cipher' => MCRYPT_RIJNDAEL_128,
+    'cipher' => MCRYPT_RIJNDAEL_128,
 
-	/*
-	|--------------------------------------------------------------------------
-	| Logging Configuration
-	|--------------------------------------------------------------------------
-	|
-	| Here you may configure the log settings for your application. Out of
-	| the box, Laravel uses the Monolog PHP logging library. This gives
-	| you a variety of powerful log handlers / formatters to utilize.
-	|
-	| Available Settings: "single", "daily", "syslog", "errorlog"
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Logging Configuration
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure the log settings for your application. Out of
+    | the box, Laravel uses the Monolog PHP logging library. This gives
+    | you a variety of powerful log handlers / formatters to utilize.
+    |
+    | Available Settings: "single", "daily", "syslog", "errorlog"
+    |
+    */
 
-	'log' => 'daily',
+    'log' => 'daily',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Autoloaded Service Providers
-	|--------------------------------------------------------------------------
-	|
-	| The service providers listed here will be automatically loaded on the
-	| request to your application. Feel free to add your own services to
-	| this array to grant expanded functionality to your applications.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Autoloaded Service Providers
+    |--------------------------------------------------------------------------
+    |
+    | The service providers listed here will be automatically loaded on the
+    | request to your application. Feel free to add your own services to
+    | this array to grant expanded functionality to your applications.
+    |
+    */
 
-	'providers' => [
+    'providers' => [
 
-		/*
-		 * Laravel Framework Service Providers...
-		 */
-		'Illuminate\Foundation\Providers\ArtisanServiceProvider',
-		'Illuminate\Auth\AuthServiceProvider',
-		'Illuminate\Bus\BusServiceProvider',
-		'Illuminate\Cache\CacheServiceProvider',
-		'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
-		'Illuminate\Routing\ControllerServiceProvider',
-		'Illuminate\Cookie\CookieServiceProvider',
-		'Illuminate\Database\DatabaseServiceProvider',
-		'Illuminate\Encryption\EncryptionServiceProvider',
-		'Illuminate\Filesystem\FilesystemServiceProvider',
-		'Illuminate\Foundation\Providers\FoundationServiceProvider',
-		'Illuminate\Hashing\HashServiceProvider',
-		'Illuminate\Mail\MailServiceProvider',
-		'Illuminate\Pagination\PaginationServiceProvider',
-		'Illuminate\Pipeline\PipelineServiceProvider',
-		'Illuminate\Queue\QueueServiceProvider',
-		'Illuminate\Redis\RedisServiceProvider',
-		'Illuminate\Auth\Passwords\PasswordResetServiceProvider',
-		'Illuminate\Session\SessionServiceProvider',
-		'Illuminate\Translation\TranslationServiceProvider',
-		'Illuminate\Validation\ValidationServiceProvider',
-		'Illuminate\View\ViewServiceProvider',
+        /*
+         * Laravel Framework Service Providers...
+         */
+        'Illuminate\Foundation\Providers\ArtisanServiceProvider',
+        'Illuminate\Auth\AuthServiceProvider',
+        'Illuminate\Bus\BusServiceProvider',
+        'Illuminate\Cache\CacheServiceProvider',
+        'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
+        'Illuminate\Routing\ControllerServiceProvider',
+        'Illuminate\Cookie\CookieServiceProvider',
+        'Illuminate\Database\DatabaseServiceProvider',
+        'Illuminate\Encryption\EncryptionServiceProvider',
+        'Illuminate\Filesystem\FilesystemServiceProvider',
+        'Illuminate\Foundation\Providers\FoundationServiceProvider',
+        'Illuminate\Hashing\HashServiceProvider',
+        'Illuminate\Mail\MailServiceProvider',
+        'Illuminate\Pagination\PaginationServiceProvider',
+        'Illuminate\Pipeline\PipelineServiceProvider',
+        'Illuminate\Queue\QueueServiceProvider',
+        'Illuminate\Redis\RedisServiceProvider',
+        'Illuminate\Auth\Passwords\PasswordResetServiceProvider',
+        'Illuminate\Session\SessionServiceProvider',
+        'Illuminate\Translation\TranslationServiceProvider',
+        'Illuminate\Validation\ValidationServiceProvider',
+        'Illuminate\View\ViewServiceProvider',
+        'Illuminate\Broadcasting\BroadcastServiceProvider',
 
-		/*
-		 * Application Service Providers...
-		 */
-		'App\Providers\AppServiceProvider',
-		'App\Providers\BusServiceProvider',
-		'App\Providers\ConfigServiceProvider',
-		'App\Providers\EventServiceProvider',
-		'App\Providers\RouteServiceProvider',
+        /*
+         * Additional service providers
+         */
+        'Collective\Html\HtmlServiceProvider',
 
-	],
+        /*
+         * Application Service Providers...
+         */
+        'CorpusParole\Providers\AppServiceProvider',
+        'CorpusParole\Providers\BusServiceProvider',
+        'CorpusParole\Providers\ConfigServiceProvider',
+        'CorpusParole\Providers\EventServiceProvider',
+        'CorpusParole\Providers\RouteServiceProvider',
+        'CorpusParole\Providers\RepositoryServiceProvider',
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Class Aliases
-	|--------------------------------------------------------------------------
-	|
-	| This array of class aliases will be registered when this application
-	| is started. However, feel free to register as many as you wish as
-	| the aliases are "lazy" loaded so they don't hinder performance.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Class Aliases
+    |--------------------------------------------------------------------------
+    |
+    | This array of class aliases will be registered when this application
+    | is started. However, feel free to register as many as you wish as
+    | the aliases are "lazy" loaded so they don't hinder performance.
+    |
+    */
 
-	'aliases' => [
+    'aliases' => [
 
-		'App'       => 'Illuminate\Support\Facades\App',
-		'Artisan'   => 'Illuminate\Support\Facades\Artisan',
-		'Auth'      => 'Illuminate\Support\Facades\Auth',
-		'Blade'     => 'Illuminate\Support\Facades\Blade',
-		'Bus'       => 'Illuminate\Support\Facades\Bus',
-		'Cache'     => 'Illuminate\Support\Facades\Cache',
-		'Config'    => 'Illuminate\Support\Facades\Config',
-		'Cookie'    => 'Illuminate\Support\Facades\Cookie',
-		'Crypt'     => 'Illuminate\Support\Facades\Crypt',
-		'DB'        => 'Illuminate\Support\Facades\DB',
-		'Eloquent'  => 'Illuminate\Database\Eloquent\Model',
-		'Event'     => 'Illuminate\Support\Facades\Event',
-		'File'      => 'Illuminate\Support\Facades\File',
-		'Hash'      => 'Illuminate\Support\Facades\Hash',
-		'Input'     => 'Illuminate\Support\Facades\Input',
-		'Inspiring' => 'Illuminate\Foundation\Inspiring',
-		'Lang'      => 'Illuminate\Support\Facades\Lang',
-		'Log'       => 'Illuminate\Support\Facades\Log',
-		'Mail'      => 'Illuminate\Support\Facades\Mail',
-		'Password'  => 'Illuminate\Support\Facades\Password',
-		'Queue'     => 'Illuminate\Support\Facades\Queue',
-		'Redirect'  => 'Illuminate\Support\Facades\Redirect',
-		'Redis'     => 'Illuminate\Support\Facades\Redis',
-		'Request'   => 'Illuminate\Support\Facades\Request',
-		'Response'  => 'Illuminate\Support\Facades\Response',
-		'Route'     => 'Illuminate\Support\Facades\Route',
-		'Schema'    => 'Illuminate\Support\Facades\Schema',
-		'Session'   => 'Illuminate\Support\Facades\Session',
-		'Storage'   => 'Illuminate\Support\Facades\Storage',
-		'URL'       => 'Illuminate\Support\Facades\URL',
-		'Validator' => 'Illuminate\Support\Facades\Validator',
-		'View'      => 'Illuminate\Support\Facades\View',
-
-	],
+        'App' => 'Illuminate\Support\Facades\App',
+        'Artisan' => 'Illuminate\Support\Facades\Artisan',
+        'Auth' => 'Illuminate\Support\Facades\Auth',
+        'Blade' => 'Illuminate\Support\Facades\Blade',
+        'Bus' => 'Illuminate\Support\Facades\Bus',
+        'Cache' => 'Illuminate\Support\Facades\Cache',
+        'Config' => 'Illuminate\Support\Facades\Config',
+        'Cookie' => 'Illuminate\Support\Facades\Cookie',
+        'Crypt' => 'Illuminate\Support\Facades\Crypt',
+        'DB' => 'Illuminate\Support\Facades\DB',
+        'Eloquent' => 'Illuminate\Database\Eloquent\Model',
+        'Event' => 'Illuminate\Support\Facades\Event',
+        'File' => 'Illuminate\Support\Facades\File',
+        'Hash' => 'Illuminate\Support\Facades\Hash',
+        'Input' => 'Illuminate\Support\Facades\Input',
+        'Inspiring' => 'Illuminate\Foundation\Inspiring',
+        'Lang' => 'Illuminate\Support\Facades\Lang',
+        'Log' => 'Illuminate\Support\Facades\Log',
+        'Mail' => 'Illuminate\Support\Facades\Mail',
+        'Password' => 'Illuminate\Support\Facades\Password',
+        'Queue' => 'Illuminate\Support\Facades\Queue',
+        'Redirect' => 'Illuminate\Support\Facades\Redirect',
+        'Redis' => 'Illuminate\Support\Facades\Redis',
+        'Request' => 'Illuminate\Support\Facades\Request',
+        'Response' => 'Illuminate\Support\Facades\Response',
+        'Route' => 'Illuminate\Support\Facades\Route',
+        'Schema' => 'Illuminate\Support\Facades\Schema',
+        'Session' => 'Illuminate\Support\Facades\Session',
+        'Storage' => 'Illuminate\Support\Facades\Storage',
+        'URL' => 'Illuminate\Support\Facades\URL',
+        'Validator' => 'Illuminate\Support\Facades\Validator',
+        'View' => 'Illuminate\Support\Facades\View',
+        'Html' => 'Collective\Html\HtmlFacade',
+        'Form' => 'Collective\Html\FormFacade',
+    ],
 
 ];
--- a/server/src/config/auth.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/auth.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,66 +2,66 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Authentication Driver
-	|--------------------------------------------------------------------------
-	|
-	| This option controls the authentication driver that will be utilized.
-	| This driver manages the retrieval and authentication of the users
-	| attempting to get access to protected areas of your application.
-	|
-	| Supported: "database", "eloquent"
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Authentication Driver
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the authentication driver that will be utilized.
+    | This driver manages the retrieval and authentication of the users
+    | attempting to get access to protected areas of your application.
+    |
+    | Supported: "database", "eloquent"
+    |
+    */
 
-	'driver' => 'eloquent',
+    'driver' => 'eloquent',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Authentication Model
-	|--------------------------------------------------------------------------
-	|
-	| When using the "Eloquent" authentication driver, we need to know which
-	| Eloquent model should be used to retrieve your users. Of course, it
-	| is often just the "User" model but you may use whatever you like.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Model
+    |--------------------------------------------------------------------------
+    |
+    | When using the "Eloquent" authentication driver, we need to know which
+    | Eloquent model should be used to retrieve your users. Of course, it
+    | is often just the "User" model but you may use whatever you like.
+    |
+    */
 
-	'model' => 'App\User',
+    'model' => 'CorpusParole\User',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Authentication Table
-	|--------------------------------------------------------------------------
-	|
-	| When using the "Database" authentication driver, we need to know which
-	| table should be used to retrieve your users. We have chosen a basic
-	| default value but you may easily change it to any table you like.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Table
+    |--------------------------------------------------------------------------
+    |
+    | When using the "Database" authentication driver, we need to know which
+    | table should be used to retrieve your users. We have chosen a basic
+    | default value but you may easily change it to any table you like.
+    |
+    */
 
-	'table' => 'users',
+    'table' => 'users',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Password Reset Settings
-	|--------------------------------------------------------------------------
-	|
-	| Here you may set the options for resetting passwords including the view
-	| that is your password reset e-mail. You can also set the name of the
-	| table that maintains all of the reset tokens for your application.
-	|
-	| The expire time is the number of minutes that the reset token should be
-	| considered valid. This security feature keeps tokens short-lived so
-	| they have less time to be guessed. You may change this as needed.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Settings
+    |--------------------------------------------------------------------------
+    |
+    | Here you may set the options for resetting passwords including the view
+    | that is your password reset e-mail. You can also set the name of the
+    | table that maintains all of the reset tokens for your application.
+    |
+    | The expire time is the number of minutes that the reset token should be
+    | considered valid. This security feature keeps tokens short-lived so
+    | they have less time to be guessed. You may change this as needed.
+    |
+    */
 
-	'password' => [
-		'email' => 'emails.password',
-		'table' => 'password_resets',
-		'expire' => 60,
-	],
+    'password' => [
+        'email' => 'emails.password',
+        'table' => 'password_resets',
+        'expire' => 60,
+    ],
 
 ];
--- a/server/src/config/cache.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/cache.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,78 +2,78 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Cache Store
-	|--------------------------------------------------------------------------
-	|
-	| This option controls the default cache connection that gets used while
-	| using this caching library. This connection is used when another is
-	| not explicitly specified when executing a given caching function.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Cache Store
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default cache connection that gets used while
+    | using this caching library. This connection is used when another is
+    | not explicitly specified when executing a given caching function.
+    |
+    */
 
-	'default' => env('CACHE_DRIVER', 'file'),
+    'default' => env('CACHE_DRIVER', 'file'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Cache Stores
-	|--------------------------------------------------------------------------
-	|
-	| Here you may define all of the cache "stores" for your application as
-	| well as their drivers. You may even define multiple stores for the
-	| same cache driver to group types of items stored in your caches.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Stores
+    |--------------------------------------------------------------------------
+    |
+    | Here you may define all of the cache "stores" for your application as
+    | well as their drivers. You may even define multiple stores for the
+    | same cache driver to group types of items stored in your caches.
+    |
+    */
 
-	'stores' => [
+    'stores' => [
 
-		'apc' => [
-			'driver' => 'apc'
-		],
+        'apc' => [
+            'driver' => 'apc',
+        ],
 
-		'array' => [
-			'driver' => 'array'
-		],
+        'array' => [
+            'driver' => 'array',
+        ],
 
-		'database' => [
-			'driver' => 'database',
-			'table'  => 'cache',
-			'connection' => null,
-		],
+        'database' => [
+            'driver' => 'database',
+            'table' => 'cache',
+            'connection' => null,
+        ],
 
-		'file' => [
-			'driver' => 'file',
-			'path'   => storage_path().'/framework/cache',
-		],
+        'file' => [
+            'driver' => 'file',
+            'path' => storage_path().'/framework/cache',
+        ],
 
-		'memcached' => [
-			'driver'  => 'memcached',
-			'servers' => [
-				[
-					'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100
-				],
-			],
-		],
+        'memcached' => [
+            'driver' => 'memcached',
+            'servers' => [
+                [
+                    'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100,
+                ],
+            ],
+        ],
 
-		'redis' => [
-			'driver' => 'redis',
-			'connection' => 'default',
-		],
+        'redis' => [
+            'driver' => 'redis',
+            'connection' => 'default',
+        ],
 
-	],
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Cache Key Prefix
-	|--------------------------------------------------------------------------
-	|
-	| When utilizing a RAM based store such as APC or Memcached, there might
-	| be other applications utilizing the same cache. So, we'll specify a
-	| value to get prefixed to all our keys so we can avoid collisions.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Key Prefix
+    |--------------------------------------------------------------------------
+    |
+    | When utilizing a RAM based store such as APC or Memcached, there might
+    | be other applications utilizing the same cache. So, we'll specify a
+    | value to get prefixed to all our keys so we can avoid collisions.
+    |
+    */
 
-	'prefix' => 'laravel',
+    'prefix' => 'laravel',
 
 ];
--- a/server/src/config/compile.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/compile.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,40 +2,40 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Additional Compiled Classes
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify additional classes to include in the compiled file
-	| generated by the `artisan optimize` command. These should be classes
-	| that are included on basically every request into the application.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Additional Compiled Classes
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify additional classes to include in the compiled file
+    | generated by the `artisan optimize` command. These should be classes
+    | that are included on basically every request into the application.
+    |
+    */
 
-	'files' => [
+    'files' => [
 
-		realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'),
-		realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'),
-		realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'),
-		realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'),
-		realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'),
+        realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'),
+        realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'),
+        realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'),
+        realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'),
+        realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'),
 
-	],
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Compiled File Providers
-	|--------------------------------------------------------------------------
-	|
-	| Here you may list service providers which define a "compiles" function
-	| that returns additional files that should be compiled, providing an
-	| easy way to get common files from any packages you are utilizing.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Compiled File Providers
+    |--------------------------------------------------------------------------
+    |
+    | Here you may list service providers which define a "compiles" function
+    | that returns additional files that should be compiled, providing an
+    | easy way to get common files from any packages you are utilizing.
+    |
+    */
 
-	'providers' => [
-		//
-	],
+    'providers' => [
+        //
+    ],
 
 ];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/config/constants.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,62 @@
+<?php
+
+return [
+
+    'VERSION' => [0,0,0,'alpha',1],
+
+    'OLAC_DISCOURSE_TYPE' => [
+        'uri' => 'http://www.language-archives.org/OLAC/1.1/discourse-type',
+        'values' => [
+            [
+                'code' => 'dialogue',
+                'name' => 'Dialogue',
+            ],
+
+            [
+                'code' => 'drama',
+                'name' => 'Drama',
+            ],
+
+            [
+                'code' => 'formulaic',
+                'name' => 'Formulaic Discourse',
+            ],
+
+            [
+                'code' => 'ludic',
+                'name' => 'Ludic Discourse',
+            ],
+            [
+                'code' => 'oratory',
+                'name' => 'Oratory',
+            ],
+
+            [
+                'code' => 'narrative',
+                'name' => 'Narrative Discourse',
+            ],
+
+            [
+                'code' => 'procedural',
+                'name' => 'Procedural Discourse',
+            ],
+
+            [
+                'code' => 'report',
+                'name' => 'Report',
+            ],
+
+            [
+                'code' => 'singing',
+                'name' => 'Singing',
+            ],
+
+            [
+                'code' => 'unintelligible_speech',
+                'name' => 'Unintelligible Speech',
+            ]
+        ]
+
+    ]
+
+];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/config/corpusparole.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,13 @@
+<?php
+
+return [
+
+    'sesame_query_url' => env('CORPUSPAROLE_SESAME_QUERY_URL'),
+    'sesame_update_url' => env('CORPUSPAROLE_SESAME_UPDATE_URL'),
+
+    'cocoon_rdf_base_uri' => env('CORPUSPAROLE_COCOON_RDF_BASE_URI'),
+    'cocoon_oaipmh_url' => env('CORPUSPAROLE_COCOON_OAIPMH_URL'),
+    'cocoon_doc_id_base_uri' => env('CORPUSPAROLE_COCOON_DOC_ID_BASE_URI'),
+    'cocoon_doc_id_base' => 'oai:crdo.vjf.cnrs.fr:',
+
+];
--- a/server/src/config/database.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/database.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,124 +2,124 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| PDO Fetch Style
-	|--------------------------------------------------------------------------
-	|
-	| By default, database results will be returned as instances of the PHP
-	| stdClass object; however, you may desire to retrieve records in an
-	| array format for simplicity. Here you can tweak the fetch style.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | PDO Fetch Style
+    |--------------------------------------------------------------------------
+    |
+    | By default, database results will be returned as instances of the PHP
+    | stdClass object; however, you may desire to retrieve records in an
+    | array format for simplicity. Here you can tweak the fetch style.
+    |
+    */
 
-	'fetch' => PDO::FETCH_CLASS,
+    'fetch' => PDO::FETCH_CLASS,
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Database Connection Name
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify which of the database connections below you wish
-	| to use as your default connection for all database work. Of course
-	| you may use many connections at once using the Database library.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Database Connection Name
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify which of the database connections below you wish
+    | to use as your default connection for all database work. Of course
+    | you may use many connections at once using the Database library.
+    |
+    */
 
-	'default' => 'pgsql',
+    'default' => 'pgsql',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Database Connections
-	|--------------------------------------------------------------------------
-	|
-	| Here are each of the database connections setup for your application.
-	| Of course, examples of configuring each database platform that is
-	| supported by Laravel is shown below to make development simple.
-	|
-	|
-	| All database work in Laravel is done through the PHP PDO facilities
-	| so make sure you have the driver for your particular database of
-	| choice installed on your machine before you begin development.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Database Connections
+    |--------------------------------------------------------------------------
+    |
+    | Here are each of the database connections setup for your application.
+    | Of course, examples of configuring each database platform that is
+    | supported by Laravel is shown below to make development simple.
+    |
+    |
+    | All database work in Laravel is done through the PHP PDO facilities
+    | so make sure you have the driver for your particular database of
+    | choice installed on your machine before you begin development.
+    |
+    */
 
-	'connections' => [
+    'connections' => [
 
-		'sqlite' => [
-			'driver'   => 'sqlite',
-			'database' => storage_path().'/database.sqlite',
-			'prefix'   => '',
-		],
+        'sqlite' => [
+            'driver' => 'sqlite',
+            'database' => storage_path().'/database.sqlite',
+            'prefix' => '',
+        ],
 
-		'mysql' => [
-			'driver'    => 'mysql',
-			'host'      => env('DB_HOST', 'localhost'),
-			'database'  => env('DB_DATABASE', 'forge'),
-			'username'  => env('DB_USERNAME', 'forge'),
-			'password'  => env('DB_PASSWORD', ''),
-			'charset'   => 'utf8',
-			'collation' => 'utf8_unicode_ci',
-			'prefix'    => '',
-			'strict'    => false,
-		],
+        'mysql' => [
+            'driver' => 'mysql',
+            'host' => env('DB_HOST', 'localhost'),
+            'database' => env('DB_DATABASE', 'forge'),
+            'username' => env('DB_USERNAME', 'forge'),
+            'password' => env('DB_PASSWORD', ''),
+            'charset' => 'utf8',
+            'collation' => 'utf8_unicode_ci',
+            'prefix' => '',
+            'strict' => false,
+        ],
 
-		'pgsql' => [
-			'driver'   => 'pgsql',
-			'host'     => env('DB_HOST', 'localhost'),
-			'database' => env('DB_DATABASE', 'forge'),
-			'username' => env('DB_USERNAME', 'forge'),
-			'password' => env('DB_PASSWORD', ''),
-			'charset'  => 'utf8',
-			'prefix'   => '',
-			'schema'   => 'public',
-		],
+        'pgsql' => [
+            'driver' => 'pgsql',
+            'host' => env('DB_HOST', 'localhost'),
+            'database' => env('DB_DATABASE', 'forge'),
+            'username' => env('DB_USERNAME', 'forge'),
+            'password' => env('DB_PASSWORD', ''),
+            'charset' => 'utf8',
+            'prefix' => '',
+            'schema' => 'public',
+        ],
 
-		'sqlsrv' => [
-			'driver'   => 'sqlsrv',
-			'host'     => env('DB_HOST', 'localhost'),
-			'database' => env('DB_DATABASE', 'forge'),
-			'username' => env('DB_USERNAME', 'forge'),
-			'password' => env('DB_PASSWORD', ''),
-			'prefix'   => '',
-		],
+        'sqlsrv' => [
+            'driver' => 'sqlsrv',
+            'host' => env('DB_HOST', 'localhost'),
+            'database' => env('DB_DATABASE', 'forge'),
+            'username' => env('DB_USERNAME', 'forge'),
+            'password' => env('DB_PASSWORD', ''),
+            'prefix' => '',
+        ],
 
-	],
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Migration Repository Table
-	|--------------------------------------------------------------------------
-	|
-	| This table keeps track of all the migrations that have already run for
-	| your application. Using this information, we can determine which of
-	| the migrations on disk haven't actually been run in the database.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Migration Repository Table
+    |--------------------------------------------------------------------------
+    |
+    | This table keeps track of all the migrations that have already run for
+    | your application. Using this information, we can determine which of
+    | the migrations on disk haven't actually been run in the database.
+    |
+    */
 
-	'migrations' => 'migrations',
+    'migrations' => 'migrations',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Redis Databases
-	|--------------------------------------------------------------------------
-	|
-	| Redis is an open source, fast, and advanced key-value store that also
-	| provides a richer set of commands than a typical key-value systems
-	| such as APC or Memcached. Laravel makes it easy to dig right in.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Redis Databases
+    |--------------------------------------------------------------------------
+    |
+    | Redis is an open source, fast, and advanced key-value store that also
+    | provides a richer set of commands than a typical key-value systems
+    | such as APC or Memcached. Laravel makes it easy to dig right in.
+    |
+    */
 
-	'redis' => [
+    'redis' => [
 
-		'cluster' => false,
+        'cluster' => false,
 
-		'default' => [
-			'host'     => '127.0.0.1',
-			'port'     => 6379,
-			'database' => 0,
-		],
+        'default' => [
+            'host' => '127.0.0.1',
+            'port' => 6379,
+            'database' => 0,
+        ],
 
-	],
+    ],
 
 ];
--- a/server/src/config/filesystems.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/filesystems.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,70 +2,70 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Filesystem Disk
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify the default filesystem disk that should be used
-	| by the framework. A "local" driver, as well as a variety of cloud
-	| based drivers are available for your choosing. Just store away!
-	|
-	| Supported: "local", "s3", "rackspace"
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Filesystem Disk
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the default filesystem disk that should be used
+    | by the framework. A "local" driver, as well as a variety of cloud
+    | based drivers are available for your choosing. Just store away!
+    |
+    | Supported: "local", "s3", "rackspace"
+    |
+    */
 
-	'default' => 'local',
+    'default' => 'local',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Cloud Filesystem Disk
-	|--------------------------------------------------------------------------
-	|
-	| Many applications store files both locally and in the cloud. For this
-	| reason, you may specify a default "cloud" driver here. This driver
-	| will be bound as the Cloud disk implementation in the container.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Cloud Filesystem Disk
+    |--------------------------------------------------------------------------
+    |
+    | Many applications store files both locally and in the cloud. For this
+    | reason, you may specify a default "cloud" driver here. This driver
+    | will be bound as the Cloud disk implementation in the container.
+    |
+    */
 
-	'cloud' => 's3',
+    'cloud' => 's3',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Filesystem Disks
-	|--------------------------------------------------------------------------
-	|
-	| Here you may configure as many filesystem "disks" as you wish, and you
-	| may even configure multiple disks of the same driver. Defaults have
-	| been setup for each driver as an example of the required options.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Filesystem Disks
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure as many filesystem "disks" as you wish, and you
+    | may even configure multiple disks of the same driver. Defaults have
+    | been setup for each driver as an example of the required options.
+    |
+    */
 
-	'disks' => [
+    'disks' => [
 
-		'local' => [
-			'driver' => 'local',
-			'root'   => storage_path().'/app',
-		],
+        'local' => [
+            'driver' => 'local',
+            'root' => storage_path().'/app',
+        ],
 
-		's3' => [
-			'driver' => 's3',
-			'key'    => 'your-key',
-			'secret' => 'your-secret',
-			'region' => 'your-region',
-			'bucket' => 'your-bucket',
-		],
+        's3' => [
+            'driver' => 's3',
+            'key' => 'your-key',
+            'secret' => 'your-secret',
+            'region' => 'your-region',
+            'bucket' => 'your-bucket',
+        ],
 
-		'rackspace' => [
-			'driver'    => 'rackspace',
-			'username'  => 'your-username',
-			'key'       => 'your-key',
-			'container' => 'your-container',
-			'endpoint'  => 'https://identity.api.rackspacecloud.com/v2.0/',
-			'region'    => 'IAD',
-			'url_type'  => 'publicURL'
-		],
+        'rackspace' => [
+            'driver' => 'rackspace',
+            'username' => 'your-username',
+            'key' => 'your-key',
+            'container' => 'your-container',
+            'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
+            'region' => 'IAD',
+            'url_type' => 'publicURL',
+        ],
 
-	],
+    ],
 
 ];
--- a/server/src/config/mail.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/mail.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,123 +2,123 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Mail Driver
-	|--------------------------------------------------------------------------
-	|
-	| Laravel supports both SMTP and PHP's "mail" function as drivers for the
-	| sending of e-mail. You may specify which one you're using throughout
-	| your application here. By default, Laravel is setup for SMTP mail.
-	|
-	| Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Mail Driver
+    |--------------------------------------------------------------------------
+    |
+    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
+    | sending of e-mail. You may specify which one you're using throughout
+    | your application here. By default, Laravel is setup for SMTP mail.
+    |
+    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
+    |
+    */
 
-	'driver' => env('MAIL_DRIVER', 'smtp'),
+    'driver' => env('MAIL_DRIVER', 'smtp'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| SMTP Host Address
-	|--------------------------------------------------------------------------
-	|
-	| Here you may provide the host address of the SMTP server used by your
-	| applications. A default option is provided that is compatible with
-	| the Mailgun mail service which will provide reliable deliveries.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | SMTP Host Address
+    |--------------------------------------------------------------------------
+    |
+    | Here you may provide the host address of the SMTP server used by your
+    | applications. A default option is provided that is compatible with
+    | the Mailgun mail service which will provide reliable deliveries.
+    |
+    */
 
-	'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| SMTP Host Port
-	|--------------------------------------------------------------------------
-	|
-	| This is the SMTP port used by your application to deliver e-mails to
-	| users of the application. Like the host we have set this value to
-	| stay compatible with the Mailgun e-mail application by default.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | SMTP Host Port
+    |--------------------------------------------------------------------------
+    |
+    | This is the SMTP port used by your application to deliver e-mails to
+    | users of the application. Like the host we have set this value to
+    | stay compatible with the Mailgun e-mail application by default.
+    |
+    */
 
-	'port' => env('MAIL_PORT', 587),
+    'port' => env('MAIL_PORT', 587),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Global "From" Address
-	|--------------------------------------------------------------------------
-	|
-	| You may wish for all e-mails sent by your application to be sent from
-	| the same address. Here, you may specify a name and address that is
-	| used globally for all e-mails that are sent by your application.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Global "From" Address
+    |--------------------------------------------------------------------------
+    |
+    | You may wish for all e-mails sent by your application to be sent from
+    | the same address. Here, you may specify a name and address that is
+    | used globally for all e-mails that are sent by your application.
+    |
+    */
 
-	'from' => ['address' => null, 'name' => null],
+    'from' => ['address' => null, 'name' => null],
 
-	/*
-	|--------------------------------------------------------------------------
-	| E-Mail Encryption Protocol
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify the encryption protocol that should be used when
-	| the application send e-mail messages. A sensible default using the
-	| transport layer security protocol should provide great security.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | E-Mail Encryption Protocol
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the encryption protocol that should be used when
+    | the application send e-mail messages. A sensible default using the
+    | transport layer security protocol should provide great security.
+    |
+    */
 
-	'encryption' => 'tls',
+    'encryption' => 'tls',
 
-	/*
-	|--------------------------------------------------------------------------
-	| SMTP Server Username
-	|--------------------------------------------------------------------------
-	|
-	| If your SMTP server requires a username for authentication, you should
-	| set it here. This will get used to authenticate with your server on
-	| connection. You may also set the "password" value below this one.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | SMTP Server Username
+    |--------------------------------------------------------------------------
+    |
+    | If your SMTP server requires a username for authentication, you should
+    | set it here. This will get used to authenticate with your server on
+    | connection. You may also set the "password" value below this one.
+    |
+    */
 
-	'username' => env('MAIL_USERNAME'),
+    'username' => env('MAIL_USERNAME'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| SMTP Server Password
-	|--------------------------------------------------------------------------
-	|
-	| Here you may set the password required by your SMTP server to send out
-	| messages from your application. This will be given to the server on
-	| connection so that the application will be able to send messages.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | SMTP Server Password
+    |--------------------------------------------------------------------------
+    |
+    | Here you may set the password required by your SMTP server to send out
+    | messages from your application. This will be given to the server on
+    | connection so that the application will be able to send messages.
+    |
+    */
 
-	'password' => env('MAIL_PASSWORD'),
+    'password' => env('MAIL_PASSWORD'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Sendmail System Path
-	|--------------------------------------------------------------------------
-	|
-	| When using the "sendmail" driver to send e-mails, we will need to know
-	| the path to where Sendmail lives on this server. A default path has
-	| been provided here, which will work well on most of your systems.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Sendmail System Path
+    |--------------------------------------------------------------------------
+    |
+    | When using the "sendmail" driver to send e-mails, we will need to know
+    | the path to where Sendmail lives on this server. A default path has
+    | been provided here, which will work well on most of your systems.
+    |
+    */
 
-	'sendmail' => '/usr/sbin/sendmail -bs',
+    'sendmail' => '/usr/sbin/sendmail -bs',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Mail "Pretend"
-	|--------------------------------------------------------------------------
-	|
-	| When this option is enabled, e-mail will not actually be sent over the
-	| web and will instead be written to your application's logs files so
-	| you may inspect the message. This is great for local development.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Mail "Pretend"
+    |--------------------------------------------------------------------------
+    |
+    | When this option is enabled, e-mail will not actually be sent over the
+    | web and will instead be written to your application's logs files so
+    | you may inspect the message. This is great for local development.
+    |
+    */
 
-	'pretend' => false,
+    'pretend' => false,
 
 ];
--- a/server/src/config/queue.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/queue.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,91 +2,91 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Queue Driver
-	|--------------------------------------------------------------------------
-	|
-	| The Laravel queue API supports a variety of back-ends via an unified
-	| API, giving you convenient access to each back-end using the same
-	| syntax for each one. Here you may set the default queue driver.
-	|
-	| Supported: "null", "sync", "database", "beanstalkd",
-	|            "sqs", "iron", "redis"
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Queue Driver
+    |--------------------------------------------------------------------------
+    |
+    | The Laravel queue API supports a variety of back-ends via an unified
+    | API, giving you convenient access to each back-end using the same
+    | syntax for each one. Here you may set the default queue driver.
+    |
+    | Supported: "null", "sync", "database", "beanstalkd",
+    |            "sqs", "iron", "redis"
+    |
+    */
 
-	'default' => env('QUEUE_DRIVER', 'sync'),
+    'default' => env('QUEUE_DRIVER', 'sync'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Queue Connections
-	|--------------------------------------------------------------------------
-	|
-	| Here you may configure the connection information for each server that
-	| is used by your application. A default configuration has been added
-	| for each back-end shipped with Laravel. You are free to add more.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Queue Connections
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure the connection information for each server that
+    | is used by your application. A default configuration has been added
+    | for each back-end shipped with Laravel. You are free to add more.
+    |
+    */
 
-	'connections' => [
+    'connections' => [
 
-		'sync' => [
-			'driver' => 'sync',
-		],
+        'sync' => [
+            'driver' => 'sync',
+        ],
 
-		'database' => [
-			'driver' => 'database',
-			'table' => 'jobs',
-			'queue' => 'default',
-			'expire' => 60,
-		],
+        'database' => [
+            'driver' => 'database',
+            'table' => 'jobs',
+            'queue' => 'default',
+            'expire' => 60,
+        ],
 
-		'beanstalkd' => [
-			'driver' => 'beanstalkd',
-			'host'   => 'localhost',
-			'queue'  => 'default',
-			'ttr'    => 60,
-		],
+        'beanstalkd' => [
+            'driver' => 'beanstalkd',
+            'host' => 'localhost',
+            'queue' => 'default',
+            'ttr' => 60,
+        ],
 
-		'sqs' => [
-			'driver' => 'sqs',
-			'key'    => 'your-public-key',
-			'secret' => 'your-secret-key',
-			'queue'  => 'your-queue-url',
-			'region' => 'us-east-1',
-		],
+        'sqs' => [
+            'driver' => 'sqs',
+            'key' => 'your-public-key',
+            'secret' => 'your-secret-key',
+            'queue' => 'your-queue-url',
+            'region' => 'us-east-1',
+        ],
 
-		'iron' => [
-			'driver'  => 'iron',
-			'host'    => 'mq-aws-us-east-1.iron.io',
-			'token'   => 'your-token',
-			'project' => 'your-project-id',
-			'queue'   => 'your-queue-name',
-			'encrypt' => true,
-		],
+        'iron' => [
+            'driver' => 'iron',
+            'host' => 'mq-aws-us-east-1.iron.io',
+            'token' => 'your-token',
+            'project' => 'your-project-id',
+            'queue' => 'your-queue-name',
+            'encrypt' => true,
+        ],
 
-		'redis' => [
-			'driver' => 'redis',
-			'queue'  => 'default',
-			'expire' => 60,
-		],
+        'redis' => [
+            'driver' => 'redis',
+            'queue' => 'default',
+            'expire' => 60,
+        ],
 
-	],
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Failed Queue Jobs
-	|--------------------------------------------------------------------------
-	|
-	| These options configure the behavior of failed queue job logging so you
-	| can control which database and table are used to store the jobs that
-	| have failed. You may change them to any database / table you wish.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Failed Queue Jobs
+    |--------------------------------------------------------------------------
+    |
+    | These options configure the behavior of failed queue job logging so you
+    | can control which database and table are used to store the jobs that
+    | have failed. You may change them to any database / table you wish.
+    |
+    */
 
-	'failed' => [
-		'database' => 'mysql', 'table' => 'failed_jobs',
-	],
+    'failed' => [
+        'database' => 'mysql', 'table' => 'failed_jobs',
+    ],
 
 ];
--- a/server/src/config/services.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/services.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,36 +2,36 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Third Party Services
-	|--------------------------------------------------------------------------
-	|
-	| This file is for storing the credentials for third party services such
-	| as Stripe, Mailgun, Mandrill, and others. This file provides a sane
-	| default location for this type of information, allowing packages
-	| to have a conventional place to find your various credentials.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Third Party Services
+    |--------------------------------------------------------------------------
+    |
+    | This file is for storing the credentials for third party services such
+    | as Stripe, Mailgun, Mandrill, and others. This file provides a sane
+    | default location for this type of information, allowing packages
+    | to have a conventional place to find your various credentials.
+    |
+    */
 
-	'mailgun' => [
-		'domain' => '',
-		'secret' => '',
-	],
+    'mailgun' => [
+        'domain' => '',
+        'secret' => '',
+    ],
 
-	'mandrill' => [
-		'secret' => '',
-	],
+    'mandrill' => [
+        'secret' => '',
+    ],
 
-	'ses' => [
-		'key' => '',
-		'secret' => '',
-		'region' => 'us-east-1',
-	],
+    'ses' => [
+        'key' => '',
+        'secret' => '',
+        'region' => 'us-east-1',
+    ],
 
-	'stripe' => [
-		'model'  => 'User',
-		'secret' => '',
-	],
+    'stripe' => [
+        'model' => 'User',
+        'secret' => '',
+    ],
 
 ];
--- a/server/src/config/session.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/session.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,152 +2,152 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Default Session Driver
-	|--------------------------------------------------------------------------
-	|
-	| This option controls the default session "driver" that will be used on
-	| requests. By default, we will use the lightweight native driver but
-	| you may specify any of the other wonderful drivers provided here.
-	|
-	| Supported: "file", "cookie", "database", "apc",
-	|            "memcached", "redis", "array"
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Default Session Driver
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default session "driver" that will be used on
+    | requests. By default, we will use the lightweight native driver but
+    | you may specify any of the other wonderful drivers provided here.
+    |
+    | Supported: "file", "cookie", "database", "apc",
+    |            "memcached", "redis", "array"
+    |
+    */
 
-	'driver' => env('SESSION_DRIVER', 'file'),
+    'driver' => env('SESSION_DRIVER', 'file'),
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Lifetime
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify the number of minutes that you wish the session
-	| to be allowed to remain idle before it expires. If you want them
-	| to immediately expire on the browser closing, set that option.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Lifetime
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the number of minutes that you wish the session
+    | to be allowed to remain idle before it expires. If you want them
+    | to immediately expire on the browser closing, set that option.
+    |
+    */
 
-	'lifetime' => 120,
+    'lifetime' => 120,
 
-	'expire_on_close' => false,
+    'expire_on_close' => false,
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Encryption
-	|--------------------------------------------------------------------------
-	|
-	| This option allows you to easily specify that all of your session data
-	| should be encrypted before it is stored. All encryption will be run
-	| automatically by Laravel and you can use the Session like normal.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Encryption
+    |--------------------------------------------------------------------------
+    |
+    | This option allows you to easily specify that all of your session data
+    | should be encrypted before it is stored. All encryption will be run
+    | automatically by Laravel and you can use the Session like normal.
+    |
+    */
 
-	'encrypt' => false,
+    'encrypt' => false,
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session File Location
-	|--------------------------------------------------------------------------
-	|
-	| When using the native session driver, we need a location where session
-	| files may be stored. A default has been set for you but a different
-	| location may be specified. This is only needed for file sessions.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session File Location
+    |--------------------------------------------------------------------------
+    |
+    | When using the native session driver, we need a location where session
+    | files may be stored. A default has been set for you but a different
+    | location may be specified. This is only needed for file sessions.
+    |
+    */
 
-	'files' => storage_path().'/framework/sessions',
+    'files' => storage_path().'/framework/sessions',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Database Connection
-	|--------------------------------------------------------------------------
-	|
-	| When using the "database" or "redis" session drivers, you may specify a
-	| connection that should be used to manage these sessions. This should
-	| correspond to a connection in your database configuration options.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Database Connection
+    |--------------------------------------------------------------------------
+    |
+    | When using the "database" or "redis" session drivers, you may specify a
+    | connection that should be used to manage these sessions. This should
+    | correspond to a connection in your database configuration options.
+    |
+    */
 
-	'connection' => null,
+    'connection' => null,
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Database Table
-	|--------------------------------------------------------------------------
-	|
-	| When using the "database" session driver, you may specify the table we
-	| should use to manage the sessions. Of course, a sensible default is
-	| provided for you; however, you are free to change this as needed.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Database Table
+    |--------------------------------------------------------------------------
+    |
+    | When using the "database" session driver, you may specify the table we
+    | should use to manage the sessions. Of course, a sensible default is
+    | provided for you; however, you are free to change this as needed.
+    |
+    */
 
-	'table' => 'sessions',
+    'table' => 'sessions',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Sweeping Lottery
-	|--------------------------------------------------------------------------
-	|
-	| Some session drivers must manually sweep their storage location to get
-	| rid of old sessions from storage. Here are the chances that it will
-	| happen on a given request. By default, the odds are 2 out of 100.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Sweeping Lottery
+    |--------------------------------------------------------------------------
+    |
+    | Some session drivers must manually sweep their storage location to get
+    | rid of old sessions from storage. Here are the chances that it will
+    | happen on a given request. By default, the odds are 2 out of 100.
+    |
+    */
 
-	'lottery' => [2, 100],
+    'lottery' => [2, 100],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Cookie Name
-	|--------------------------------------------------------------------------
-	|
-	| Here you may change the name of the cookie used to identify a session
-	| instance by ID. The name specified here will get used every time a
-	| new session cookie is created by the framework for every driver.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cookie Name
+    |--------------------------------------------------------------------------
+    |
+    | Here you may change the name of the cookie used to identify a session
+    | instance by ID. The name specified here will get used every time a
+    | new session cookie is created by the framework for every driver.
+    |
+    */
 
-	'cookie' => 'laravel_session',
+    'cookie' => 'laravel_session',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Cookie Path
-	|--------------------------------------------------------------------------
-	|
-	| The session cookie path determines the path for which the cookie will
-	| be regarded as available. Typically, this will be the root path of
-	| your application but you are free to change this when necessary.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cookie Path
+    |--------------------------------------------------------------------------
+    |
+    | The session cookie path determines the path for which the cookie will
+    | be regarded as available. Typically, this will be the root path of
+    | your application but you are free to change this when necessary.
+    |
+    */
 
-	'path' => '/',
+    'path' => '/',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Session Cookie Domain
-	|--------------------------------------------------------------------------
-	|
-	| Here you may change the domain of the cookie used to identify a session
-	| in your application. This will determine which domains the cookie is
-	| available to in your application. A sensible default has been set.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cookie Domain
+    |--------------------------------------------------------------------------
+    |
+    | Here you may change the domain of the cookie used to identify a session
+    | in your application. This will determine which domains the cookie is
+    | available to in your application. A sensible default has been set.
+    |
+    */
 
-	'domain' => null,
+    'domain' => null,
 
-	/*
-	|--------------------------------------------------------------------------
-	| HTTPS Only Cookies
-	|--------------------------------------------------------------------------
-	|
-	| By setting this option to true, session cookies will only be sent back
-	| to the server if the browser has a HTTPS connection. This will keep
-	| the cookie from being sent to you if it can not be done securely.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | HTTPS Only Cookies
+    |--------------------------------------------------------------------------
+    |
+    | By setting this option to true, session cookies will only be sent back
+    | to the server if the browser has a HTTPS connection. This will keep
+    | the cookie from being sent to you if it can not be done securely.
+    |
+    */
 
-	'secure' => false,
+    'secure' => false,
 
 ];
--- a/server/src/config/view.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/config/view.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,32 +2,32 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| View Storage Paths
-	|--------------------------------------------------------------------------
-	|
-	| Most templating systems load templates from disk. Here you may specify
-	| an array of paths that should be checked for your views. Of course
-	| the usual Laravel view path has already been registered for you.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | View Storage Paths
+    |--------------------------------------------------------------------------
+    |
+    | Most templating systems load templates from disk. Here you may specify
+    | an array of paths that should be checked for your views. Of course
+    | the usual Laravel view path has already been registered for you.
+    |
+    */
 
-	'paths' => [
-		realpath(base_path('resources/views'))
-	],
+    'paths' => [
+        realpath(base_path('resources/views')),
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Compiled View Path
-	|--------------------------------------------------------------------------
-	|
-	| This option determines where all the compiled Blade templates will be
-	| stored for your application. Typically, this is within the storage
-	| directory. However, as usual, you are free to change this value.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Compiled View Path
+    |--------------------------------------------------------------------------
+    |
+    | This option determines where all the compiled Blade templates will be
+    | stored for your application. Typically, this is within the storage
+    | directory. However, as usual, you are free to change this value.
+    |
+    */
 
-	'compiled' => realpath(storage_path().'/framework/views'),
+    'compiled' => realpath(storage_path().'/framework/views'),
 
 ];
--- a/server/src/database/migrations/2014_10_12_000000_create_users_table.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/database/migrations/2014_10_12_000000_create_users_table.php	Tue Jun 23 17:01:39 2015 +0200
@@ -3,34 +3,28 @@
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
 
-class CreateUsersTable extends Migration {
+class CreateUsersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up()
+    {
+        Schema::create('users', function (Blueprint $table) {
+            $table->increments('id');
+            $table->string('name');
+            $table->string('email')->unique();
+            $table->string('password', 60);
+            $table->rememberToken();
+            $table->timestamps();
+        });
+    }
 
-	/**
-	 * Run the migrations.
-	 *
-	 * @return void
-	 */
-	public function up()
-	{
-		Schema::create('users', function(Blueprint $table)
-		{
-			$table->increments('id');
-			$table->string('name');
-			$table->string('email')->unique();
-			$table->string('password', 60);
-			$table->rememberToken();
-			$table->timestamps();
-		});
-	}
-
-	/**
-	 * Reverse the migrations.
-	 *
-	 * @return void
-	 */
-	public function down()
-	{
-		Schema::drop('users');
-	}
-
+    /**
+     * Reverse the migrations.
+     */
+    public function down()
+    {
+        Schema::drop('users');
+    }
 }
--- a/server/src/database/migrations/2014_10_12_100000_create_password_resets_table.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/database/migrations/2014_10_12_100000_create_password_resets_table.php	Tue Jun 23 17:01:39 2015 +0200
@@ -3,31 +3,25 @@
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
 
-class CreatePasswordResetsTable extends Migration {
+class CreatePasswordResetsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up()
+    {
+        Schema::create('password_resets', function (Blueprint $table) {
+            $table->string('email')->index();
+            $table->string('token')->index();
+            $table->timestamp('created_at');
+        });
+    }
 
-	/**
-	 * Run the migrations.
-	 *
-	 * @return void
-	 */
-	public function up()
-	{
-		Schema::create('password_resets', function(Blueprint $table)
-		{
-			$table->string('email')->index();
-			$table->string('token')->index();
-			$table->timestamp('created_at');
-		});
-	}
-
-	/**
-	 * Reverse the migrations.
-	 *
-	 * @return void
-	 */
-	public function down()
-	{
-		Schema::drop('password_resets');
-	}
-
+    /**
+     * Reverse the migrations.
+     */
+    public function down()
+    {
+        Schema::drop('password_resets');
+    }
 }
--- a/server/src/database/seeds/DatabaseSeeder.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/database/seeds/DatabaseSeeder.php	Tue Jun 23 17:01:39 2015 +0200
@@ -3,18 +3,15 @@
 use Illuminate\Database\Seeder;
 use Illuminate\Database\Eloquent\Model;
 
-class DatabaseSeeder extends Seeder {
+class DatabaseSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     */
+    public function run()
+    {
+        Model::unguard();
 
-	/**
-	 * Run the database seeds.
-	 *
-	 * @return void
-	 */
-	public function run()
-	{
-		Model::unguard();
-
-		// $this->call('UserTableSeeder');
-	}
-
+        // $this->call('UserTableSeeder');
+    }
 }
--- a/server/src/phpspec.yml	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/phpspec.yml	Tue Jun 23 17:01:39 2015 +0200
@@ -1,5 +1,5 @@
 suites:
     main:
-        namespace: App
-        psr4_prefix: App
+        namespace: CorpusParole
+        psr4_prefix: CorpusParole
         src_path: app
\ No newline at end of file
--- a/server/src/phpunit.xml	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/phpunit.xml	Tue Jun 23 17:01:39 2015 +0200
@@ -13,6 +13,15 @@
         <testsuite name="Application Test Suite">
             <directory>./tests/</directory>
         </testsuite>
+        <testsuite name="Application Test Suite Repositories">
+            <directory>./tests/Repositories</directory>
+        </testsuite>
+        <testsuite name="Application Test Suite Models">
+            <directory>./tests/Models</directory>
+        </testsuite>
+        <testsuite name="Application Test Suite Controllers">
+            <directory>./tests/Controllers</directory>
+        </testsuite>
     </testsuites>
     <php>
         <env name="APP_ENV" value="testing"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/lang/en/bo.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,36 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'document_list' => 'Document list',
+    'document_detail' => 'Document detail',
+    'document_audio' => 'Audio:',
+    'document_content' => 'Content',
+    'document_title' => 'Title:',
+    'document_editors' => 'Editor(s):',
+    'document_types' => 'Type(s):',
+    'document_discourse_types' => 'Discourse Type(s):',
+
+    'discourse_type_dialogue' => 'Dialogue',
+    'discourse_type_drama' => 'Drama',
+    'discourse_type_formulaic' => 'Formulaic Discourse',
+    'discourse_type_ludic' => 'Ludic Discourse',
+    'discourse_type_oratory' => 'Oratory',
+    'discourse_type_narrative' => 'Narrative Discourse',
+    'discourse_type_procedural' => 'Procedural Discourse',
+    'discourse_type_report' => 'Report',
+    'discourse_type_singing' => 'Singing',
+    'discourse_type_unintelligible_speech' => 'Unintelligible Speech',
+
+];
--- a/server/src/resources/lang/en/pagination.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/resources/lang/en/pagination.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,18 +2,18 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Pagination Language Lines
-	|--------------------------------------------------------------------------
-	|
-	| The following language lines are used by the paginator library to build
-	| the simple pagination links. You are free to change them to anything
-	| you want to customize your views to better match your application.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
 
-	'previous' => '&laquo; Previous',
-	'next'     => 'Next &raquo;',
+    'previous' => '&laquo; Previous',
+    'next' => 'Next &raquo;',
 
 ];
--- a/server/src/resources/lang/en/passwords.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/resources/lang/en/passwords.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,21 +2,21 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Password Reminder Language Lines
-	|--------------------------------------------------------------------------
-	|
-	| The following language lines are the default lines which match reasons
-	| that are given by the password broker for a password update attempt
-	| has failed, such as for an invalid token or invalid new password.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reminder Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
 
-	"password" => "Passwords must be at least six characters and match the confirmation.",
-	"user" => "We can't find a user with that e-mail address.",
-	"token" => "This password reset token is invalid.",
-	"sent" => "We have e-mailed your password reset link!",
-	"reset" => "Your password has been reset!",
+    'password' => 'Passwords must be at least six characters and match the confirmation.',
+    'user' => "We can't find a user with that e-mail address.",
+    'token' => 'This password reset token is invalid.',
+    'sent' => 'We have e-mailed your password reset link!',
+    'reset' => 'Your password has been reset!',
 
 ];
--- a/server/src/resources/lang/en/validation.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/resources/lang/en/validation.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,106 +2,106 @@
 
 return [
 
-	/*
-	|--------------------------------------------------------------------------
-	| Validation Language Lines
-	|--------------------------------------------------------------------------
-	|
-	| The following language lines contain the default error messages used by
-	| the validator class. Some of these rules have multiple versions such
-	| as the size rules. Feel free to tweak each of these messages here.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
 
-	"accepted"             => "The :attribute must be accepted.",
-	"active_url"           => "The :attribute is not a valid URL.",
-	"after"                => "The :attribute must be a date after :date.",
-	"alpha"                => "The :attribute may only contain letters.",
-	"alpha_dash"           => "The :attribute may only contain letters, numbers, and dashes.",
-	"alpha_num"            => "The :attribute may only contain letters and numbers.",
-	"array"                => "The :attribute must be an array.",
-	"before"               => "The :attribute must be a date before :date.",
-	"between"              => [
-		"numeric" => "The :attribute must be between :min and :max.",
-		"file"    => "The :attribute must be between :min and :max kilobytes.",
-		"string"  => "The :attribute must be between :min and :max characters.",
-		"array"   => "The :attribute must have between :min and :max items.",
-	],
-	"boolean"              => "The :attribute field must be true or false.",
-	"confirmed"            => "The :attribute confirmation does not match.",
-	"date"                 => "The :attribute is not a valid date.",
-	"date_format"          => "The :attribute does not match the format :format.",
-	"different"            => "The :attribute and :other must be different.",
-	"digits"               => "The :attribute must be :digits digits.",
-	"digits_between"       => "The :attribute must be between :min and :max digits.",
-	"email"                => "The :attribute must be a valid email address.",
-	"filled"               => "The :attribute field is required.",
-	"exists"               => "The selected :attribute is invalid.",
-	"image"                => "The :attribute must be an image.",
-	"in"                   => "The selected :attribute is invalid.",
-	"integer"              => "The :attribute must be an integer.",
-	"ip"                   => "The :attribute must be a valid IP address.",
-	"max"                  => [
-		"numeric" => "The :attribute may not be greater than :max.",
-		"file"    => "The :attribute may not be greater than :max kilobytes.",
-		"string"  => "The :attribute may not be greater than :max characters.",
-		"array"   => "The :attribute may not have more than :max items.",
-	],
-	"mimes"                => "The :attribute must be a file of type: :values.",
-	"min"                  => [
-		"numeric" => "The :attribute must be at least :min.",
-		"file"    => "The :attribute must be at least :min kilobytes.",
-		"string"  => "The :attribute must be at least :min characters.",
-		"array"   => "The :attribute must have at least :min items.",
-	],
-	"not_in"               => "The selected :attribute is invalid.",
-	"numeric"              => "The :attribute must be a number.",
-	"regex"                => "The :attribute format is invalid.",
-	"required"             => "The :attribute field is required.",
-	"required_if"          => "The :attribute field is required when :other is :value.",
-	"required_with"        => "The :attribute field is required when :values is present.",
-	"required_with_all"    => "The :attribute field is required when :values is present.",
-	"required_without"     => "The :attribute field is required when :values is not present.",
-	"required_without_all" => "The :attribute field is required when none of :values are present.",
-	"same"                 => "The :attribute and :other must match.",
-	"size"                 => [
-		"numeric" => "The :attribute must be :size.",
-		"file"    => "The :attribute must be :size kilobytes.",
-		"string"  => "The :attribute must be :size characters.",
-		"array"   => "The :attribute must contain :size items.",
-	],
-	"unique"               => "The :attribute has already been taken.",
-	"url"                  => "The :attribute format is invalid.",
-	"timezone"             => "The :attribute must be a valid zone.",
+    'accepted' => 'The :attribute must be accepted.',
+    'active_url' => 'The :attribute is not a valid URL.',
+    'after' => 'The :attribute must be a date after :date.',
+    'alpha' => 'The :attribute may only contain letters.',
+    'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
+    'alpha_num' => 'The :attribute may only contain letters and numbers.',
+    'array' => 'The :attribute must be an array.',
+    'before' => 'The :attribute must be a date before :date.',
+    'between' => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file' => 'The :attribute must be between :min and :max kilobytes.',
+        'string' => 'The :attribute must be between :min and :max characters.',
+        'array' => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean' => 'The :attribute field must be true or false.',
+    'confirmed' => 'The :attribute confirmation does not match.',
+    'date' => 'The :attribute is not a valid date.',
+    'date_format' => 'The :attribute does not match the format :format.',
+    'different' => 'The :attribute and :other must be different.',
+    'digits' => 'The :attribute must be :digits digits.',
+    'digits_between' => 'The :attribute must be between :min and :max digits.',
+    'email' => 'The :attribute must be a valid email address.',
+    'filled' => 'The :attribute field is required.',
+    'exists' => 'The selected :attribute is invalid.',
+    'image' => 'The :attribute must be an image.',
+    'in' => 'The selected :attribute is invalid.',
+    'integer' => 'The :attribute must be an integer.',
+    'ip' => 'The :attribute must be a valid IP address.',
+    'max' => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file' => 'The :attribute may not be greater than :max kilobytes.',
+        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes' => 'The :attribute must be a file of type: :values.',
+    'min' => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file' => 'The :attribute must be at least :min kilobytes.',
+        'string' => 'The :attribute must be at least :min characters.',
+        'array' => 'The :attribute must have at least :min items.',
+    ],
+    'not_in' => 'The selected :attribute is invalid.',
+    'numeric' => 'The :attribute must be a number.',
+    'regex' => 'The :attribute format is invalid.',
+    'required' => 'The :attribute field is required.',
+    'required_if' => 'The :attribute field is required when :other is :value.',
+    'required_with' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values is present.',
+    'required_without' => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same' => 'The :attribute and :other must match.',
+    'size' => [
+        'numeric' => 'The :attribute must be :size.',
+        'file' => 'The :attribute must be :size kilobytes.',
+        'string' => 'The :attribute must be :size characters.',
+        'array' => 'The :attribute must contain :size items.',
+    ],
+    'unique' => 'The :attribute has already been taken.',
+    'url' => 'The :attribute format is invalid.',
+    'timezone' => 'The :attribute must be a valid zone.',
 
-	/*
-	|--------------------------------------------------------------------------
-	| Custom Validation Language Lines
-	|--------------------------------------------------------------------------
-	|
-	| Here you may specify custom validation messages for attributes using the
-	| convention "attribute.rule" to name the lines. This makes it quick to
-	| specify a specific custom language line for a given attribute rule.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
 
-	'custom' => [
-		'attribute-name' => [
-			'rule-name' => 'custom-message',
-		],
-	],
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
 
-	/*
-	|--------------------------------------------------------------------------
-	| Custom Validation Attributes
-	|--------------------------------------------------------------------------
-	|
-	| The following language lines are used to swap attribute place-holders
-	| with something more reader friendly such as E-Mail Address instead
-	| of "email". This simply helps us make messages a little cleaner.
-	|
-	*/
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap attribute place-holders
+    | with something more reader friendly such as E-Mail Address instead
+    | of "email". This simply helps us make messages a little cleaner.
+    |
+    */
 
-	'attributes' => [],
+    'attributes' => [],
 
 ];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/lang/fr/bo.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,37 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'document_list' => 'Liste de documents',
+    'document_detail' => 'Détail document',
+    'document_audio' => 'Audio :',
+    'document_content' => 'Contenu',
+    'document_title' => 'Titre :',
+    'document_editors' => 'Editeur(s) :',
+    'document_types' => 'Type(s) :',
+    'document_discourse_types' => 'Type(s) de discours :',
+
+    //TODO: vérifier les traductions
+    'discourse_type_dialogue' => 'Dialogue',
+    'discourse_type_drama' => 'Drame',
+    'discourse_type_formulaic' => 'Discours cérémoniel',
+    'discourse_type_ludic' => 'Discours ludique',
+    'discourse_type_oratory' => 'Art oratoire',
+    'discourse_type_narrative' => 'Narration',
+    'discourse_type_procedural' => 'Discours de procédure',
+    'discourse_type_report' => 'Rapport',
+    'discourse_type_singing' => 'Chant',
+    'discourse_type_unintelligible_speech' => 'Discours inintelligible',
+
+];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/lang/fr/pagination.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'previous' => '&laquo; Préc.',
+    'next' => 'Suiv. &raquo;',
+
+];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/lang/fr/passwords.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,21 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reminder Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'password' => 'Les mots de passes doivent faire au moins 6 caractères et correspondrent à la confirmation.',
+    'user' => "Nous ne trouvons pas d'utilisateur avec cet email.",
+    'token' => 'Le jeton de reninitialisation de maot de passe est invalide.',
+    'sent' => 'Nous vous avons envoyé l\'email de réinitialisation du mot de passe !',
+    'reset' => 'Votre mot de passe a été réinitialisé !',
+];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/lang/fr/validation.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,107 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'L\':attribute doit être accepté.',
+    'active_url' => ':attribute n\'est pas une URL valide.',
+    'after' => ':attribute doit être une date après :date.',
+    'alpha' => ':attribute peut contenir uniquement des lettres.',
+    'alpha_dash' => ':attribute ne peut contenir uniquement des lettres, chiffres et tiret.',
+    'alpha_num' => ':attribute ne peut contenir que des lettres et des chiffres.',
+    'array' => ':attribute doit être une liste.',
+    'before' => ':attribute doit être une date avant :date.',
+    'between' => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file' => 'The :attribute must be between :min and :max kilobytes.',
+        'string' => 'The :attribute must be between :min and :max characters.',
+        'array' => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean' => 'The :attribute field must be true or false.',
+    'confirmed' => 'The :attribute confirmation does not match.',
+    'date' => 'The :attribute is not a valid date.',
+    'date_format' => 'The :attribute does not match the format :format.',
+    'different' => 'The :attribute and :other must be different.',
+    'digits' => 'The :attribute must be :digits digits.',
+    'digits_between' => 'The :attribute must be between :min and :max digits.',
+    'email' => 'The :attribute must be a valid email address.',
+    'filled' => 'The :attribute field is required.',
+    'exists' => 'The selected :attribute is invalid.',
+    'image' => 'The :attribute must be an image.',
+    'in' => 'The selected :attribute is invalid.',
+    'integer' => 'The :attribute must be an integer.',
+    'ip' => 'The :attribute must be a valid IP address.',
+    'max' => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file' => 'The :attribute may not be greater than :max kilobytes.',
+        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes' => 'The :attribute must be a file of type: :values.',
+    'min' => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file' => 'The :attribute must be at least :min kilobytes.',
+        'string' => 'The :attribute must be at least :min characters.',
+        'array' => 'The :attribute must have at least :min items.',
+    ],
+    'not_in' => 'The selected :attribute is invalid.',
+    'numeric' => 'The :attribute must be a number.',
+    'regex' => 'The :attribute format is invalid.',
+    'required' => 'The :attribute field is required.',
+    'required_if' => 'The :attribute field is required when :other is :value.',
+    'required_with' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values is present.',
+    'required_without' => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same' => 'The :attribute and :other must match.',
+    'size' => [
+        'numeric' => 'The :attribute must be :size.',
+        'file' => 'The :attribute must be :size kilobytes.',
+        'string' => 'The :attribute must be :size characters.',
+        'array' => 'The :attribute must contain :size items.',
+    ],
+    'unique' => 'The :attribute has already been taken.',
+    'url' => 'The :attribute format is invalid.',
+    'timezone' => 'The :attribute must be a valid zone.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap attribute place-holders
+    | with something more reader friendly such as E-Mail Address instead
+    | of "email". This simply helps us make messages a little cleaner.
+    |
+    */
+
+    'attributes' => [],
+
+];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/views/bo/docDetail.blade.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,180 @@
+@extends('app')
+
+@section('content')
+<div class="container">
+	<div class="row">
+		<div class="col-md-10 col-md-offset-1">
+			<div class="panel panel-default">
+				<div class="panel-heading">@lang('bo.document_detail')</div>
+
+				<div class="panel-body">
+					<div class="doc_details">
+						<div class="data">
+							<div class="data-audio-title">@lang('bo.document_audio')</div>
+							<div class="data-audio-player">
+								<audio id='' controls="controls">
+								@foreach ($doc->getMediaArray() as $audio)
+									<source src="{{ $audio['url'] }}" type="{{ $audio['format']}}"/>
+								@endforeach
+									Your browser does not support the audio tag
+								</audio>
+							</div>
+						</div>
+						<div class="content">
+							<div class="data-content-title">@lang('bo.document_content')</div>
+							<div class="desc">@lang('bo.document_title')</div>
+							<div class="value">{{$doc->getTitle()}} ({{$doc->getTitle()->getLang()}})</div>
+							<div class="desc">@lang('bo.document_editors')</div>
+							<div class="value">@foreach ($doc->getPublishers() as $index => $publisher){{ $index>0?", ":"" }}{{$publisher}}@endforeach</div>
+						</div>
+					</div>
+					<pre>{{ $doc->getGraph()->dump('text') }}</pre>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+@endsection
+
+<!--
+<table class="meta">
+                <tbody><tr class="right">
+                    <td colspan="2">Identifiant OAI: <a title="métadonnées XML/OLAC" target="_blank" href="/crdo_servlet/oai-pmh?verb=GetRecord&amp;identifier=oai:crdo.vjf.cnrs.fr:crdo-ALA_608&amp;metadataPrefix=olac">oai:crdo.vjf.cnrs.fr:crdo-ALA_608</a>
+                    </td>
+                </tr>
+                <tr class="right">
+                    <td colspan="2">PURL: <a title="permalien" href="http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608">http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608</a>
+                    </td>
+                </tr>
+                <tr class="right">
+                    <td colspan="2">ARK: <a title="permalien" href="/exist/crdo/ark:/87895/1.17-467712">http://cocoon.huma-num.fr/exist/crdo/ark:/87895/1.17-467712</a>
+                    </td>
+                </tr>
+                <tr class="right">
+                    <td colspan="2">Dernière modification de la notice: 2014-11-04 v1.1</td>
+                </tr>
+                <tr>
+                    <td class="rubrique" colspan="2">Data</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Audio</td>
+                    <td class="valeur">
+                        <audio id="player" controls="controls">
+                            <source type="audio/mpeg" src="http://cocoon.huma-num.fr/data/ala/ALA_608.mp3">
+                            <source type="audio/x-wav" src="http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav">
+						Your browser does not support the audio tag
+					</audio>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="rubrique" colspan="2">Description du contenu</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Titre:</td>
+                    <td class="valeur">[fr] Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Editeur(s):</td>
+                    <td class="valeur">
+                        <a title="rechercher toutes les ressources de cet éditeur" href="/exist/crdo/rechercher.xql?terme=%22Atlas%20linguistiques%2C%20cultures%20et%20parlers%20r%C3%A9gionaux%20de%20France%22&amp;field=Publisher">Atlas linguistiques, cultures et parlers régionaux de France</a>
+                        <a title="en savoir plus sur ce participant" href="/exist/crdo/organisations.xql?code=crdo:/vocabulary/org/GRECO9">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Participant(s):</td>
+                    <td class="valeur">
+                        <a title="rechercher toutes les ressources de ce participant" href="/exist/crdo/rechercher.xql?terme=%22Huck%2C%20Dominique%22&amp;field=Contributor">Huck, Dominique</a>
+                        (depositor, interviewer)
+                        <a title="en savoir plus sur ce participant" href="/exist/crdo/organisations.xql?code=http://viaf.org/viaf/9122216">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>
+                        <br>
+                        <a title="rechercher toutes les ressources de ce participant" href="/exist/crdo/rechercher.xql?terme=%22Bothorel-Witz%2C%20Arlette%22&amp;field=Contributor">Bothorel-Witz, Arlette</a>
+                        (interviewer)
+                        </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Description(s):</td>
+                    <td class="valeur">[fr] Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace.</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Couverture spatiale:</td>
+                    <td class="valeur">[fr] France, Alsace<br>Pays/région (ISO-3166): France<a href="/exist/crdo/geonames.xql?code=FR" title="voir plus d'informations sur ce code pays ou cette région">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Date(s):</td>
+                    <td class="valeur">création: start=1980; end=1989; name=années 80<br>mise à disposition: 2004-07-03<br>archivage: 2014-11-04T16:25:54+01:00</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Type(s):</td>
+                    <td class="valeur">
+                        <a target="_blank" href="http://www.language-archives.org/REC/type.html" title="voir la définition des types linguistiques sur OLAC">Type(s) linguistique</a>:     				primary_text<br>
+                        <a target="_blank" href="http://www.language-archives.org/REC/discourse.html" title="voir la définition des types de discours sur OLAC">Type(s) de discours</a>:
+					dialogue<br>Enregistrement sonore</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Sujet(s):</td>
+                    <td class="valeur">
+                        <a target="_blank" href="http://www.language-archives.org/REC/field.html" title="voir la définition des champs linguistiques sur OLAC">Champ(s) linguistique</a>:
+					    lexicography, phonetics, anthropological_linguistics<br>Alsacien (code ISO-639: gsw<a href="/exist/crdo/lexvo.xql?code=gsw" title="en savoir plus sur ce code de langue">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>)</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Langue(s):</td>
+                    <td class="valeur">[fr] Alsacien (code ISO-639: gsw<a href="/exist/crdo/lexvo.xql?code=gsw" title="en savoir plus sur ce code de langue">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>)</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Format(s):</td>
+                    <td class="valeur">
+			(IANA MIME Media Type: <a target="_blank" href="http://www.iana.org/assignments/media-types/audio" title="voir les informations sur IANA">audio/x-wav</a>)
+		<br>
+			durée: 0:02H04:16</td>
+                </tr>
+                <tr>
+                    <td class="rubrique" colspan="2">Description de l'accès</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Droits:</td>
+                    <td class="valeur">Copyright (c) Département de dialectologie alsacienne et mosellane de l'Université de Strasbourg<br>Freely available for non-commercial use<br>
+					Le document est soumis à la
+					<a target="_blank" href="http://creativecommons.org/licenses/by-nc-nd/2.5/" title="Creative Commons License">Licence Creative Commons
+						<img src="http://creativecommons.org/images/public/somerights20.png" alt="n.c">
+                        </a>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Document(s):</td>
+                    <td class="valeur">
+                        <form action="/media-meta.php" method="get" target="_blank">
+                            <select name="file">
+                                <option value="ala/ALA_608_22km.wav">Format de diffusion (.wav)</option>
+                                <option value="ala/ALA_608.mp3">Format de diffusion (.mp3)</option>
+                            </select>
+                            <input alt="télécharger" src="/exist/crdo/img/download.png" type="image" name="submit" title="Télécharger">
+                            <input type="checkbox" name="metadata"> encapsuler les métadonnées
+							<input type="hidden" name="id" value="crdo-ALA_608">
+                        </form>
+                        <div>
+								Le format de conservation (.wav)
+								<a href="http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav" target="_blank">
+                                <img alt="n.c" src="/exist/crdo/img/download.png" title="Télécharger">
+                            </a>
+                        </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Relation(s):</td>
+                    <td class="valeur">Est une partie de la collection <a href="/exist/crdo/meta/crdo-COLLECTION_ALA_CL" title="voir la notice de la ressource">Atlas Linguistique et ethnographique de l'Alsace: Enquêtes sur la conscience linguistique</a>
+                        <br>Est une partie de la collection <a href="/exist/crdo/meta/crdo-COLLECTION_LANGUESDEFRANCE" title="voir la notice de la ressource">Corpus de la parole</a>
+                    </td>
+                </tr>
+            </tbody></table>
+-->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/views/bo/docEdit.blade.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,202 @@
+@extends('app')
+
+@section('content')
+<div class="container">
+	<div class="row">
+		<div class="col-md-10 col-md-offset-1">
+			<div class="panel panel-default">
+				<div class="panel-heading">@lang('bo.document_detail')</div>
+
+				<div class="panel-body">
+					<div class="doc_details">
+						<div class="data">
+							<div class="data-audio-title">@lang('bo.document_audio')</div>
+							<div class="data-audio-player">
+								<audio id='' controls="controls">
+								@foreach ($doc->getMediaArray() as $audio)
+									<source src="{{ $audio['url'] }}" type="{{ $audio['format']}}"/>
+								@endforeach
+									Your browser does not support the audio tag
+								</audio>
+							</div>
+						</div>
+						<div class="content">
+							<div class="data-content-title">@lang('bo.document_content')</div>
+							<div class="desc">@lang('bo.document_title')</div>
+							<div class="value">{{$doc->getTitle()}} ({{$doc->getTitle()->getLang()}})</div>
+							<div class="desc">@lang('bo.document_editors')</div>
+							<div class="value">@foreach ($doc->getPublishers() as $index => $publisher){{ $index>0?", ":"" }}{{$publisher}}@endforeach</div>
+							<div class="desc">@lang('bo.document_types')</div>
+							<div class="value">@foreach ($doc->getOtherTypes() as $index => $type){{ $index>0?", ":"" }}{{$type}}@endforeach</div>
+							<div class="desc">@lang('bo.document_discourse_types')</div>
+							<div class="value">
+							@foreach ($doc->getDiscourseTypes() as $index => $type)
+								<select name='discourse_type[]' id='discourse-type' form='graph-form'>
+								@foreach (Config::get('constants.OLAC_DISCOURSE_TYPE')['values'] as $index => $type_discourse)
+								    <option value='{{$type_discourse['code']}}' {{$type==$type_discourse['code']?'selected':''}}>@lang('bo.discourse_type_'.$type_discourse['code'])</options>
+								@endforeach
+								</select>
+							@endforeach
+								<select name='discourse_type[]' id='discourse-type' form='graph-form'>
+								@foreach (Config::get('constants.OLAC_DISCOURSE_TYPE')['values'] as $index => $type_discourse)
+									<option value='{{$type_discourse['code']}}'>@lang('bo.discourse_type_'.$type_discourse['code'])</options>
+								@endforeach
+								</select>
+							</div>
+						</div>
+					</div>
+					<div id="graph_form_wrapper">
+						{!! Form::open(['route'=>['bo.docs.update', $doc->getId()], 'id'=>'graph-form', 'class' => 'doc-form', 'method' => 'PUT']) !!}
+						{!! Form::submit('Ok') !!}
+						{!! Form::close() !!}
+					</div>
+					<pre>{{ $doc->getGraph()->dump('text') }}</pre>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+@endsection
+
+<!--
+<table class="meta">
+                <tbody><tr class="right">
+                    <td colspan="2">Identifiant OAI: <a title="métadonnées XML/OLAC" target="_blank" href="/crdo_servlet/oai-pmh?verb=GetRecord&amp;identifier=oai:crdo.vjf.cnrs.fr:crdo-ALA_608&amp;metadataPrefix=olac">oai:crdo.vjf.cnrs.fr:crdo-ALA_608</a>
+                    </td>
+                </tr>
+                <tr class="right">
+                    <td colspan="2">PURL: <a title="permalien" href="http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608">http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608</a>
+                    </td>
+                </tr>
+                <tr class="right">
+                    <td colspan="2">ARK: <a title="permalien" href="/exist/crdo/ark:/87895/1.17-467712">http://cocoon.huma-num.fr/exist/crdo/ark:/87895/1.17-467712</a>
+                    </td>
+                </tr>
+                <tr class="right">
+                    <td colspan="2">Dernière modification de la notice: 2014-11-04 v1.1</td>
+                </tr>
+                <tr>
+                    <td class="rubrique" colspan="2">Data</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Audio</td>
+                    <td class="valeur">
+                        <audio id="player" controls="controls">
+                            <source type="audio/mpeg" src="http://cocoon.huma-num.fr/data/ala/ALA_608.mp3">
+                            <source type="audio/x-wav" src="http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav">
+						Your browser does not support the audio tag
+					</audio>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="rubrique" colspan="2">Description du contenu</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Titre:</td>
+                    <td class="valeur">[fr] Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Editeur(s):</td>
+                    <td class="valeur">
+                        <a title="rechercher toutes les ressources de cet éditeur" href="/exist/crdo/rechercher.xql?terme=%22Atlas%20linguistiques%2C%20cultures%20et%20parlers%20r%C3%A9gionaux%20de%20France%22&amp;field=Publisher">Atlas linguistiques, cultures et parlers régionaux de France</a>
+                        <a title="en savoir plus sur ce participant" href="/exist/crdo/organisations.xql?code=crdo:/vocabulary/org/GRECO9">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Participant(s):</td>
+                    <td class="valeur">
+                        <a title="rechercher toutes les ressources de ce participant" href="/exist/crdo/rechercher.xql?terme=%22Huck%2C%20Dominique%22&amp;field=Contributor">Huck, Dominique</a>
+                        (depositor, interviewer)
+                        <a title="en savoir plus sur ce participant" href="/exist/crdo/organisations.xql?code=http://viaf.org/viaf/9122216">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>
+                        <br>
+                        <a title="rechercher toutes les ressources de ce participant" href="/exist/crdo/rechercher.xql?terme=%22Bothorel-Witz%2C%20Arlette%22&amp;field=Contributor">Bothorel-Witz, Arlette</a>
+                        (interviewer)
+                        </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Description(s):</td>
+                    <td class="valeur">[fr] Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace.</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Couverture spatiale:</td>
+                    <td class="valeur">[fr] France, Alsace<br>Pays/région (ISO-3166): France<a href="/exist/crdo/geonames.xql?code=FR" title="voir plus d'informations sur ce code pays ou cette région">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Date(s):</td>
+                    <td class="valeur">création: start=1980; end=1989; name=années 80<br>mise à disposition: 2004-07-03<br>archivage: 2014-11-04T16:25:54+01:00</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Type(s):</td>
+                    <td class="valeur">
+                        <a target="_blank" href="http://www.language-archives.org/REC/type.html" title="voir la définition des types linguistiques sur OLAC">Type(s) linguistique</a>:     				primary_text<br>
+                        <a target="_blank" href="http://www.language-archives.org/REC/discourse.html" title="voir la définition des types de discours sur OLAC">Type(s) de discours</a>:
+					dialogue<br>Enregistrement sonore</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Sujet(s):</td>
+                    <td class="valeur">
+                        <a target="_blank" href="http://www.language-archives.org/REC/field.html" title="voir la définition des champs linguistiques sur OLAC">Champ(s) linguistique</a>:
+					    lexicography, phonetics, anthropological_linguistics<br>Alsacien (code ISO-639: gsw<a href="/exist/crdo/lexvo.xql?code=gsw" title="en savoir plus sur ce code de langue">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>)</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Langue(s):</td>
+                    <td class="valeur">[fr] Alsacien (code ISO-639: gsw<a href="/exist/crdo/lexvo.xql?code=gsw" title="en savoir plus sur ce code de langue">
+                            <img src="/exist/crdo/img/plus.png" alt="n.c">
+                        </a>)</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Format(s):</td>
+                    <td class="valeur">
+			(IANA MIME Media Type: <a target="_blank" href="http://www.iana.org/assignments/media-types/audio" title="voir les informations sur IANA">audio/x-wav</a>)
+		<br>
+			durée: 0:02H04:16</td>
+                </tr>
+                <tr>
+                    <td class="rubrique" colspan="2">Description de l'accès</td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Droits:</td>
+                    <td class="valeur">Copyright (c) Département de dialectologie alsacienne et mosellane de l'Université de Strasbourg<br>Freely available for non-commercial use<br>
+					Le document est soumis à la
+					<a target="_blank" href="http://creativecommons.org/licenses/by-nc-nd/2.5/" title="Creative Commons License">Licence Creative Commons
+						<img src="http://creativecommons.org/images/public/somerights20.png" alt="n.c">
+                        </a>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Document(s):</td>
+                    <td class="valeur">
+                        <form action="/media-meta.php" method="get" target="_blank">
+                            <select name="file">
+                                <option value="ala/ALA_608_22km.wav">Format de diffusion (.wav)</option>
+                                <option value="ala/ALA_608.mp3">Format de diffusion (.mp3)</option>
+                            </select>
+                            <input alt="télécharger" src="/exist/crdo/img/download.png" type="image" name="submit" title="Télécharger">
+                            <input type="checkbox" name="metadata"> encapsuler les métadonnées
+							<input type="hidden" name="id" value="crdo-ALA_608">
+                        </form>
+                        <div>
+								Le format de conservation (.wav)
+								<a href="http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav" target="_blank">
+                                <img alt="n.c" src="/exist/crdo/img/download.png" title="Télécharger">
+                            </a>
+                        </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="descripteur">Relation(s):</td>
+                    <td class="valeur">Est une partie de la collection <a href="/exist/crdo/meta/crdo-COLLECTION_ALA_CL" title="voir la notice de la ressource">Atlas Linguistique et ethnographique de l'Alsace: Enquêtes sur la conscience linguistique</a>
+                        <br>Est une partie de la collection <a href="/exist/crdo/meta/crdo-COLLECTION_LANGUESDEFRANCE" title="voir la notice de la ressource">Corpus de la parole</a>
+                    </td>
+                </tr>
+            </tbody></table>
+-->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/resources/views/bo/docList.blade.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,21 @@
+@extends('app')
+
+@section('content')
+<div class="container">
+	<div class="row">
+		<div class="col-md-10 col-md-offset-1">
+			<div class="panel panel-default">
+				<div class="panel-heading">@lang('bo.document_list')</div>
+
+				<div class="panel-body">
+					<table class="table-stripped">
+					@foreach ($docs as $doc)
+						<tr><td>{{ $doc->getUri() }}</td><td><a href="{{ route('bo.docs.show',[ 'id' => $doc->getId()]) }}">{{ $doc->getId() }}</a></td></tr>
+					@endforeach
+					</table>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+@endsection
--- a/server/src/resources/views/welcome.blade.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/resources/views/welcome.blade.php	Tue Jun 23 17:01:39 2015 +0200
@@ -1,7 +1,7 @@
 <html>
 	<head>
 		<title>Laravel</title>
-		
+
 		<link href='//fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'>
 
 		<style>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Controllers/DocumentListControllerTest.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,36 @@
+<?php
+
+use CorpusParole\Repositories\DocumentRepository;
+use Mockery as m;
+
+/**
+ *
+ */
+class DocumentListControllerTest extends TestCase {
+
+    private $documentRepository;
+
+    public function setUp() {
+
+        parent::setup();
+
+        // create a mock of the post repository interface and inject it into the
+        // IoC container
+        $this->documentRepository = m::mock('CorpusParole\Repositories\DocumentRepository');
+        $this->app->instance('CorpusParole\Repositories\DocumentRepository', $this->documentRepository);
+    }
+
+    public function tearDown() {
+        m::close();
+        parent::tearDown();
+    }
+
+    public function testIndex() {
+        $this->documentRepository->shouldReceive('all')->once()->andReturn(array());
+
+        $response = $this->call('GET', '/bo/docs');
+
+        $this->assertResponseOk($response);
+        $this->assertViewHas('docs');
+    }
+}
--- a/server/src/tests/ExampleTest.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/tests/ExampleTest.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,16 +2,13 @@
 
 class ExampleTest extends TestCase {
 
-	/**
-	 * A basic functional test example.
-	 *
-	 * @return void
-	 */
-	public function testBasicExample()
-	{
-		$response = $this->call('GET', '/');
+    /**
+     * A basic functional test example.
+     */
+    public function testBasicExample()
+    {
+        $response = $this->call('GET', '/');
 
-		$this->assertEquals(200, $response->getStatusCode());
-	}
-
+        $this->assertEquals(200, $response->getStatusCode());
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Models/DocumentTest.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,196 @@
+<?php
+
+use CorpusParole\Models\Document;
+
+/**
+ *
+ */
+class DocumentTest extends TestCase {
+
+    const TEST_DOC = <<<EOT
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Document> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/description> "Extrait des enqu\u00EAtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> <http://purl.org/dc/dcmitype/Sound> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/9122216> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> _:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> _:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers r\u00E9gionaux de France" .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/rights> "Copyright (c) D\u00E9partement de dialectologie alsacienne et mosellane de l'Universit\u00E9 de Strasbourg" .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608"@fr .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/extent> "PT02H04M16S" .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/created> "start=1980; end=1989; name=ann\u00E9es 80"^^<http://purl.org/dc/terms/Period> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/spatial> "France, Alsace"@fr .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/spatial> "FR"^^<http://purl.org/dc/terms/ISO3166> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/ALA_608.mp3> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/issued> "2014-11-04T16:25:54+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
+<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.openrdf.org/schema/sesame#directType> <http://xmlns.com/foaf/0.1/Document> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://xmlns.com/foaf/0.1/name> "Bothorel-Witz, Arlette" .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://www.openrdf.org/schema/sesame#directType> <http://xmlns.com/foaf/0.1/Agent> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://xmlns.com/foaf/0.1/name> "Huck, Dominique" .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
+_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://www.openrdf.org/schema/sesame#directType> <http://xmlns.com/foaf/0.1/Agent> .
+<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608> <http://xmlns.com/foaf/0.1/primaryTopic> <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> .
+EOT;
+
+    private $testGraph;
+
+    public function setUp() {
+
+        parent::setup();
+        $this->graph = new \EasyRdf_Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentTest::TEST_DOC);
+
+    }
+
+    public function testConstructor() {
+        $this->assertNotNull($this->graph, 'Graph shoud not be null');
+
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertEquals('crdo-ALA_608',$doc->getId(),'Must have the correct id');
+    }
+
+    public function testTitle() {
+        $this->assertNotNull($this->graph, 'Graph shoud not be null');
+
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertEquals("Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608",$doc->getTitle(),'Must have correct title');
+        $this->assertInstanceOf(\EasyRdf_Literal::class, $doc->getTitle(), "Title must be a literal");
+        $this->assertEquals('fr', $doc->getTitle()->getLang(), "Language title must be fr");
+    }
+
+    public function testPublisher() {
+
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertCount(1, $doc->getPublishers(), 'Publisher is an array of size 1');
+        $this->assertEquals(new \EasyRdf_Literal("Atlas linguistiques, cultures et parlers régionaux de France",null,null), $doc->getPublishers()[0], "Must contains correct publisher");
+
+    }
+
+    public function testMediaArray() {
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertCount(3, $doc->getMediaArray(), "Media array must be of size 3");
+        foreach($doc->getMediaArray() as $media) {
+            $this->assertCount(2, $media, "media is a 2 element array");
+            $this->assertArrayHasKey('format', $media, "media has 'format key'");
+            $this->assertArrayHasKey('url', $media, "media has url");
+        }
+    }
+
+    public function testGetTypes() {
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertCount(3, $doc->getTypes(), "types array must be of size 3");
+
+        foreach($doc->getTypes() as $type) {
+            $this->assertThat(
+                $type,
+                $this->logicalXor(
+                    $this->isInstanceOf(\EasyRdf_Literal::class),
+                    $this->isInstanceOf(\EasyRdf_Resource::class)
+                )
+            );
+        }
+    }
+
+    public function testGetOtherTypes() {
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertCount(2, $doc->getOtherTypes(), "types array must be of size 3");
+
+        foreach($doc->getTypes() as $type) {
+            $this->assertThat(
+                $type,
+                $this->logicalXor(
+                    $this->isInstanceOf(\EasyRdf_Literal::class),
+                    $this->isInstanceOf(\EasyRdf_Resource::class)
+                )
+            );
+        }
+    }
+
+    public function testGetDiscourseTypes() {
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $this->assertCount(1, $doc->getDiscourseTypes(), "types array must be of size 1");
+
+        $this->assertContainsOnlyInstancesOf("EasyRdf_Literal", $doc->getDiscourseTypes(), "Result contains only literals");
+        $type = $doc->getDiscourseTypes()[0];
+        $this->assertEquals("dialogue", $type, "discourse type is dialogue");
+        $this->assertEquals("http://www.language-archives.org/OLAC/1.1/discourse-type", $type->getDatatypeUri(), "discourse type url");
+    }
+
+    public function testCloneDocument() {
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+
+        $doc2 = clone $doc;
+
+        $this->assertNotSame($doc, $doc2, "documents must not be the same");
+        $this->assertNotSame($doc->getGraph(), $doc2->getGraph(), "documents must not be the same");
+
+        $this->assertTrue(\EasyRdf_Isomorphic::isomorphic($doc->getGraph(), $doc2->getGraph()),"graph must be isomorphic");
+    }
+
+    public function testIsIsomorphic() {
+        $doc1 = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc2 = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", new \EasyRdf_Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentTest::TEST_DOC));
+
+        $this->assertTrue($doc1->isIsomorphic($doc2),"document must be isomorphic");
+
+        $doc2->addLiteral('dc11:type', new \EasyRdf_Literal("oratory", null, Config::get('OLAC_DISCOURSE_TYPE')['uri']));
+
+        $this->assertFalse($doc1->isIsomorphic($doc2),"document must not be isomorphic");
+    }
+
+    public function testUpdateDiscourseTypes() {
+
+        $newDiscourseTypes = ['oratory','dialogue','narrative'];
+
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $this->assertCount(1, $doc->getDiscourseTypes(), "types array must be of size 1");
+
+        $doc->updateDiscourseTypes($newDiscourseTypes);
+
+        $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3");
+
+        $discourseTypes = $doc->getDiscourseTypes();
+        foreach($newDiscourseTypes as $dt) {
+            $this->assertContains($dt, $discourseTypes, "all discourse types must be in result list");
+        }
+
+    }
+
+    public function testUpdateDiscourseTypesIsomorphic() {
+
+        $newDiscourseTypes = ['oratory','dialogue','narrative'];
+
+        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc->updateDiscourseTypes($newDiscourseTypes);
+
+        $doc2 = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", new \EasyRdf_Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentTest::TEST_DOC));
+
+        $this->assertFalse($doc->isIsomorphic($doc2),"document must not be isomorphic after adding discourse type");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Repositories/DocumentRepositoryTest.php	Tue Jun 23 17:01:39 2015 +0200
@@ -0,0 +1,12 @@
+<?php
+
+class DocumentRepositoryTest extends TestCase {
+
+    public function testBasicExample()
+    {
+        $response = $this->call('GET', '/');
+
+        $this->assertEquals(200, $response->getStatusCode());
+    }
+
+}
--- a/server/src/tests/TestCase.php	Mon Jun 15 19:30:32 2015 +0200
+++ b/server/src/tests/TestCase.php	Tue Jun 23 17:01:39 2015 +0200
@@ -2,18 +2,19 @@
 
 class TestCase extends Illuminate\Foundation\Testing\TestCase {
 
-	/**
-	 * Creates the application.
-	 *
-	 * @return \Illuminate\Foundation\Application
-	 */
-	public function createApplication()
-	{
-		$app = require __DIR__.'/../bootstrap/app.php';
+    protected $baseUrl = '';
 
-		$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
+    /**
+     * Creates the application.
+     *
+     * @return \Illuminate\Foundation\Application
+     */
+    public function createApplication()
+    {
+        $app = require __DIR__.'/../bootstrap/app.php';
 
-		return $app;
-	}
+        $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
 
+        return $app;
+    }
 }