Julio Montoya 11 жил өмнө
parent
commit
31313cc0e2

+ 1 - 0
config/configuration.dist.php

@@ -158,3 +158,4 @@ $_configuration['debug']             = false;
 $_configuration['platform_charset']  = 'utf-8';
 // Show a useful toolbar with memory used, loaded time, request, session, logs information.
 $_configuration['show_profiler']     = false;
+$_configuration['name_order_conventions'] = array();

+ 20 - 29
main/inc/global.inc.php

@@ -205,15 +205,25 @@ $app['template.hide_global_chat'] = true;
 $app['template.load_plugins'] = true;
 $app['configuration'] = $_configuration;
 
+// Inclusion of internationalization libraries
+require_once $libPath.'internationalization.lib.php';
+// Functions for internal use behind this API
+require_once $libPath.'internationalization_internal.lib.php';
+
 $_plugins = array();
 if ($alreadyInstalled) {
-
     /** Including service providers */
     require_once 'services.php';
 }
 
 $charset = 'UTF-8';
 
+// Preserving the value of the global variable $charset.
+$charset_initial_value = $charset;
+
+// Section (tabs in the main Chamilo menu)
+$app['this_section'] = SECTION_GLOBAL;
+
 // Manage Chamilo error messages
 $app->error(
     function (\Exception $e, $code) use ($app) {
@@ -262,17 +272,6 @@ $app->error(
     }
 );
 
-// Preserving the value of the global variable $charset.
-$charset_initial_value = $charset;
-
-// Section (tabs in the main Chamilo menu)
-$app['this_section'] = SECTION_GLOBAL;
-
-// Inclusion of internationalization libraries
-require_once $libPath.'internationalization.lib.php';
-// Functions for internal use behind this API
-require_once $libPath.'internationalization_internal.lib.php';
-
 // Checking if we have a valid language. If not we set it to the platform language.
 $cidReset = null;
 
@@ -286,7 +285,6 @@ if ($alreadyInstalled) {
 
     // require $includePath.'/local.inc.php';
 
-
     /**	Loading languages and sublanguages **/
     // @todo improve the language loading
 
@@ -389,12 +387,6 @@ $language_files[] = 'trad4all';
 $language_files[] = 'notification';
 $language_files[] = 'accessibility';
 
-// @todo Added because userportal and index are loaded by a controller should be fixed when a $app['translator'] is configured
-$language_files[] = 'index';
-$language_files[] = 'courses';
-$language_files[] = 'course_home';
-$language_files[] = 'exercice';
-
 if (isset($language_file)) {
     if (!is_array($language_file)) {
         $language_files[] = $language_file;
@@ -443,10 +435,8 @@ if (is_array($language_files)) {
         }
     }
 }*/
-
 // End loading languages
 
-
 /** Silex Middlewares. */
 
 /** A "before" middleware allows you to tweak the Request before the controller is executed. */
@@ -473,13 +463,12 @@ $app->before(
         }
 
         // Check data folder
-
-        if (!is_writable(api_get_path(SYS_DATA_PATH))) {
+        if (!is_writable($app['sys_data_path'])) {
             $app->abort(500, "data folder must be writable.");
         }
 
         // Checks temp folder permissions.
-        if (!is_writable(api_get_path(SYS_ARCHIVE_PATH))) {
+        if (!is_writable($app['sys_temp_path'])) {
             $app->abort(500, "data/temp folder must be writable.");
         }
 
@@ -488,7 +477,10 @@ $app->before(
             $app->abort(500, '$configuration array must be set in the configuration.php file.');
         }
 
-        if (!isset($app['configuration']['root_web'])) {
+        $configuration = $app['configuration'];
+
+        // Check if root_web exists
+        if (!isset($configuration['root_web'])) {
             $app->abort(500, '$configuration[root_web] must be set in the configuration.php file.');
         }
 
@@ -512,19 +504,18 @@ $app->before(
             $filesystem->copyFolders($app['temp.paths']->copyFolders);
         }
 
-
         // Check and modify the date of user in the track.e.online table
         Online::loginCheck(api_get_user_id());
 
-
         // Setting access_url id (multiple url feature)
 
         if (api_get_multiple_access_url()) {
             $_configuration = $app['configuration'];
             $_configuration['access_url'] = 1;
-
             $access_urls = api_get_access_urls();
-            $protocol = ((!empty($_SERVER['HTTPS']) && strtoupper($_SERVER['HTTPS']) != 'OFF') ? 'https' : 'http').'://';
+
+            //$protocol = ((!empty($_SERVER['HTTPS']) && strtoupper($_SERVER['HTTPS']) != 'OFF') ? 'https' : 'http').'://';
+            $protocol = $request->getScheme().'://';
             $request_url1 = $protocol.$_SERVER['SERVER_NAME'].'/';
             $request_url2 = $protocol.$_SERVER['HTTP_HOST'].'/';
 

+ 1 - 6
main/inc/lib/internationalization.lib.php

@@ -124,14 +124,10 @@ $_api_is_translated_call = false;
  */
 function get_lang($variable, $reserved = null, $language = null)
 {
-    // In order to use $app['translator']
     global $app;
-    if ($app['debug']) {
-        //return $variable;
-    }
-
     $translated = $app['translator']->trans($variable);
     if ($translated == $variable) {
+        // Check the langVariable for BC
         $translated = $app['translator']->trans("lang$variable");
         if ($translated == "lang$variable") {
             return $variable;
@@ -139,7 +135,6 @@ function get_lang($variable, $reserved = null, $language = null)
     }
     return $translated;
 
-
     global $app;
     $language_interface = isset($app['language_interface']) ? $app['language_interface'] : api_get_language_interface();
 

+ 79 - 87
main/inc/lib/internationalization_database/name_order_conventions.php

@@ -7,7 +7,7 @@
  * The following table contains two types of conventions concerning person names:
  *
  * "format" - determines how a full person name to be formatted, i.e. in what order the title, the first_name and the last_name to be placed.
- * You maight need to correct the value for your language. The possible values are:
+ * You might need to correct the value for your language. The possible values are:
  * title first_name last_name  - Western order;
  * title last_name first_name  - Eastern order;
  * title last_name, first_name - Western libraries order.
@@ -19,90 +19,82 @@
  * last_name                   - sorting names with priority for the last name.
  */
 return array(
-	'afrikaans' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'albanian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'alemannic' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'amharic' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'armenian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'arabic' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'asturian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'bosnian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'brazilian' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'breton' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'bulgarian' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'catalan' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'croatian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'czech' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'danish' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'dari' =>             array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'dutch' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'english' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'esperanto' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'estonian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'basque'  =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'finnish' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'french' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'frisian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'friulian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'galician' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'georgian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'german' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'greek' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'hawaiian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'hebrew' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'hindi' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'hungarian' =>        array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'icelandic' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'indonesian' =>       array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'irish' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'italian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'japanese' =>         array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'korean' =>           array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'latin' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'latvian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'lithuanian' =>       array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'macedonian' =>       array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'malay' =>            array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'manx' =>             array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'marathi' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'middle_frisian' =>   array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'mingo' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'nepali' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'norwegian' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'occitan' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'pashto' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'persian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'polish' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'portuguese' =>       array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'quechua_cusco' =>    array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'romanian' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'rumantsch' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'russian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'sanskrit' =>         array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'serbian' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'serbian_cyrillic' => array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'simpl_chinese' =>    array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'slovak' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'slovenian' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-
-	//'spanish' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'last_name'  ),
-	//'spanish' =>          array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'  ),
-	// Some experimental settings for Spanish language:
-	//'spanish' =>          array(  'format' => 'title first_name LAST_NAME',  'sort_by' => 'first_name'  ), // Western order, last name is uppercase when a full name is assembled
-	//'spanish' =>          array(  'format' => 'title first_name LAST_NAME',  'sort_by' => 'last_name'   ), // Western order, last name is uppercase when a full name is assembled
-	'spanish' =>          array(  'format' => 'title last_name, first_name',  'sort_by' => 'last_name'  ), // Library order
-	//'spanish' =>          array(  'format' => 'title LAST_NAME, first_name',  'sort_by' => 'last_name'  ), // Library order, last name is uppercase when a full name is assembled
-
-	'swahili' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'swedish' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'tagalog' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'tamil' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'thai' =>             array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'trad_chinese' =>     array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'turkish' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'ukrainian' =>        array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'vietnamese' =>       array(  'format' => 'title last_name first_name',  'sort_by' => 'last_name'   ), // Eastern order
-	'welsh' =>            array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'yiddish' =>          array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  ),
-	'yoruba' =>           array(  'format' => 'title first_name last_name',  'sort_by' => 'first_name'  )
+    'afrikaans' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'albanian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'alemannic' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'amharic' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'armenian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'arabic' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'asturian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'bosnian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'brazilian' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'breton' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'bulgarian' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'catalan' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'croatian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'czech' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'danish' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'dari' =>             array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'dutch' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'english' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'esperanto' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'estonian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'basque'  =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'finnish' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'french' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'frisian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'friulian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'galician' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'georgian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'german' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'greek' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'hawaiian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'hebrew' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'hindi' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'hungarian' =>        array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'icelandic' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'indonesian' =>       array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'irish' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'italian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'japanese' =>         array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'korean' =>           array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'latin' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'latvian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'lithuanian' =>       array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'macedonian' =>       array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'malay' =>            array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'manx' =>             array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'marathi' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'middle_frisian' =>   array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'mingo' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'nepali' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'norwegian' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'occitan' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'pashto' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'persian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'polish' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'portuguese' =>       array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'quechua_cusco' =>    array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'romanian' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'rumantsch' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'russian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'sanskrit' =>         array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'serbian' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'serbian_cyrillic' => array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'simpl_chinese' =>    array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'slovak' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'slovenian' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'spanish' =>          array('format' => 'title last_name, first_name', 'sort_by' => 'last_name'), // Library order
+    'swahili' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'swedish' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'tagalog' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'tamil' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'thai' =>             array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'trad_chinese' =>     array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'turkish' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'ukrainian' =>        array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'vietnamese' =>       array('format' => 'title last_name first_name',  'sort_by' => 'last_name' ), // Eastern order
+    'welsh' =>            array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'yiddish' =>          array('format' => 'title first_name last_name',  'sort_by' => 'first_name'),
+    'yoruba' =>           array('format' => 'title first_name last_name',  'sort_by' => 'first_name')
 );

+ 2 - 21
main/inc/lib/internationalization_internal.lib.php

@@ -167,9 +167,6 @@ function & _api_compare_n_grams(&$n_grams, $encoding, $max_delta = LANGUAGE_DETE
     return $result;
 }
 
-
-
-
 /**
  * Appendix to "Name order conventions"
  */
@@ -181,26 +178,10 @@ function & _api_compare_n_grams(&$n_grams, $encoding, $max_delta = LANGUAGE_DETE
  * @return mixed			Depending of the requested type, the returned result may be string or boolean; null is returned on error;
  */
 function _api_get_person_name_convention($language, $type) {
-    static $conventions;
+    global $app;
+    $conventions = $app['name_order_conventions'];
     $language = api_purify_language_id($language);
-    if (!isset($conventions)) {
-        $file = dirname(__FILE__).'/internationalization_database/name_order_conventions.php';
 
-        if (file_exists($file)) {
-            $conventions = include $file;
-        } else {
-            $conventions = array('english' => array('format' => 'title first_name last_name', 'sort_by' => 'first_name'));
-        }
-        $search1 = array('FIRST_NAME', 'LAST_NAME', 'TITLE');
-        $replacement1 = array('%F', '%L', '%T');
-        $search2 = array('first_name', 'last_name', 'title');
-        $replacement2 = array('%f', '%l', '%t');
-        foreach (array_keys($conventions) as $key) {
-            $conventions[$key]['format'] = str_replace($search1, $replacement1, $conventions[$key]['format']);
-            $conventions[$key]['format'] = _api_validate_person_name_format(_api_clean_person_name(str_replace('%', ' %', str_ireplace($search2, $replacement2, $conventions[$key]['format']))));
-            $conventions[$key]['sort_by'] = strtolower($conventions[$key]['sort_by']) != 'last_name' ? true : false;
-        }
-    }
     switch ($type) {
         case 'format':
             return is_string($conventions[$language]['format']) ? $conventions[$language]['format'] : '%t %f %l';

+ 41 - 4
main/inc/services.php

@@ -197,8 +197,6 @@ $app->register(new Silex\Provider\FormServiceProvider(), array(
 // URL generator provider
 //$app->register(new Silex\Provider\UrlGeneratorServiceProvider());
 
-// Needed to use the "entity" option in symfony forms
-
 class ManagerRegistry extends AbstractManagerRegistry
 {
     protected $container;
@@ -229,13 +227,27 @@ class ManagerRegistry extends AbstractManagerRegistry
     }
 }
 
-$app['form.extensions'] = $app->share($app->extend('form.extensions', function ($extensions, $app) {
+// Setting up the Manager registry
+$app['manager_registry'] = $app->share(function() use ($app) {
     $managerRegistry = new ManagerRegistry(null, array('db'), array('orm.em'), null, null, $app['orm.proxies_namespace']);
     $managerRegistry->setContainer($app);
-    $extensions[] = new \Symfony\Bridge\Doctrine\Form\DoctrineOrmExtension($managerRegistry);
+    return $managerRegistry;
+});
+
+// Needed to use the "entity" option in Symfony forms
+$app['form.extensions'] = $app->share($app->extend('form.extensions', function ($extensions, $app) {
+    $extensions[] = new \Symfony\Bridge\Doctrine\Form\DoctrineOrmExtension($app['manager_registry']);
     return $extensions;
 }));
 
+// Needed to use the "UniqueEntity" validator
+$app['validator.validator_factory'] = $app->share(function ($app) {
+    $uniqueValidator = new Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator($app['manager_registry']);
+    $factory = new ChamiloLMS\Component\Validator\ConstraintValidatorFactory();
+    $factory->addInstance('doctrine.orm.validator.unique', $uniqueValidator);
+    return $factory;
+});
+
 // Setting Doctrine service provider (DBAL)
 if (isset($app['configuration']['main_database'])) {
 
@@ -570,8 +582,33 @@ class ChamiloServiceProvider implements ServiceProviderInterface
             $mailGenerator = new ChamiloLMS\Component\Mail\MailGenerator($app['twig'], $app['mailer']);
             return $mailGenerator;
         });
+
+
+        // Setting up name conventions
+        $conventions = require_once $app['sys_root'].'main/inc/lib/internationalization_database/name_order_conventions.php';
+        if (isset($configuration['name_order_conventions']) && !empty($configuration['name_order_conventions'])) {
+            $conventions = array_merge($conventions, $configuration['name_order_conventions']);
+        }
+        $search1 = array('FIRST_NAME', 'LAST_NAME', 'TITLE');
+        $replacement1 = array('%F', '%L', '%T');
+        $search2 = array('first_name', 'last_name', 'title');
+        $replacement2 = array('%f', '%l', '%t');
+        $keyConventions = array_keys($conventions);
+        foreach ($keyConventions as $key) {
+            $conventions[$key]['format'] = str_replace($search1, $replacement1, $conventions[$key]['format']);
+            $conventions[$key]['format'] = _api_validate_person_name_format(
+                _api_clean_person_name(
+                    str_replace('%', ' %', str_ireplace($search2, $replacement2, $conventions[$key]['format']))
+                )
+            );
+            $conventions[$key]['sort_by'] = strtolower($conventions[$key]['sort_by']) != 'last_name' ? true : false;
+        }
+        $app['name_order_conventions'] = $conventions;
     }
 
+    /**
+     * @param Application $app
+     */
     public function boot(Application $app)
     {
 

+ 36 - 0
src/ChamiloLMS/Component/Validator/ConstraintValidatorFactory.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace ChamiloLMS\Component\Validator;
+
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
+
+class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
+{
+    protected $validators = array();
+
+    /**
+     * @param $class_name
+     * @param ConstraintValidator $validator
+     */
+    public function addInstance($class_name, ConstraintValidator $validator)
+    {
+        $this->validators[$class_name] = $validator;
+    }
+
+    /**
+     * @param Constraint $constraint
+     * @return \Symfony\Component\Validator\ConstraintValidatorInterface
+     */
+    public function getInstance(Constraint $constraint)
+    {
+        $class_name = $constraint->validatedBy();
+
+        if (!isset($this->validators[$class_name])) {
+            $this->validators[$class_name] = new $class_name();
+        }
+
+        return $this->validators[$class_name];
+    }
+}

+ 3 - 3
src/ChamiloLMS/Controller/BaseController.php

@@ -104,9 +104,9 @@ abstract class BaseController extends FlintController
     abstract protected function getTemplatePath();
 
     /**
-    * Returns the controller alias
+     * Returns the controller alias
      * @example for QuestionScoreController: question_score_controller
-    */
+     */
     abstract protected function getControllerAlias();
 
     /**
@@ -172,7 +172,7 @@ abstract class BaseController extends FlintController
         return array();
     }
 
-     /**
+    /**
      * @see Symfony\Component\Routing\RouterInterface::generate()
      */
     public function generateUrl($name, array $parameters = array(), $reference = UrlGeneratorInterface::ABSOLUTE_PATH)