Index: main/plugin-odf-sync/resources/js/org/ametys/odf/sync/person/ImportPersonTool.i18n.js
===================================================================
--- main/plugin-odf-sync/resources/js/org/ametys/odf/sync/person/ImportPersonTool.i18n.js	(revision 36748)
+++ main/plugin-odf-sync/resources/js/org/ametys/odf/sync/person/ImportPersonTool.i18n.js	(working copy)
@@ -312,9 +312,9 @@
 	{
 		html += "- " + result.countAlreadyImported + "<i18n:text i18n:key="PLUGINS_ODF_UITOOL_IMPORT_PERSON_RESULT_ALREADY_IMPORTED"/>";
 	}
-	if (result.countProgramsFailed &gt; 0)
+	if (result.countFailed &gt; 0)
 	{
-		html += "- " + result.countProgramsFailed + "<i18n:text i18n:key="PLUGINS_ODF_UITOOL_IMPORT_PERSON_RESULT_FAILED"/>";
+		html += "- " + result.countFailed + "<i18n:text i18n:key="PLUGINS_ODF_UITOOL_IMPORT_PERSON_RESULT_FAILED"/>";
 	}
 	
 	org.ametys.odf.sync.AbstractImportTool._lastReport = result.report;
Index: main/plugin-odf-sync/src/org/ametys/plugins/odfsync/person/ImportPersonAction.java
===================================================================
--- main/plugin-odf-sync/src/org/ametys/plugins/odfsync/person/ImportPersonAction.java	(revision 36748)
+++ main/plugin-odf-sync/src/org/ametys/plugins/odfsync/person/ImportPersonAction.java	(working copy)
@@ -102,7 +102,8 @@
                 }
                 else
                 {
-                    report.error("La personne " + parametersToString(params) + " n'a pas été trouvée dans la base des personnes");
+                    countFailed++;
+                    report.error("La personne " + parametersToString(params) + " n'a pas été trouvée ou a été trouvé plusieurs fois dans la base des personnes");
                 }
             }
         }
@@ -117,8 +118,8 @@
         result.put("countImported", countImported);
         result.put("countFailed", countFailed);
         result.put("countAlreadyImported", countAlreadyImported);
-        
-        result.put("report", StringUtils.join(report.getMessages(), "\n"));
+
+        result.put("report", report.report2Html());
         
         Request request = ObjectModelHelper.getRequest(objectModel);
         request.setAttribute(JSonReader.MAP_TO_READ, result);
Index: main/plugin-odf-sync/src/org/ametys/plugins/odfsync/person/SynchronizePersonAction.java
===================================================================
--- main/plugin-odf-sync/src/org/ametys/plugins/odfsync/person/SynchronizePersonAction.java	(revision 36748)
+++ main/plugin-odf-sync/src/org/ametys/plugins/odfsync/person/SynchronizePersonAction.java	(working copy)
@@ -73,47 +73,39 @@
         String contentId = (String) jsParameters.get("contentId");
         String login = ((String) jsParameters.get("code")).toUpperCase();
         
-        if (!login.matches("^([a-z,A-Z,0-9,-,_]+)$"))
-        {
-            result.put("invalidLogin", true);
-            getLogger().error("The login " + login + " is not valid, person can not be synchronized.");
-        }
-        else
+        Person person = _resolver.resolveById(contentId);
+        
+        boolean hasChanges = _syncManager.synchronizePerson(login, person, report, getLogger());
+        
+        if (!report.hasError())
         {
-            Person person = _resolver.resolveById(contentId);
-            
-            boolean hasChanges = _syncManager.synchronizePerson(login, person, report, getLogger());
+            if (report.hasWarning())
+            {
+                result.put("warning", true);
+            }
+            result.put("contentId", contentId);
             
-            if (!report.hasError())
+            if (hasChanges)
             {
-                if (report.hasWarning())
+                result.put("hasChanges", true);
+                try
                 {
-                    result.put("warning", true);
+                    doWorkflowAction (person);
                 }
-                result.put("contentId", contentId);
-                
-                if (hasChanges)
+                catch (WorkflowException e)
                 {
-                    result.put("hasChanges", true);
-                    try
-                    {
-                        doWorkflowAction (person);
-                    }
-                    catch (WorkflowException e)
-                    {
-                        result.put("workflowError", true);
-                        report.error("Le worklow du contenu synchronisé n'a pas été avancé", e);
-                        getLogger().error("Unable to do workflow action after synchronization", e);
-                    }
+                    result.put("workflowError", true);
+                    report.error("Le worklow du contenu synchronisé n'a pas été avancé", e);
+                    getLogger().error("Unable to do workflow action after synchronization", e);
                 }
             }
-            else
-            {
-                result.put("error", true);
-            }
         }
-        
-        result.put("report", StringUtils.join(report.getMessages(), "\n"));
+        else
+        {
+            result.put("error", true);
+        }
+
+        result.put("report", report.report2Html());
         
         Request request = ObjectModelHelper.getRequest(objectModel);
         request.setAttribute(JSonReader.MAP_TO_READ, result);