Index: /extensions/NBC_UserAdvManager/tags/2.15.7/ConfirmMail.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/ConfirmMail.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/ConfirmMail.php	(revision 7001)
@@ -0,0 +1,126 @@
+<?php
+//----------------------------------------------------------- include
+define('PHPWG_ROOT_PATH','./../../');
+
+include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
+
+include_once (UAM_PATH.'include/constants.php');
+include_once (UAM_PATH.'include/functions.inc.php');
+
+$title= l10n('confirm_mail_page_title');
+$page['body_id'] = 'theAboutPage';
+include(PHPWG_ROOT_PATH.'include/page_header.php');
+
+@include(PHPWG_ROOT_PATH.'template/'.$user['template'].
+  '/theme/'.$user['theme'].'/themeconf.inc.php');
+
+
+if (isset($_GET['key']) and isset($_GET['userid']))
+{
+
+  global $user, $lang, $conf, $errors;
+  
+  $key = $_GET['key'];
+  $userid = $_GET['userid'];
+  $redirect = false;
+  
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  if (VerifyConfirmMail($key))
+  {
+    $status = true;
+    
+    log_user($userid, false);
+
+/* We have to get the user's language in database */
+    $query = '
+SELECT '.USER_INFOS_TABLE.'.language
+FROM '.USER_INFOS_TABLE.','.USER_CONFIRM_MAIL_TABLE.'
+WHERE (('.USER_INFOS_TABLE.'.user_id ='.$userid.') AND ('.USER_INFOS_TABLE.'.user_id = '.USER_CONFIRM_MAIL_TABLE.'.user_id))
+;';
+    $data = pwg_db_fetch_assoc(pwg_query($query));
+
+/* Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language */
+    if (empty($data))
+    {
+/* And switch gallery to this language before using personalized and multilangual contents */
+      $language = pwg_get_session_var('lang_switch', $user['language']);
+      switch_lang_to($language);
+    }
+    else
+    {
+/* And switch gallery to this language before using personalized and multilangual contents */
+      switch_lang_to($data['language']);
+      load_language('plugin.lang', UAM_PATH);
+    }
+
+    if (function_exists('get_user_language_desc'))
+    {
+      $custom_text = get_user_language_desc($conf_UAM_ConfirmMail[5]);
+    }
+    else $custom_text = l10n($conf_UAM_ConfirmMail[5]);
+
+    if (isset($conf_UAM[21]) and $conf_UAM[21] == 'true')
+    {
+      $user_idsOK = array();
+      if (!check_consult($userid, $user_idsOK))
+      {
+        $redirect = true;
+      }
+    }
+    
+    $template->assign(
+			array(
+        'REDIRECT'             => $redirect,
+        'STATUS'               => $status,
+				'CONFIRM_MAIL_MESSAGE' => $custom_text,
+			)
+		);
+  }  
+  else
+  {
+    $status = false;
+    if (function_exists('get_user_language_desc'))
+    {
+      $custom_text = get_user_language_desc($conf_UAM_ConfirmMail[6]);
+    }
+    else $custom_text = l10n($conf_UAM_ConfirmMail[6]);
+    
+    $template->assign(
+			array(
+        'REDIRECT'             => $redirect,
+        'STATUS'               => $status,
+				'CONFIRM_MAIL_MESSAGE' => $custom_text,
+			)
+		);
+  }
+}
+
+if (isset($lang['Theme: '.$user['theme']]))
+{
+  $template->assign(
+  	'THEME_ABOUT',l10n('Theme: '.$user['theme'])
+  );
+}
+
+if ( isset($conf['gallery_url']) )
+{
+	$template->assign(
+		array(
+    	'GALLERY_URL' =>
+      		isset($page['gallery_url']) ?
+          		$page['gallery_url'] : $conf['gallery_url'],
+		)
+	);
+}
+
+$template->set_filenames(
+  array(
+  	'confirm_mail'=>dirname(__FILE__).'/template/ConfirmMail.tpl',
+	)
+);
+
+$template->pparse('confirm_mail');
+include(PHPWG_ROOT_PATH.'include/page_tail.php');
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/UAM_admin.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/UAM_admin.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/UAM_admin.php	(revision 7001)
@@ -0,0 +1,1551 @@
+<?php
+
+global $user, $lang, $conf, $errors;
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+// +-----------------------------------------------------------------------+
+// | Check Access and exit when user status is not ok                      |
+// +-----------------------------------------------------------------------+
+check_status(ACCESS_ADMINISTRATOR);
+
+if (!defined('UAM_PATH')) define('UAM_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
+
+//ini_set('error_reporting', E_ALL);
+//ini_set('display_errors', true);
+
+include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
+include_once (PHPWG_ROOT_PATH.'/include/constants.php');
+$my_base_url = get_admin_plugin_menu_link(__FILE__);
+
+load_language('plugin.lang', UAM_PATH);
+load_language('help/plugin.lang', UAM_PATH);
+
+$page['global'] = array();
+$error = array();
+$pattern = '/;/';
+$replacement = '.';
+
+$UAM_Password_Test_Score = 0;
+$UAM_Exclusionlist_Error = false;
+
+// +-----------------------------------------------------------------------+
+// |                            Tabssheet                                  |
+// +-----------------------------------------------------------------------+
+if (!isset($_GET['tab']))
+	$page['tab'] = 'global';
+else
+  $page['tab'] = $_GET['tab'];
+
+$tabsheet = new tabsheet();
+$tabsheet->add('global',
+               l10n('Tab_Global'),
+               $my_base_url.'&amp;tab=global');
+  $tabsheet->add('userlist',
+                 l10n('Tab_UserList'),
+                 $my_base_url.'&amp;tab=userlist');
+$tabsheet->add('usermanager',
+               l10n('Tab_UserManager'),
+               $my_base_url.'&amp;tab=usermanager');
+$tabsheet->add('ghosttracker',
+               l10n('Tab_GhostTracker'),
+               $my_base_url.'&amp;tab=ghosttracker');
+$tabsheet->select($page['tab']);
+$tabsheet->assign();
+
+
+// +-----------------------------------------------------------------------+
+// |                      Getting plugin version                           |
+// +-----------------------------------------------------------------------+
+$plugin =  PluginInfos(UAM_PATH);
+$version = $plugin['version'];
+
+
+// +----------------------------------------------------------+
+// |            FCK Editor for email text fields              |
+// +----------------------------------------------------------+
+
+/* Available only for ConfirmMail return page customization */
+$toolbar = 'Basic';
+$width = '750px';
+$height = '300px';
+$areas = array();
+array_push( $areas,'UAM_ConfirmMail_Custom_Txt1','UAM_ConfirmMail_Custom_Txt2');
+
+if (function_exists('set_fckeditor_instance'))
+{
+  $fcke_config = unserialize($conf['FCKEditor']);
+  foreach($areas as $area)
+  {
+    if (!isset($fcke_config[$area]))
+    {
+      $fcke_config[$area] = false;
+    }
+  }
+  $conf['FCKEditor'] = serialize($fcke_config);
+
+  set_fckeditor_instance($areas, $toolbar, $width, $height);
+}
+
+
+// +-----------------------------------------------------------------------+
+// |                            Tabssheet select                           |
+// +-----------------------------------------------------------------------+
+
+switch ($page['tab'])
+{
+// *************************************************************************
+// +-----------------------------------------------------------------------+
+// |                           Global Config                               |
+// +-----------------------------------------------------------------------+
+// *************************************************************************
+  case 'global':
+
+	if (isset($_POST['submit']) and !is_adviser() and isset($_POST['UAM_Mail_Info']) and isset($_POST['UAM_Username_Char']) and isset($_POST['UAM_Confirm_Mail']) and isset($_POST['UAM_No_Comment_Anonymous']) and isset($_POST['UAM_Password_Enforced']) and isset($_POST['UAM_AdminPassword_Enforced']) and isset($_POST['UAM_GhostUser_Tracker']) and isset($_POST['UAM_Admin_ConfMail']) and isset($_POST['UAM_RedirToProfile']))
+  {
+
+/* General configuration settings */
+		$_POST['UAM_MailInfo_Text'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_MailInfo_Text'])));
+    
+		$_POST['UAM_ConfirmMail_Text'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_ConfirmMail_Text'])));
+
+    $_POST['UAM_GhostTracker_ReminderText'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_GhostTracker_ReminderText'])));
+
+
+/* Check if CR-LF exist at begining and end of mail exclusion list - If yes, removes them */
+    if (preg_match('/^[\s]+/', $_POST['UAM_MailExclusion_List']))
+    {
+      array_push($page['errors'], l10n('mail_exclusionlist_error'));
+      $UAM_Exclusionlist_Error = true;
+    }
+
+		$newconf_UAM = array(
+      $_POST['UAM_Mail_Info'],
+      $_POST['UAM_Confirm_Mail'],
+      (isset($_POST['UAM_No_Confirm_Group'])?$_POST['UAM_No_Confirm_Group']:''),
+      (isset($_POST['UAM_Validated_Group'])?$_POST['UAM_Validated_Group']:''),
+      (isset($_POST['UAM_Validated_Status'])?$_POST['UAM_Validated_Status']:''),
+      $_POST['UAM_No_Comment_Anonymous'],
+      $_POST['UAM_Username_Char'],
+      $_POST['UAM_Username_List'],
+      (isset($_POST['UAM_No_Confirm_Status'])?$_POST['UAM_No_Confirm_Status']:''),
+      $_POST['UAM_MailInfo_Text'],
+      $_POST['UAM_ConfirmMail_Text'],
+      $_POST['UAM_MailExclusion'],
+      $_POST['UAM_MailExclusion_List'],
+      $_POST['UAM_Password_Enforced'],
+      $_POST['UAM_Password_Score'],
+      $_POST['UAM_AdminPassword_Enforced'],
+      $_POST['UAM_GhostUser_Tracker'],
+      $_POST['UAM_GhostTracker_DayLimit'],
+      $_POST['UAM_GhostTracker_ReminderText'],
+      $_POST['UAM_Add_LastVisit_Column'],
+      $_POST['UAM_Admin_ConfMail'],
+      $_POST['UAM_RedirToProfile']);
+
+    $conf['UserAdvManager'] = serialize($newconf_UAM);
+
+		$query = '
+	  	UPDATE '.CONFIG_TABLE.'
+	  	SET value="'.addslashes($conf['UserAdvManager']).'"
+	  	WHERE param="UserAdvManager"
+	  	LIMIT 1
+	  	;';
+		
+		pwg_query($query);
+
+/* Email confirmation settings */
+    $_POST['UAM_ConfirmMail_ReMail_Txt1'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_ConfirmMail_ReMail_Txt1'])));
+
+    $_POST['UAM_ConfirmMail_ReMail_Txt2'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_ConfirmMail_ReMail_Txt2'])));
+    
+    $_POST['UAM_ConfirmMail_Custom_Txt1'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_ConfirmMail_Custom_Txt1'])));
+    
+    $_POST['UAM_ConfirmMail_Custom_Txt2'] = str_replace('\"', '"', str_replace("\'", "'", str_replace("\\\\", "\\", $_POST['UAM_ConfirmMail_Custom_Txt2'])));
+    
+	  $newconf_UAM_ConfirmMail = array (
+      $_POST['UAM_ConfirmMail_TimeOut'],
+      $_POST['UAM_ConfirmMail_Delay'],
+      $_POST['UAM_ConfirmMail_ReMail_Txt1'],
+      $_POST['UAM_ConfirmMail_Remail'],
+      $_POST['UAM_ConfirmMail_ReMail_Txt2'],
+      $_POST['UAM_ConfirmMail_Custom_Txt1'],
+      $_POST['UAM_ConfirmMail_Custom_Txt2']);
+
+    $conf['UserAdvManager_ConfirmMail'] = serialize($newconf_UAM_ConfirmMail);
+    
+	  $query = '
+      UPDATE '.CONFIG_TABLE.'
+			SET value="'.addslashes($conf['UserAdvManager_ConfirmMail']).'"
+			WHERE param="UserAdvManager_ConfirmMail"
+			LIMIT 1
+		;';
+
+		pwg_query($query);
+
+		array_push($page['infos'], l10n('UAM_save_config'));
+  }
+
+
+/* Testing password enforcement */
+  if (isset($_POST['PasswordTest']) and !is_adviser() and isset($_POST['UAM_Password_Test']) and !empty($_POST['UAM_Password_Test']))
+  {
+    $UAM_Password_Test_Score = testpassword($_POST['UAM_Password_Test']);
+  }
+  else if (isset($_POST['PasswordTest']) and !is_adviser() and empty($_POST['UAM_Password_Test']))
+  {
+    array_push($page['errors'], l10n('reg_err_login3'));
+  }
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+/* Group setting for unvalidated and validated users */
+  $groups[-1] = '---------';
+  $No_Valid = -1;
+  $Valid = -1;
+	
+/* Check groups list in database  */
+  $query = '
+SELECT id, name
+FROM '.GROUPS_TABLE.'
+ORDER BY name ASC
+;';
+	
+  $result = pwg_query($query);
+	
+  while ($row = pwg_db_fetch_assoc($result))
+  {
+    $groups[$row['id']] = $row['name'];
+/* configuration value for unvalidated users */
+    if (isset($conf_UAM[2]) and $conf_UAM[2] == $row['id'])
+    {
+	  	$No_Valid = $row['id'];
+		}
+/* configuration value for validated users */
+    if (isset($conf_UAM[3]) and $conf_UAM[3] == $row['id'])
+		{
+	  	$Valid = $row['id'];
+		}
+  }
+	
+/* Template initialization for unvalidated users group */
+  $template->assign(
+    'No_Confirm_Group',
+   	array(
+	  	'group_options'=> $groups,
+	  	'group_selected' => $No_Valid
+			)
+ 		);
+/* Template initialization for validated users group */
+  $template->assign(
+    'Validated_Group',
+		array(
+      'group_options'=> $groups,
+      'group_selected' => $Valid
+			)
+  	);
+	
+/* Status setting for unvalidated and validated users */
+  $status_options[-1] = '------------';
+  $No_Valid_Status = -1;
+  $Valid_Status = -1;
+	
+/* Get status values */
+  foreach (get_enums(USER_INFOS_TABLE, 'status') as $status)
+  {
+	  $status_options[$status] = l10n('user_status_'.$status);
+	  if (isset($conf_UAM[8]) and $conf_UAM[8] == $status)
+	  {
+	    $No_Valid_Status = $status;
+	  }
+	  
+/* Template initialization for unvalidated users group */
+      $template->assign(
+        'No_Confirm_Status',
+        array(
+					'Status_options' => $status_options,
+		  		'Status_selected' => $No_Valid_Status
+					)
+	  		);
+  }
+  
+/* Get status values */
+  foreach (get_enums(USER_INFOS_TABLE, 'status') as $status)
+  {
+	  $status_options[$status] = l10n('user_status_'.$status);
+	  if (isset($conf_UAM[4]) and $conf_UAM[4] == $status)
+		{
+		  $Valid_Status = $status;
+		}
+		
+/* Template initialization for unvalidated users group */
+      $template->assign(
+	    'Confirm_Status',
+	    array(
+		    'Status_options' => $status_options,
+		    'Status_selected' => $Valid_Status
+		    )
+	    );
+	}
+
+/* Save last opened paragraph in configuration tab */
+  $nb_para=(isset($_POST["nb_para"])) ? $_POST["nb_para"]:"";
+  $nb_para2=(isset($_POST["nb_para2"])) ? $_POST["nb_para2"]:"";
+
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+  
+  $template->assign(
+    array(
+    'nb_para'                        => $nb_para,
+    'nb_para2'                       => $nb_para2,
+    'UAM_VERSION'                    => $version,
+    'UAM_PATH'                       => UAM_PATH,
+		'UAM_MAIL_INFO_TRUE'             => $conf_UAM[0]=='true' ?  'checked="checked"' : '' ,
+		'UAM_MAIL_INFO_FALSE'            => $conf_UAM[0]=='false' ?  'checked="checked"' : '' ,
+		'UAM_MAILINFO_TEXT'              => $conf_UAM[9],
+		'UAM_USERNAME_CHAR_TRUE'         => $conf_UAM[6]=='true' ?  'checked="checked"' : '' ,
+		'UAM_USERNAME_CHAR_FALSE'        => $conf_UAM[6]=='false' ?  'checked="checked"' : '' ,
+		'UAM_USERNAME_CHAR_LIST'         => $conf_UAM[7],
+		'UAM_CONFIRM_MAIL_TRUE'          => $conf_UAM[1]=='true' ?  'checked="checked"' : '' ,
+		'UAM_CONFIRM_MAIL_FALSE'         => $conf_UAM[1]=='false' ?  'checked="checked"' : '' ,
+    'UAM_CONFIRM_MAIL_LOCAL'         => $conf_UAM[1]=='local' ?  'checked="checked"' : '' ,
+		'UAM_CONFIRMMAIL_TEXT'           => $conf_UAM[10],
+		'UAM_No_Confirm_Group'           => $conf_UAM[2],
+		'UAM_Validated_Group'            => $conf_UAM[3],
+		'UAM_No_Confirm_Status'          => $conf_UAM[8],
+		'UAM_Validated_Status'           => $conf_UAM[4],
+		'UAM_NO_COMMENT_ANO_TRUE'        => $conf_UAM[5]=='true' ?  'checked="checked"' : '' ,
+		'UAM_NO_COMMENT_ANO_FALSE'       => $conf_UAM[5]=='false' ?  'checked="checked"' : '' ,
+		'UAM_MAILEXCLUSION_TRUE'         => $conf_UAM[11]=='true' ?  'checked="checked"' : '' ,
+		'UAM_MAILEXCLUSION_FALSE'        => $conf_UAM[11]=='false' ?  'checked="checked"' : '' ,
+		'UAM_MAILEXCLUSION_LIST'         => $conf_UAM[12],
+		'UAM_PASSWORDENF_TRUE'           => $conf_UAM[13]=='true' ?  'checked="checked"' : '' ,
+		'UAM_PASSWORDENF_FALSE'          => $conf_UAM[13]=='false' ?  'checked="checked"' : '' ,
+		'UAM_PASSWORD_SCORE'             => $conf_UAM[14],
+    'UAM_ADMINPASSWENF_TRUE'         => $conf_UAM[15]=='true' ?  'checked="checked"' : '' ,
+		'UAM_ADMINPASSWENF_FALSE'        => $conf_UAM[15]=='false' ?  'checked="checked"' : '' ,
+    'UAM_GHOSTRACKER_TRUE'           => $conf_UAM[16]=='true' ?  'checked="checked"' : '' ,
+		'UAM_GHOSTRACKER_FALSE'          => $conf_UAM[16]=='false' ?  'checked="checked"' : '' ,
+    'UAM_GHOSTRACKER_DAYLIMIT'       => $conf_UAM[17],
+    'UAM_GHOSTRACKER_REMINDERTEXT'   => $conf_UAM[18],
+    'UAM_ADDLASTVISIT_TRUE'          => $conf_UAM[19]=='true' ?  'checked="checked"' : '' ,
+    'UAM_ADDLASTVISIT_FALSE'         => $conf_UAM[19]=='false' ?  'checked="checked"' : '' ,
+    'UAM_ADMINCONFMAIL_TRUE'         => $conf_UAM[20]=='true' ?  'checked="checked"' : '' ,
+    'UAM_ADMINCONFMAIL_FALSE'        => $conf_UAM[20]=='false' ?  'checked="checked"' : '' ,
+    'UAM_REDIRTOPROFILE_TRUE'        => $conf_UAM[21]=='true' ?  'checked="checked"' : '' ,
+    'UAM_REDIRTOPROFILE_FALSE'       => $conf_UAM[21]=='false' ?  'checked="checked"' : '' ,
+		'UAM_PASSWORD_TEST_SCORE'        => $UAM_Password_Test_Score,
+    'UAM_ERROR_REPORTS4'             => $UAM_Exclusionlist_Error,
+		'UAM_CONFIRMMAIL_TIMEOUT_TRUE'	 => $conf_UAM_ConfirmMail[0]=='true' ?  'checked="checked"' : '' ,
+		'UAM_CONFIRMMAIL_TIMEOUT_FALSE'  => $conf_UAM_ConfirmMail[0]=='false' ?  'checked="checked"' : '' ,
+		'UAM_CONFIRMMAIL_DELAY'					 => $conf_UAM_ConfirmMail[1],
+    'UAM_CONFIRMMAIL_REMAIL_TRUE'		 => $conf_UAM_ConfirmMail[3]=='true' ? 'checked="checked"' : '',
+    'UAM_CONFIRMMAIL_REMAIL_FALSE'	 => $conf_UAM_ConfirmMail[3]=='false' ? 'checked="checked"' : '',
+    'UAM_CONFIRMMAIL_REMAIL_TXT1'		 => $conf_UAM_ConfirmMail[2],
+    'UAM_CONFIRMMAIL_REMAIL_TXT2'		 => $conf_UAM_ConfirmMail[4],
+    'UAM_CONFIRMMAIL_CUSTOM_TXT1'		 => $conf_UAM_ConfirmMail[5],
+    'UAM_CONFIRMMAIL_CUSTOM_TXT2'		 => $conf_UAM_ConfirmMail[6],
+    )
+  );
+
+  if (isset($_POST['audit']))
+	{
+		$msg_error1 = '';
+		
+/* Username without forbidden keys */
+    if ( isset($conf_UAM[6]) and $conf_UAM[6] == 'true' )
+	  {
+			$query = "
+SELECT ".$conf['user_fields']['username'].", ".$conf['user_fields']['email']."
+  FROM ".USERS_TABLE."
+;";
+			  
+			$result = pwg_query($query);
+			
+			while($row = pwg_db_fetch_assoc($result))
+			{
+				if (!ValidateUsername(stripslashes($row['username'])))
+					$msg_error1 .= (($msg_error1 <> '') ? '<br>' : '') . l10n('Err_audit_username_char').stripslashes($row['username']);
+			}
+		}
+
+		$msg_error2 = '';
+		
+/* Email without forbidden domain */
+    if ( isset($conf_UAM[11]) and $conf_UAM[11] == 'true' )
+	  {
+			$query = "
+SELECT ".$conf['user_fields']['username'].", ".$conf['user_fields']['email']."
+  FROM ".USERS_TABLE."
+;";
+			  
+		  $result = pwg_query($query);
+			
+		  while($row = pwg_db_fetch_assoc($result))
+		  {
+			  $conf_MailExclusion = preg_split("/[\s,]+/",$conf_UAM[12]);
+			  for ($i = 0 ; $i < count($conf_MailExclusion) ; $i++)
+			  {
+					$pattern = '/'.$conf_MailExclusion[$i].'/';
+				  if (preg_match($pattern, $row['mail_address']))
+				  {
+						$msg_error2 .=  (($msg_error2 <> '') ? '<br>' : '') . l10n('Err_audit_email_forbidden').stripslashes($row['username']).' ('.$row['mail_address'].')';
+					}
+				}
+			}
+		}
+		
+    if ($msg_error1 <> '')
+			$errors[] = $msg_error1.'<br><br>';
+		
+		if ($msg_error2 <> '')
+			$errors[] = $msg_error2.'<br><br>';
+		
+		if ($msg_error1 <> '' or $msg_error2 <> '')
+	  	array_push($page['errors'], l10n('Err_audit_advise'));
+		else
+    	array_push($page['infos'], l10n('UAM_audit_ok'));
+	}
+
+
+// +-----------------------------------------------------------------------+
+// |                             errors display                            |
+// +-----------------------------------------------------------------------+
+  if (isset ($errors) and count($errors) != 0)
+  {
+	  $template->assign('errors',array());
+	  foreach ($errors as $error)
+	  {
+		  array_push($page['errors'], $error);
+		}
+	}  
+
+// +-----------------------------------------------------------------------+
+// |                           templates display                           |
+// +-----------------------------------------------------------------------+
+  $template->set_filename('plugin_admin_content', dirname(__FILE__) . '/template/global.tpl');
+  $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
+
+  break;
+
+
+// *************************************************************************
+// +-----------------------------------------------------------------------+
+// |                           Users list page                             |
+// +-----------------------------------------------------------------------+
+// *************************************************************************
+  case 'userlist':
+  
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+  if (isset($conf_UAM[19]) and $conf_UAM[19]=='true')
+  {
+// +-----------------------------------------------------------------------+
+// |                           initialization                              |
+// +-----------------------------------------------------------------------+
+
+		if (!defined('PHPWG_ROOT_PATH'))
+    {
+    	die('Hacking attempt!');
+    }
+          
+    include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+
+// +-----------------------------------------------------------------------+
+// | Check Access and exit when user status is not ok                      |
+// +-----------------------------------------------------------------------+
+		check_status(ACCESS_ADMINISTRATOR);
+
+
+// +-----------------------------------------------------------------------+
+// |                               user list                               |
+// +-----------------------------------------------------------------------+
+
+		$page['filtered_users'] = get_user_list();
+
+// +-----------------------------------------------------------------------+
+// |                           Template Init                               |
+// +-----------------------------------------------------------------------+
+		/*$base_url = PHPWG_ROOT_PATH.'admin.php?page=user_list';
+
+    if (isset($_GET['start']) and is_numeric($_GET['start']))
+    {
+      $start = $_GET['start'];
+    }
+    else
+    {
+      $start = 0;
+    }*/
+
+// +-----------------------------------------------------------------------+
+// |                            navigation bar                             |
+// +-----------------------------------------------------------------------+
+
+/*$url = PHPWG_ROOT_PATH.'admin.php'.get_query_string_diff(array('start'));
+
+$navbar = create_navigation_bar(
+  $url,
+  count($page['filtered_users']),
+  $start,
+  $conf['users_page']
+  );
+
+$template->assign('navbar', $navbar);*/
+
+// +-----------------------------------------------------------------------+
+// |                               user list                               |
+// +-----------------------------------------------------------------------+
+
+    $visible_user_list = array();
+    foreach ($page['filtered_users'] as $num => $local_user)
+    {
+// simulate LIMIT $start, $conf['users_page']
+			/*if ($num < $start)
+      {
+        continue;
+      }
+      if ($num >= $start + $conf['users_page'])
+      {
+        break;
+      }*/
+
+      $visible_user_list[] = $local_user;
+		}
+
+		foreach ($visible_user_list as $local_user)
+    {
+      // dates formating and compare
+      $today = date("d-m-Y"); // Get today's date
+      list($day, $month, $year) = explode('-', $today); // explode date of today						 
+      $daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
+	  	
+      list($regdate, $regtime) = explode(' ', $local_user['lastvisit']); // Explode date and time from registration date
+      list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
+      $regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
+			
+      $deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps	
+      $deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
+      
+      if (isset($conf_UAM[16]) and $conf_UAM[16]=='true' and $conf_UAM[17] <> '')
+      {
+        if ($deltadays <= ($conf_UAM[17]/2))
+        {
+          $display = 'green';
+        }
+        
+        if (($deltadays > ($conf_UAM[17]/2)) and ($deltadays < $conf_UAM[17]))
+        {
+          $display = 'orange';
+        }
+        
+        if ($deltadays >= $conf_UAM[17])
+        {
+          $display = 'red';
+        }
+      }
+      else $display = '';
+
+   		$template->append(
+     		'users',
+       	array(
+       		'ID'          => $local_user['id'],
+         	'USERNAME'    => stripslashes($local_user['username']),
+					'EMAIL'       => get_email_address_as_display_text($local_user['email']),
+          'LASTVISIT'   => $local_user['lastvisit'],
+          'DAYS'        => $deltadays,
+          'DISPLAY'     => $display,
+				)
+			);
+		}
+    /* Plugin version inserted */
+    $template->assign(
+      array(
+        'UAM_VERSION'  => $version,
+        'UAM_PATH'     => UAM_PATH,
+      )
+    );    
+// +-----------------------------------------------------------------------+
+// |                             errors display                            |
+// +-----------------------------------------------------------------------+
+		if ( isset ($errors) and count($errors) != 0)
+		{
+	  	$template->assign('errors',array());
+			foreach ($errors as $error)
+	  	{
+				array_push($page['errors'], $error);
+	  	}
+ 		}  
+
+// +-----------------------------------------------------------------------+
+// |                           templates display                           |
+// +-----------------------------------------------------------------------+
+		$template->set_filename('plugin_admin_content', dirname(__FILE__) . '/template/userlist.tpl');
+    $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');		
+  }
+  else
+  {
+		array_push($page['errors'], l10n('Err_Userlist_Settings'));
+  }
+  break;
+
+
+// *************************************************************************
+// +-----------------------------------------------------------------------+
+// |                           Users manager page                          |
+// +-----------------------------------------------------------------------+
+// *************************************************************************
+  case 'usermanager':
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+	
+  if (isset($conf_UAM[1]) and ($conf_UAM[1]=='true' or $conf_UAM[1]=='local') and ((isset($conf_UAM[2]) and $conf_UAM[2] <> '-1') or (isset($conf_UAM[8]) and $conf_UAM[8] <> '-1')))
+  {   
+// +-----------------------------------------------------------------------+
+// |                           initialization                              |
+// +-----------------------------------------------------------------------+
+
+		if (!defined('PHPWG_ROOT_PATH'))
+    {
+    	die('Hacking attempt!');
+    }
+          
+    include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+
+// +-----------------------------------------------------------------------+
+// | Check Access and exit when user status is not ok                      |
+// +-----------------------------------------------------------------------+
+		check_status(ACCESS_ADMINISTRATOR);
+
+// +-----------------------------------------------------------------------+
+// |                               user list                               |
+// +-----------------------------------------------------------------------+
+
+		$page['filtered_users'] = get_unvalid_user_list();
+
+// +-----------------------------------------------------------------------+
+// |                            selected users                             |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Del_Selected']))
+		{
+  		$collection = array();
+
+			switch ($_POST['target'])
+    	{
+    		case 'all' :
+      	{
+      		foreach($page['filtered_users'] as $local_user)
+        	{
+        		array_push($collection, $local_user['id']);
+        	}
+					break;
+				}
+      	case 'selection' :
+      	{
+      		if (isset($_POST['selection']))
+        	{
+        		$collection = $_POST['selection'];
+        	}
+        	break;
+      	}
+			}
+
+			if (count($collection) == 0)
+    	{
+    		array_push($page['errors'], l10n('Select at least one user'));
+   		}
+		}
+
+// +-----------------------------------------------------------------------+
+// |                             delete users                              |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Del_Selected']) and count($collection) > 0)
+  	{
+  		if (in_array($conf['guest_id'], $collection))
+   		{
+    		array_push($page['errors'], l10n('Guest cannot be deleted'));
+    	}
+    	if (($conf['guest_id'] != $conf['default_user_id']) and
+    		in_array($conf['default_user_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('Default user cannot be deleted'));
+    	}
+    	if (in_array($conf['webmaster_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('Webmaster cannot be deleted'));
+    	}
+    	if (in_array($user['id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('You cannot delete your account'));
+    	}
+
+			if (count($page['errors']) == 0)
+    	{
+    		foreach ($collection as $user_id)
+      	{
+      		delete_user($user_id);
+      	}
+     		array_push(
+      		$page['infos'],
+        	l10n_dec(
+        	'%d user deleted', '%d users deleted',
+        	count($collection)
+        	)
+      	);
+
+      	foreach ($page['filtered_users'] as $filter_key => $filter_user)
+      	{
+      		if (in_array($filter_user['id'], $collection))
+        	{
+        		unset($page['filtered_users'][$filter_key]);
+        	}
+     		}
+			}
+		}
+
+// +-----------------------------------------------------------------------+
+// |                 Resend new validation key to users                    |
+// +-----------------------------------------------------------------------+
+// +-----------------------------------------------------------------------+
+// |                            selected users                             |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Mail_With_Key']))
+		{
+  		$collection = array();
+
+			switch ($_POST['target'])
+    	{
+    		case 'all' :
+      	{
+      		foreach($page['filtered_users'] as $local_user)
+        	{
+        		array_push($collection, $local_user['id']);
+        	}
+        	break;
+				}
+      	case 'selection' :
+      	{
+      		if (isset($_POST['selection']))
+        	{
+        		$collection = $_POST['selection'];
+        	}
+        	break;
+      	}
+			}
+
+    	if (count($collection) == 0)
+    	{
+    		array_push($page['errors'], l10n('Select at least one user'));
+    	}
+		}
+// +-----------------------------------------------------------------------+
+// |                 Resend new validation key to users                    |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Mail_With_Key']) and count($collection) > 0)
+		{
+			if (in_array($conf['guest_id'], $collection))
+   		{
+    		array_push($page['errors'], l10n('No_validation_for_Guest'));
+    	}
+    	if (($conf['guest_id'] != $conf['default_user_id']) and
+    		in_array($conf['default_user_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_default_user'));
+    	}
+   		if (in_array($conf['webmaster_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_Webmaster'));
+    	}
+    	if (in_array($user['id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_your_account'));
+    	}
+
+    	if (count($page['errors']) == 0)
+    	{
+    		foreach ($collection as $user_id)
+      	{     	
+      		$typemail = 1;
+				  $query = "
+SELECT id, username, mail_address
+  FROM ".USERS_TABLE."
+WHERE id = '".$user_id."'
+;";
+					$data = pwg_db_fetch_assoc(pwg_query($query));
+				
+      		ResendMail2User($typemail,$user_id,stripslashes($data['username']),$data['mail_address'],true);
+      	}
+      	array_push(
+      		$page['infos'],
+        	l10n_dec(
+        		'%d_Mail_With_Key', '%d_Mails_With_Key',
+        	count($collection)
+        	)
+      	);
+      	
+				$page['filtered_users'] = get_unvalid_user_list();
+			}
+		}
+
+// +-----------------------------------------------------------------------+
+// |             Send reminder without new key to users                    |
+// +-----------------------------------------------------------------------+
+// +-----------------------------------------------------------------------+
+// |                            selected users                             |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Mail_Without_Key']))
+		{
+  		$collection = array();
+
+			switch ($_POST['target'])
+    	{
+    		case 'all' :
+      	{
+      		foreach($page['filtered_users'] as $local_user)
+        	{
+        		array_push($collection, $local_user['id']);
+        	}
+        	break;
+				}
+      	case 'selection' :
+      	{
+      		if (isset($_POST['selection']))
+        	{
+        		$collection = $_POST['selection'];
+        	}
+        	break;
+      	}
+			}
+
+    	if (count($collection) == 0)
+    	{
+    		array_push($page['errors'], l10n('Select at least one user'));
+    	}
+		}
+// +-----------------------------------------------------------------------+
+// |             Send reminder without new key to users                    |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Mail_Without_Key']) and count($collection) > 0)
+		{
+			if (in_array($conf['guest_id'], $collection))
+   		{
+    		array_push($page['errors'], l10n('No_validation_for_Guest'));
+    	}
+    	if (($conf['guest_id'] != $conf['default_user_id']) and
+    		in_array($conf['default_user_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_default_user'));
+    	}
+   		if (in_array($conf['webmaster_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_Webmaster'));
+    	}
+    	if (in_array($user['id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_your_account'));
+    	}
+
+    	if (count($page['errors']) == 0)
+    	{
+    		foreach ($collection as $user_id)
+      	{
+      		$typemail = 2;
+				  $query = "
+SELECT id, username, mail_address
+  FROM ".USERS_TABLE."
+WHERE id = '".$user_id."'
+;";
+					
+					$data = pwg_db_fetch_assoc(pwg_query($query));
+				
+      		ResendMail2User($typemail,$user_id,stripslashes($data['username']),$data['mail_address'],false);				
+      	}
+      	array_push(
+      		$page['infos'],
+        	l10n_dec(
+        		'%d_Reminder_Sent', '%d_Reminders_Sent',
+       		count($collection)
+        	)
+      	);
+        
+				$page['filtered_users'] = get_unvalid_user_list();
+			}
+		}
+
+// +-----------------------------------------------------------------------+
+// |             								Force validation					                 |
+// +-----------------------------------------------------------------------+
+// +-----------------------------------------------------------------------+
+// |                            selected users                             |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Force_Validation']))
+		{
+  		$collection = array();
+
+			switch ($_POST['target'])
+    	{
+    		case 'all' :
+      	{
+      		foreach($page['filtered_users'] as $local_user)
+        	{
+        		array_push($collection, $local_user['id']);
+        	}
+        	break;
+				}
+      	case 'selection' :
+      	{
+      		if (isset($_POST['selection']))
+        	{
+        		$collection = $_POST['selection'];
+        	}
+        	break;
+      	}
+			}
+
+    	if (count($collection) == 0)
+    	{
+    		array_push($page['errors'], l10n('Select at least one user'));
+    	}
+		}
+// +-----------------------------------------------------------------------+
+// |             								Force validation					                 |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Force_Validation']) and count($collection) > 0)
+		{
+			if (in_array($conf['guest_id'], $collection))
+   		{
+    		array_push($page['errors'], l10n('No_validation_for_Guest'));
+    	}
+    	if (($conf['guest_id'] != $conf['default_user_id']) and
+    		in_array($conf['default_user_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_default_user'));
+    	}
+   		if (in_array($conf['webmaster_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_Webmaster'));
+    	}
+    	if (in_array($user['id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_validation_for_your_account'));
+    	}
+
+    	if (count($page['errors']) == 0)
+    	{
+    		foreach ($collection as $user_id)
+      	{
+				  $query = "
+SELECT id, username, mail_address
+  FROM ".USERS_TABLE."
+WHERE id = '".$user_id."'
+;";
+					
+					$data = pwg_db_fetch_assoc(pwg_query($query));
+				
+      		ForceValidation($data['id']);				
+      	}
+      	array_push(
+      		$page['infos'],
+        	l10n_dec(
+        		'%d_Validated_User', '%d_Validated_Users',
+       		count($collection)
+        	)
+      	);
+
+				$page['filtered_users'] = get_unvalid_user_list();
+			}
+		}
+		
+
+// +-----------------------------------------------------------------------+
+// |                              groups list                              |
+// +-----------------------------------------------------------------------+
+
+		$groups[-1] = '------------';
+
+    $query = '
+SELECT id, name
+  FROM '.GROUPS_TABLE.'
+ORDER BY name ASC
+;';
+
+		$result = pwg_query($query);
+          
+    while ($row = pwg_db_fetch_assoc($result))
+    {
+      $groups[$row['id']] = $row['name'];
+    }
+
+// +-----------------------------------------------------------------------+
+// |                           Template Init                               |
+// +-----------------------------------------------------------------------+
+		/*$base_url = PHPWG_ROOT_PATH.'admin.php?page=user_list';
+
+    if (isset($_GET['start']) and is_numeric($_GET['start']))
+    {
+      $start = $_GET['start'];
+    }
+    else
+    {
+      $start = 0;
+    }*/
+
+/* Hide radio-button if not allow to assign adviser */
+		if ($conf['allow_adviser'])
+    	{
+      	$template->assign('adviser', true);
+    	}
+
+// +-----------------------------------------------------------------------+
+// |                            navigation bar                             |
+// +-----------------------------------------------------------------------+
+
+/*$url = PHPWG_ROOT_PATH.'admin.php'.get_query_string_diff(array('start'));
+
+$navbar = create_navigation_bar(
+  $url,
+  count($page['filtered_users']),
+  $start,
+  $conf['users_page']
+  );
+
+$template->assign('navbar', $navbar);*/
+
+// +-----------------------------------------------------------------------+
+// |                               user list                               |
+// +-----------------------------------------------------------------------+
+
+		$profile_url = get_root_url().'admin.php?page=profile&amp;user_id=';
+		$perm_url = get_root_url().'admin.php?page=user_perm&amp;user_id=';
+
+    $visible_user_list = array();
+    foreach ($page['filtered_users'] as $num => $local_user)
+    {
+/* simulate LIMIT $start, $conf['users_page'] */
+			/*if ($num < $start)
+      {
+        continue;
+      }
+      if ($num >= $start + $conf['users_page'])
+      {
+        break;
+      }*/
+
+      $visible_user_list[] = $local_user;
+		}
+
+		foreach ($visible_user_list as $local_user)
+    {
+      $groups_string = preg_replace(
+      	'/(\d+)/e',
+        "\$groups['$1']",
+        implode(
+        	', ',
+            $local_user['groups']
+         )
+			);
+
+      $query = '
+SELECT user_id, reminder
+FROM '.USER_CONFIRM_MAIL_TABLE.'
+WHERE user_id = '.$local_user['id'].'
+;';
+      $result = pwg_query($query);
+      
+      $row = pwg_db_fetch_assoc($result);
+    
+      if (isset($row['reminder']) and $row['reminder'] == 'true')
+      {
+        $reminder = l10n('Reminder_Sent_OK');
+      }
+      else if ((isset($row['reminder']) and $row['reminder'] == 'false') or !isset($row['reminder']))
+      {
+        $reminder = l10n('Reminder_Sent_NOK');
+      }
+
+
+	  	if (isset($_POST['pref_submit'])
+    		and isset($_POST['selection'])
+      	and in_array($local_user['id'], $_POST['selection']))
+	  	{
+				$checked = 'checked="checked"';
+	  	}
+			else
+    	{
+    		$checked = '';
+    	}
+
+    	$properties = array();
+    	if ( $local_user['level'] != 0 )
+			{
+    		$properties[] = l10n( sprintf('Level %d', $local_user['level']) );
+			}
+    	$properties[] =
+    		(isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true'))
+      		? l10n('is_high_enabled') : l10n('is_high_disabled');
+
+			$expiration = expiration($local_user['id']);
+      
+   		$template->append(
+     		'users',
+       	array(
+       		'ID'               => $local_user['id'],
+         	'CHECKED'          => $checked,
+         	'U_PROFILE'        => $profile_url.$local_user['id'],
+         	'U_PERM'           => $perm_url.$local_user['id'],
+         	'USERNAME'         => stripslashes($local_user['username'])
+                                  .($local_user['id'] == $conf['guest_id']
+                                  ? '<BR>['.l10n('is_the_guest').']' : '')
+                                  .($local_user['id'] == $conf['default_user_id']
+                                  ? '<BR>['.l10n('is_the_default').']' : ''),
+                                  'STATUS' => l10n('user_status_'
+                                  .$local_user['status']).(($local_user['adviser'] == 'true')
+                                  ? '<BR>['.l10n('adviser').']' : ''),
+					'EMAIL'            => get_email_address_as_display_text($local_user['email']),
+         	'GROUPS'           => $groups_string,
+         	'REGISTRATION'     => $local_user['registration_date'],
+          'REMINDER'         => $reminder,    
+         	'EXPIRATION'       => $expiration,
+				)
+			);
+		}   
+
+    // Check if validation of register is made by admin or visitor 
+    // If visitor, $Confirm_Local is used to mask useless buttons
+    $Confirm_Local = "";
+    
+    if ($conf_UAM[1] == 'local')
+    {
+      $Confirm_Local = $conf_UAM[1];
+    }
+    else
+    {
+      $Confirm_Local = "";
+    } 
+    
+    /* Plugin version inserted */
+    $template->assign(
+      array(
+        'CONFIRM_LOCAL'=> $Confirm_Local,
+        'UAM_VERSION'  => $version,
+        'UAM_PATH'     => UAM_PATH,
+      )
+    );
+
+// +-----------------------------------------------------------------------+
+// |                             errors display                            |
+// +-----------------------------------------------------------------------+
+		if ( isset ($errors) and count($errors) != 0)
+		{
+	  	$template->assign('errors',array());
+			foreach ($errors as $error)
+	  	{
+				array_push($page['errors'], $error);
+	  	}
+		}  
+
+// +-----------------------------------------------------------------------+
+// |                           templates display                           |
+// +-----------------------------------------------------------------------+
+		$template->set_filename('plugin_admin_content', dirname(__FILE__) . '/template/usermanager.tpl');
+    $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');		
+	}
+  else
+  {
+		array_push($page['errors'], l10n('Err_UserManager_Settings'));
+  }
+  break;
+
+
+// *************************************************************************
+// +-----------------------------------------------------------------------+
+// |                           Ghost Tracker page                          |
+// +-----------------------------------------------------------------------+
+// *************************************************************************
+  case 'ghosttracker':
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+	
+  if (isset($conf_UAM[16]) and $conf_UAM[16]=='true')
+  {
+// +-----------------------------------------------------------------------+
+// |                           initialization                              |
+// +-----------------------------------------------------------------------+
+
+		if (!defined('PHPWG_ROOT_PATH'))
+    {
+    	die('Hacking attempt!');
+    }
+          
+    include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+
+// +-----------------------------------------------------------------------+
+// | Check Access and exit when user status is not ok                      |
+// +-----------------------------------------------------------------------+
+		check_status(ACCESS_ADMINISTRATOR);
+
+// +-----------------------------------------------------------------------+
+// |                               user list                               |
+// +-----------------------------------------------------------------------+
+
+		$page['filtered_users'] = get_ghost_user_list();
+
+// +-----------------------------------------------------------------------+
+// |                            selected users                             |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Del_Selected']))
+		{
+  		$collection = array();
+
+			switch ($_POST['target'])
+    	{
+    		case 'all' :
+      	{
+      		foreach($page['filtered_users'] as $local_user)
+        	{
+        		array_push($collection, $local_user['id']);
+        	}
+					break;
+				}
+      	case 'selection' :
+      	{
+      		if (isset($_POST['selection']))
+        	{
+        		$collection = $_POST['selection'];
+        	}
+        	break;
+      	}
+			}
+
+			if (count($collection) == 0)
+    	{
+    		array_push($page['errors'], l10n('Select at least one user'));
+   		}
+		}
+
+// +-----------------------------------------------------------------------+
+// |                             delete users                              |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Del_Selected']) and count($collection) > 0)
+  	{
+  		if (in_array($conf['guest_id'], $collection))
+   		{
+    		array_push($page['errors'], l10n('Guest cannot be deleted'));
+    	}
+    	if (($conf['guest_id'] != $conf['default_user_id']) and
+    		in_array($conf['default_user_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('Default user cannot be deleted'));
+    	}
+    	if (in_array($conf['webmaster_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('Webmaster cannot be deleted'));
+    	}
+    	if (in_array($user['id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('You cannot delete your account'));
+    	}
+
+			if (count($page['errors']) == 0)
+    	{
+    		foreach ($collection as $user_id)
+      	{
+      		delete_user($user_id);
+      	}
+     		array_push(
+      		$page['infos'],
+        	l10n_dec(
+        	'%d user deleted', '%d users deleted',
+        	count($collection)
+        	)
+      	);
+
+      	foreach ($page['filtered_users'] as $filter_key => $filter_user)
+      	{
+      		if (in_array($filter_user['id'], $collection))
+        	{
+        		unset($page['filtered_users'][$filter_key]);
+        	}
+     		}
+			}
+		}
+
+// +-----------------------------------------------------------------------+
+// |                          Send ghost reminder                          |
+// +-----------------------------------------------------------------------+
+// +-----------------------------------------------------------------------+
+// |                            selected users                             |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Reminder_Email']))
+		{
+  		$collection = array();
+
+			switch ($_POST['target'])
+    	{
+    		case 'all' :
+      	{
+      		foreach($page['filtered_users'] as $local_user)
+        	{
+        		array_push($collection, $local_user['id']);
+        	}
+        	break;
+				}
+      	case 'selection' :
+      	{
+      		if (isset($_POST['selection']))
+        	{
+        		$collection = $_POST['selection'];
+        	}
+        	break;
+      	}
+			}
+
+    	if (count($collection) == 0)
+    	{
+    		array_push($page['errors'], l10n('Select at least one user'));
+    	}
+		}
+// +-----------------------------------------------------------------------+
+// |                         Send ghost reminder                           |
+// +-----------------------------------------------------------------------+
+		if (isset($_POST['Reminder_Email']) and count($collection) > 0)
+		{
+			if (in_array($conf['guest_id'], $collection))
+   		{
+    		array_push($page['errors'], l10n('No_reminder_for_Guest'));
+    	}
+    	if (($conf['guest_id'] != $conf['default_user_id']) and
+    		in_array($conf['default_user_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_reminder_for_default_user'));
+    	}
+   		if (in_array($conf['webmaster_id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_reminder_for_Webmaster'));
+    	}
+    	if (in_array($user['id'], $collection))
+    	{
+    		array_push($page['errors'], l10n('No_reminder_for_your_account'));
+    	}
+
+    	if (count($page['errors']) == 0)
+    	{
+    		foreach ($collection as $user_id)
+      	{
+				  $query = "
+SELECT id, username, mail_address
+  FROM ".USERS_TABLE."
+WHERE id = '".$user_id."'
+;";
+					
+					$data = pwg_db_fetch_assoc(pwg_query($query));
+				
+      		ghostreminder($user_id,stripslashes($data['username']),$data['mail_address']);				
+      	}
+      	array_push(
+      		$page['infos'],
+        	l10n_dec(
+        		'%d_Reminder_Sent', '%d_Reminders_Sent',
+       		count($collection)
+        	)
+      	);
+      	
+				$page['filtered_users'] = get_ghost_user_list();
+			}
+		}
+    
+    if (isset($_POST['GhostTracker_Init']))
+    {
+      /* Reset is only allowed for admins ! */
+      if (is_admin() and !is_adviser())
+      {
+        $query1 = '
+SELECT *
+  FROM '.USER_LASTVISIT_TABLE.';';
+
+        $count = pwg_db_num_rows(pwg_query($query1));
+
+        if ($count <> 0)
+        {
+          $query = '
+SELECT DISTINCT u.id,
+                ui.status AS status
+FROM '.USERS_TABLE.' AS u
+  INNER JOIN '.USER_INFOS_TABLE.' AS ui
+    ON u.id = ui.user_id
+WHERE u.id NOT IN (SELECT user_id FROM '.USER_LASTVISIT_TABLE.')
+  AND status != "webmaster"
+  AND status != "guest"
+  AND status != "admin"
+ORDER BY u.id ASC
+;';
+
+          $result = pwg_query($query);
+          
+          while ($row = pwg_db_fetch_assoc($result))
+          {
+            list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+            
+            $query = "
+INSERT INTO ".USER_LASTVISIT_TABLE." (user_id, lastvisit, reminder)
+VALUES ('".$row['id']."','".$dbnow."','false')
+;";
+            pwg_query($query);
+          }
+        }
+        else if ($count == 0)
+        {
+          $query = '
+SELECT DISTINCT u.id,
+                ui.status AS status
+FROM '.USERS_TABLE.' AS u
+  INNER JOIN '.USER_INFOS_TABLE.' AS ui
+    ON u.id = ui.user_id
+WHERE status != "webmaster"
+  AND status != "guest"
+  AND status != "admin"
+ORDER BY u.id ASC
+;';
+
+          $result = pwg_query($query);
+          
+          while($row = pwg_db_fetch_assoc($result))
+          {
+            list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+            
+            $query = "
+INSERT INTO ".USER_LASTVISIT_TABLE." (user_id, lastvisit, reminder)
+VALUES ('".$row['id']."','".$dbnow."','false')
+;";
+            pwg_query($query);
+          }
+        }
+        
+        array_push($page['infos'], l10n('GhostTracker_Init_OK'));
+      }
+    }
+
+// +-----------------------------------------------------------------------+
+// |                           Template Init                               |
+// +-----------------------------------------------------------------------+
+		/*$base_url = PHPWG_ROOT_PATH.'admin.php?page=user_list';
+
+    if (isset($_GET['start']) and is_numeric($_GET['start']))
+    {
+      $start = $_GET['start'];
+    }
+    else
+    {
+      $start = 0;
+    }*/
+
+/* Hide radio-button if not allow to assign adviser */
+		if ($conf['allow_adviser'])
+    {
+      $template->assign('adviser', true);
+   	}
+
+// +-----------------------------------------------------------------------+
+// |                            navigation bar                             |
+// +-----------------------------------------------------------------------+
+
+/*$url = PHPWG_ROOT_PATH.'admin.php'.get_query_string_diff(array('start'));
+
+$navbar = create_navigation_bar(
+  $url,
+  count($page['filtered_users']),
+  $start,
+  $conf['users_page']
+  );
+
+$template->assign('navbar', $navbar);*/
+
+// +-----------------------------------------------------------------------+
+// |                               user list                               |
+// +-----------------------------------------------------------------------+
+
+    $visible_user_list = array();
+    foreach ($page['filtered_users'] as $num => $local_user)
+    {
+/* simulate LIMIT $start, $conf['users_page'] */
+			/*if ($num < $start)
+      {
+        continue;
+      }
+      if ($num >= $start + $conf['users_page'])
+      {
+        break;
+      }*/
+
+      $visible_user_list[] = $local_user;
+		}
+
+/* Plugin version inserted */
+      $template->assign(
+        array(
+          'UAM_VERSION'  => $version,
+          'UAM_PATH'     => UAM_PATH,
+        )
+      );
+
+		foreach ($visible_user_list as $local_user)
+    {
+      $reminder = '';
+    
+      if (isset($local_user['reminder']) and $local_user['reminder'] == 'true')
+      {
+        $reminder = l10n('Reminder_Sent_OK');
+      }
+      else if (isset($local_user['reminder']) and $local_user['reminder'] == 'false')
+      {
+        $reminder = l10n('Reminder_Sent_NOK');
+      }
+    
+      if (isset($_POST['pref_submit']) and isset($_POST['selection']) and in_array($local_user['id'], $_POST['selection']))
+	  	{
+				$checked = 'checked="checked"';
+	  	}
+			else
+    	{
+    		$checked = '';
+    	}
+
+      $template->append(
+     	  'users',
+       	array(
+       		'ID'          => $local_user['id'],
+         	'CHECKED'     => $checked,
+         	'USERNAME'    => stripslashes($local_user['username']),
+					'EMAIL'       => get_email_address_as_display_text($local_user['email']),
+          'LASTVISIT'   => $local_user['lastvisit'],
+          'REMINDER'    => $reminder,
+				)
+			);
+		}
+
+// +-----------------------------------------------------------------------+
+// |                             errors display                            |
+// +-----------------------------------------------------------------------+
+		if ( isset ($errors) and count($errors) != 0)
+		{
+	  	$template->assign('errors',array());
+			foreach ($errors as $error)
+	  	{
+				array_push($page['errors'], $error);
+	  	}
+		}  
+
+// +-----------------------------------------------------------------------+
+// |                           templates display                           |
+// +-----------------------------------------------------------------------+
+		$template->set_filename('plugin_admin_content', dirname(__FILE__) . '/template/ghosttracker.tpl');
+    $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');		
+	}
+  else
+  {
+		array_push($page['errors'], l10n('Err_GhostTracker_Settings'));
+  }
+
+  break;
+}
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/ghosttracker.tpl
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/ghosttracker.tpl	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/ghosttracker.tpl	(revision 7001)
@@ -0,0 +1,103 @@
+﻿{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"}
+{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"}
+{known_script id="jquery.tablesorter" src=$UAM_PATH|@cat:"admin/template/js/jquery.tablesorter.js"}
+{known_script id="jquery.tablesorter.pager" src=$UAM_PATH|@cat:"admin/template/js/jquery.tablesorter.pager.js"}
+
+{html_head}<link rel="stylesheet" type="text/css" href="{$UAM_PATH}admin/template/uam.css">{/html_head}
+
+<script type="text/javascript">
+jQuery().ready(function()
+{ldelim}
+  jQuery('.cluetip').cluetip(
+  {ldelim}
+    width: 600,
+    splitTitle: '|'
+  {rdelim});
+{rdelim});
+
+$(document).ready(function() 
+    {ldelim}
+      $("#sorting")
+      .tablesorter({ldelim}sortList:[[4,1]], headers: {ldelim} 0: {ldelim} sorter: false {rdelim}{rdelim}{rdelim})
+      .tablesorterPager({ldelim}container: $("#pager"), positionFixed: false, size: 20, totalPages: 0{rdelim});
+    {rdelim} 
+);
+</script>
+
+<div class="titrePage">
+  <h2>{'Title_Tab'|@translate} {$UAM_VERSION}<br>{'SubTitle4'|@translate}</h2>
+</div>
+
+<form method="post" action="" class="general">
+  <fieldset>
+  	<legend>{'GT_Init'|@translate}</legend>
+    <ul>
+		  <li>
+        <label>{'UAM_GhostTracker_Init'|@translate}</label><br><br>
+      </li>
+    </ul>
+    <p><input class="submit" type="submit" value="{'GT_Reset'|@translate}" name="GhostTracker_Init" ></p>
+  </fieldset>
+  
+  <fieldset>
+    <legend class="cluetip" title="{'UAM_gtTitle'|translate}|{'UAM_gtTitle_d'|translate}">{'GhostTracker_Title'|@translate}</legend>
+        <table id="sorting" class="table2" width="97%" summary="">
+          <thead>
+            <tr class="throw">
+              <th>&nbsp;</th>
+              <th>{'Username'|@translate}</th>
+              <th>{'Profile'|@translate}</th>
+              <th>{'Email address'|@translate}</th>
+              <th>{'LastVisit_Date'|@translate}</th>
+              <th>{'Reminder'|@translate}</th>
+            </tr>
+          </thead>
+          <tbody>
+          {foreach from=$users item=user name=users_loop}
+            <tr class="{if $smarty.foreach.users_loop.index is odd}row1{else}row2{/if}">
+              <td><input type="checkbox" name="selection[]" value="{$user.ID}" {$user.CHECKED} id="selection-{$user.ID}" ></td>
+              <td><label for="selection-{$user.ID}">{$user.USERNAME}</label></td>
+              <td style="text-align:center;"><a href="./admin.php?page=profile&amp;user_id={$user.ID}" title="{'Profile'|@translate}" onclick="window.open(this.href); return false;"><img src="{$UAM_PATH}admin/template/icon/edit_s.png"></a></td>
+              <td>{$user.EMAIL}</td>
+{if $user.REMINDER == l10n('Reminder_Sent_NOK')}
+              <td style="color:orange;text-align:center;">{$user.LASTVISIT}</td>
+              <td style="color:orange;text-align:center;">{$user.REMINDER}</td>
+{else $user.REMINDER == l10n('Reminder_Sent_OK')}
+              <td style="color:red;text-align:center;">{$user.LASTVISIT}</td>
+              <td style="color:red;text-align:center;">{$user.REMINDER}</td>
+{/if}
+              {foreach from=$user.plugin_columns item=data}
+                <td>{$data}</td>
+              {/foreach}    			
+            </tr>
+          {/foreach}
+        </tbody>
+        </table>
+<div id="pager" class="pager">
+	<form>
+		<img src="{$UAM_PATH}admin/template/icon/first.png" class="first">
+		<img src="{$UAM_PATH}admin/template/icon/prev.png" class="prev">
+		<input type="text" class="pagedisplay">
+		<img src="{$UAM_PATH}admin/template/icon/next.png" class="next">
+		<img src="{$UAM_PATH}admin/template/icon/last.png" class="last">
+		<select class="pagesize">
+			<option  value="10">10</option>
+			<option selected="selected" value="20">20</option>
+			<option value="30">30</option>
+			<option value="40">40</option>
+		</select>
+	</form>
+</div>
+        <br>
+<p>
+  {'target'|@translate}
+  <label><input type="radio" name="target" value="all" > {'all'|@translate}</label>
+  <label><input type="radio" name="target" value="selection" checked="checked" > {'selection'|@translate}</label>
+</p>
+
+<p>
+  <input class="submit" type="submit" value="{'Delete_selected'|@translate}" name="Del_Selected" >
+  <input class="submit" type="submit" value="{'Reminder'|@translate}" name="Reminder_Email" >
+</p>
+  </fieldset>
+</form>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/global.tpl
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/global.tpl	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/global.tpl	(revision 7001)
@@ -0,0 +1,541 @@
+{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"}
+{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"}
+
+{html_head}<link rel="stylesheet" type="text/css" href="{$UAM_PATH}admin/template/uam.css">{/html_head}
+
+<script type="text/javascript">
+jQuery().ready(function()
+{ldelim}
+  jQuery('.cluetip').cluetip(
+  {ldelim}
+    width: 550,
+    splitTitle: '|'
+  {rdelim});
+{rdelim});
+
+function blockToggleDisplay(headerId, contentId)
+{ldelim}
+  var revHeader = document.getElementById(headerId);
+  var revContent = document.getElementById(contentId);
+
+  if (revContent.style.display == 'none')
+  {ldelim}
+    revContent.style.display = 'block';
+    revHeader.className = 'instructionBlockHeaderExpanded';
+  {rdelim}
+  else
+  {ldelim}
+    revContent.style.display = 'none';
+    revHeader.className = 'instructionBlockHeaderCollapsed';
+  {rdelim}
+{rdelim}
+
+function uam_blockToggleDisplay( headerId, contentId )
+{ldelim}
+  if (typeof(headerId)=='string')
+  {ldelim}
+   if ( headerId.length>  1)
+       blockToggleDisplay(headerId, contentId) ;
+      document.getElementById("nb_para").value =headerId ;
+      document.getElementById("nb_para2").value =contentId;
+  {rdelim}
+{rdelim}
+</script>
+
+<div class="titrePage">
+  <h2>{'Title_Tab'|@translate} {$UAM_VERSION}<br>{'SubTitle1'|@translate}</h2>
+</div>
+
+<form method="post" action="" class="general">
+
+  <p>
+    <input class="submit" type="submit" value="{'submit'|@translate}" name="submit" {$TAG_INPUT_ENABLED}>
+      &nbsp;
+    <input class="submit" type="submit" value="{'audit'|@translate}" name="audit">
+  </p>
+
+  <input name="nb_para" id="nb_para" type="text" value="{$nb_para}" style="display:none"> 
+  <input name="nb_para2" id="nb_para2" type="text" value="{$nb_para2}" style="display:none"> 
+
+  <div id="instructionConfig1" class="instructionBlock" >
+
+    <div id="config1_header" class="instructionBlockHeaderCollapsed" onclick="uam_blockToggleDisplay('config1_header', 'Config1')">
+      <span class="cluetip" title="{'UAM_restricTitle'|translate}|{'UAM_restricTitle_d'|translate}">
+        {'UAM_Title1'|@translate}
+      </span>
+    </div>
+
+    <div id="Config1" class="instructionBlockContent" style="display:none">
+      <fieldset>
+        <ul>
+          <li>
+            <label class="cluetip" title="{'UAM_carexcTitle'|translate}|{'UAM_carexcTitle_d'|translate}">
+              {'UAM_Username_Char'|@translate}
+            </label>
+          <br><br>
+            <input type="radio" value="false" {$UAM_USERNAME_CHAR_FALSE} name="UAM_Username_Char">
+              {'UAM_Username_Char_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_USERNAME_CHAR_TRUE} name="UAM_Username_Char">
+              {'UAM_Username_Char_true'|@translate}
+            <div id="uam_leftmargin">
+              <input type="text" name="UAM_Username_List" value="{$UAM_USERNAME_CHAR_LIST}" size="20" style="text-align: center;">
+            </div>
+          <br><br>
+          </li>
+      
+          <li>
+            <label class="cluetip" title="{'UAM_passwTitle'|translate}|{'UAM_passwTitle_d'|translate}">
+              {'UAM_Password_Enforced'|@translate}
+            </label>
+          <br><br>
+            <input type="radio" value="false" {$UAM_PASSWORDENF_FALSE} name="UAM_Password_Enforced">
+              {'UAM_Password_Enforced_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_PASSWORDENF_TRUE} name="UAM_Password_Enforced">
+              {'UAM_Password_Enforced_true'|@translate}&nbsp;
+            <input type="text" name="UAM_Password_Score" value="{$UAM_PASSWORD_SCORE}" size="5" style="text-align: center;">
+          <br><br>
+            {'UAM_PasswordTest'|@translate}
+              <input class="cluetip" title="{'UAM_passwtestTitle'|translate}|{'UAM_passwtestTitle_d'|translate}" type="text" name="UAM_Password_Test" value="{$UAM_PASSWORD_TEST}" size="50" style="text-align: left;">
+              &nbsp;&nbsp;&nbsp;
+              <input class="submit" type="submit" value="{'PasswordTest'|@translate}" name="PasswordTest">
+              &nbsp;&nbsp;&nbsp;{'UAM_ScoreTest'|@translate}{$UAM_PASSWORD_TEST_SCORE}
+            <br><br>
+          </li>
+
+          <ul>
+            <li>
+              <label class="cluetip" title="{'UAM_passwadmTitle'|translate}|{'UAM_passwadmTitle_d'|translate}">
+                {'UAM_AdminPassword_Enforced'|@translate}
+              </label>
+            <br><br>
+              <input type="radio" value="false" {$UAM_ADMINPASSWENF_FALSE} name="UAM_AdminPassword_Enforced">
+                {'UAM_AdminPassword_Enforced_false'|@translate}<br>        
+              <input type="radio" value="true" {$UAM_ADMINPASSWENF_TRUE} name="UAM_AdminPassword_Enforced">
+                {'UAM_AdminPassword_Enforced_true'|@translate}
+              <br><br>
+            </li>
+          </ul>
+      
+          <li>
+            <label class="cluetip" title="{'UAM_mailexcTitle'|translate}|{'UAM_mailexcTitle_d'|translate}">
+              {'UAM_MailExclusion'|@translate}
+            </label>
+          <br><br>
+            <input type="radio" value="false" {$UAM_MAILEXCLUSION_FALSE} name="UAM_MailExclusion">
+              {'UAM_MailExclusion_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_MAILEXCLUSION_TRUE} name="UAM_MailExclusion">
+              {'UAM_MailExclusion_true'|@translate}
+            <br><br>
+          </li>
+
+          {if $UAM_MAILEXCLUSION_TRUE}
+            {if $UAM_ERROR_REPORTS4}     
+              <div id="uam_leftmargin">
+                <textarea class="uam_textfields" name="UAM_MailExclusion_List" id="UAM_MailExclusion_List" rows="3" style="color: red" {$TAG_INPUT_ENABLED}>{$UAM_MAILEXCLUSION_LIST}</textarea>
+              </div>
+            <br><br>
+            {else}
+              <div id="uam_leftmargin">
+                <textarea class="uam_textfields" name="UAM_MailExclusion_List" id="UAM_MailExclusion_List" rows="3" {$TAG_INPUT_ENABLED}>{$UAM_MAILEXCLUSION_LIST}</textarea>
+              </div>
+            <br><br>
+            {/if}
+          {else}
+            <div id="uam_leftmargin">
+              <textarea class="uam_textfields" name="UAM_MailExclusion_List" id="UAM_MailExclusion_List" rows="3" readonly {$TAG_INPUT_ENABLED}>{$UAM_MAILEXCLUSION_LIST}</textarea>
+            </div>
+          <br><br>
+          {/if}
+        </ul>
+      </fieldset>
+    </div>
+  </div>
+
+
+
+
+  <div id="instructionConfig2" class="instructionBlock" >
+
+    <div id="config2_header" class="instructionBlockHeaderCollapsed" onclick="uam_blockToggleDisplay('config2_header', 'Config2')">
+      <span class="cluetip" title="{'UAM_confirmTitle'|translate}|{'UAM_confirmTitle_d'|translate}">
+        {'UAM_Title2'|@translate}
+      </span>
+    </div>
+  
+    <div id="Config2" class="instructionBlockContent" style="display:none">
+      <fieldset>
+        <ul>
+          <li>
+            <label class="cluetip" title="{'UAM_infomailTitle'|translate}|{'UAM_infomailTitle_d'|translate}">
+              {'UAM_Mail_Info'|@translate}
+            </label>
+          <br><br>
+            <input type="radio" value="false" {$UAM_MAIL_INFO_FALSE} name="UAM_Mail_Info">
+              {'UAM_Mail_Info_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_MAIL_INFO_TRUE} name="UAM_Mail_Info">
+              {'UAM_Mail_Info_true'|@translate}
+            <br><br>
+          </li>
+
+          <ul>
+            {if $UAM_MAIL_INFO_TRUE}
+              <li>
+                <label class="cluetip" title="{'UAM_infotxtTitle'|translate}|{'UAM_infotxtTitle_d'|translate}">
+                  {'UAM_MailInfo_Text'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_MailInfo_Text" id="UAM_MailInfo_Text" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_MAILINFO_TEXT}</textarea>
+              <br><br>
+              </li>
+            {else}
+              <li>
+                <label class="cluetip" title="{'UAM_infotxtTitle'|translate}|{'UAM_infotxtTitle_d'|translate}">
+                  {'UAM_MailInfo_Text'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_MailInfo_Text" id="UAM_MailInfo_Text" rows="10" readonly {$TAG_INPUT_ENABLED}>{$UAM_MAILINFO_TEXT}</textarea>
+              <br><br>
+              </li>
+            {/if}
+<!--
+            {* if 'FCK_PATH'|@defined *}
+              <div style="text-align:right;">
+                <a href="#" onClick="toogleEditor('UAM_MailInfo_Text'); return false;">FCK Editor On/Off</a>
+              </div>
+            {* /if *}
+-->
+          </ul>
+
+        	<li>
+            <label class="cluetip" title="{'UAM_confirmmailTitle'|translate}|{'UAM_confirmmailTitle_d'|translate}">
+              {'UAM_Confirm_Mail'|@translate}
+            </label>
+         <br><br>
+            <input type="radio" value="false" {$UAM_CONFIRM_MAIL_FALSE} name="UAM_Confirm_Mail">
+              {'UAM_Confirm_Mail_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_CONFIRM_MAIL_TRUE} name="UAM_Confirm_Mail">
+              {'UAM_Confirm_Mail_true'|@translate}<br>
+            <input type="radio" value="local" {$UAM_CONFIRM_MAIL_LOCAL} name="UAM_Confirm_Mail">
+              {'UAM_Confirm_Mail_local'|@translate}
+            <br><br>
+        	</li>
+
+          <ul>
+         	  <li>
+              <label class="cluetip" title="{'UAM_adminconfmailTitle'|translate}|{'UAM_adminconfmailTitle_d'|translate}">
+                {'UAM_AdminConfMail'|@translate}
+              </label>
+            <br><br>
+              <input type="radio" value="false" {$UAM_ADMINCONFMAIL_FALSE} name="UAM_Admin_ConfMail">
+                {'UAM_Admin_ConfMail_false'|@translate}<br>
+              <input type="radio" value="true" {$UAM_ADMINCONFMAIL_TRUE} name="UAM_Admin_ConfMail">
+                {'UAM_Admin_ConfMail_true'|@translate}
+              <br><br>
+            </li>
+            
+            {if $UAM_CONFIRM_MAIL_TRUE}
+              <li>
+                <label class="cluetip" title="{'UAM_confirmtxtTitle'|translate}|{'UAM_confirmtxtTitle_d'|translate}">
+                  {'UAM_ConfirmMail_Text'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_ConfirmMail_Text" id="UAM_ConfirmMail_Text" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_TEXT}</textarea>
+              <br><br>
+              </li>
+            {else}
+              <li>
+                <label class="cluetip" title="{'UAM_confirmtxtTitle'|translate}|{'UAM_confirmtxtTitle_d'|translate}">
+                  {'UAM_ConfirmMail_Text'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_ConfirmMail_Text" id="UAM_ConfirmMail_Text" rows="10" readonly {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_TEXT}</textarea>
+              <br><br>
+              </li>
+            {/if}
+<!--
+            {* if 'FCK_PATH'|@defined *}
+              <div style="text-align:right;">
+                <a href="#" onClick="toogleEditor('UAM_ConfirmMail_Text'); return false;">FCK Editor On/Off</a>
+              </div>
+            {* /if *}
+-->
+            {if $UAM_CONFIRM_MAIL_TRUE}
+              <li>
+                <label class="cluetip" title="{'UAM_confirmmail_custom1'|translate}|{'UAM_confirmmail_custom1_d'|translate}">
+                  {'UAM_confirmmail_custom_Txt1'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_ConfirmMail_Custom_Txt1" id="UAM_ConfirmMail_Custom_Txt1" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_CUSTOM_TXT1}</textarea>
+              <br><br>
+              </li>
+              {if 'FCK_PATH'|@defined}
+                <div style="text-align:right;">
+                  <a href="#" onClick="toogleEditor('UAM_ConfirmMail_Custom_Txt1'); return false;">FCK Editor On/Off</a>
+                </div>
+              {/if}
+
+              <li>
+                <label class="cluetip" title="{'UAM_confirmmail_custom2'|translate}|{'UAM_confirmmail_custom2_d'|translate}">
+                  {'UAM_confirmmail_custom_Txt2'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_ConfirmMail_Custom_Txt2" id="UAM_ConfirmMail_Custom_Txt2" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_CUSTOM_TXT2}</textarea>
+              <br><br>
+              </li>
+              {if 'FCK_PATH'|@defined}
+                <div style="text-align:right;">
+                  <a href="#" onClick="toogleEditor('UAM_ConfirmMail_Custom_Txt2'); return false;">FCK Editor On/Off</a>
+                </div>
+              {/if}
+            {else}
+              <li>
+                <label class="cluetip" title="{'UAM_confirmmail_custom1'|translate}|{'UAM_confirmmail_custom1_d'|translate}">
+                  {'UAM_confirmmail_custom_Txt1'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_ConfirmMail_Custom_Txt1" id="UAM_ConfirmMail_Custom_Txt1" rows="10" readonly {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_CUSTOM_TXT1}</textarea>
+              <br><br>
+              </li>
+
+              <li>
+                <label class="cluetip" title="{'UAM_confirmmail_custom2'|translate}|{'UAM_confirmmail_custom2_d'|translate}">
+                  {'UAM_confirmmail_custom_Txt2'|@translate}
+                </label>
+              <br><br>
+                <textarea class="uam_textfields" name="UAM_ConfirmMail_Custom_Txt2" id="UAM_ConfirmMail_Custom_Txt2" rows="10" readonly {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_CUSTOM_TXT2}</textarea>
+              <br><br>
+              </li>
+            {/if}
+          </ul>
+
+          <br><hr><br>
+        
+          <div id="uam_notice">{'UAM_Confirm_grpstat_notice'|@translate}</div>
+            <br>
+            <li>
+              <label class="cluetip" title="{'UAM_confirmgrpTitle'|translate}|{'UAM_confirmgrpTitle_d'|translate}">
+                {'UAM_Confirm_Group'|@translate}
+              </label>
+            <br><br>
+            </li>
+
+            <ul>
+              <li>
+                <label>
+                  {'UAM_No_Confirm_Group'|@translate}
+                </label><br>
+                <div id="uam_leftmargin">
+                  {html_options name="UAM_No_Confirm_Group" options=$No_Confirm_Group.group_options selected=$No_Confirm_Group.group_selected}
+                </div>
+                <br><br>
+              </li>
+      
+              <li>
+                <label>
+                  {'UAM_Validated_Group'|@translate}
+                </label><br>
+                <div id="uam_leftmargin">
+                  {html_options name="UAM_Validated_Group" options=$Validated_Group.group_options selected=$Validated_Group.group_selected}
+                </div>
+                <br><br>
+              </li>
+            </ul>
+
+            <li>
+              <label class="cluetip" title="{'UAM_confirmstatTitle'|translate}|{'UAM_confirmstatTitle_d'|translate}">
+                {'UAM_Confirm_Status'|@translate}
+              </label>
+            <br><br>
+            </li>
+
+            <ul>
+              <li>
+                <label>
+                  {'UAM_No_Confirm_Status'|@translate}
+                </label><br>
+                <div id="uam_leftmargin">
+                  {html_options name="UAM_No_Confirm_Status" options=$No_Confirm_Status.Status_options selected=$No_Confirm_Status.Status_selected}
+                </div>
+                <br><br>
+              </li>
+
+              <li>
+                <label>
+                  {'UAM_Validated_Status'|@translate}
+                </label><br>
+                <div id="uam_leftmargin">
+                  {html_options name="UAM_Validated_Status" options=$Confirm_Status.Status_options selected=$Confirm_Status.Status_selected}
+                </div>
+                <br><br>
+              </li>
+            </ul>
+
+            <br><hr><br>
+
+            <li>
+              <label class="cluetip" title="{'UAM_validationlimitTitle'|translate}|{'UAM_validationlimitTitle_d'|translate}">
+                {'UAM_ValidationLimit_Info'|@translate}
+              </label>
+            <br><br>
+              <input type="radio" value="false" {$UAM_CONFIRMMAIL_TIMEOUT_FALSE} name="UAM_ConfirmMail_TimeOut">
+                 {'UAM_ConfirmMail_TimeOut_false'|@translate}<br>
+              <input type="radio" value="true" {$UAM_CONFIRMMAIL_TIMEOUT_TRUE} name="UAM_ConfirmMail_TimeOut">
+                 {'UAM_ConfirmMail_TimeOut_true'|@translate}
+              <input type="text" name="UAM_ConfirmMail_Delay" value="{$UAM_CONFIRMMAIL_DELAY}" size="5" style="text-align: center;"><br><br>
+            </li>
+
+            <li>
+              <label class="cluetip" title="{'UAM_remailTitle'|translate}|{'UAM_remailTitle_d'|translate}">
+                {'UAM_ConfirmMail_Remail'|@translate}
+              </label>
+            <br><br>
+              <input type="radio" value="false" {$UAM_CONFIRMMAIL_REMAIL_FALSE} name="UAM_ConfirmMail_Remail">
+                 {'UAM_ConfirmMail_Remail_false'|@translate}<br>
+              <input type="radio" value="true" {$UAM_CONFIRMMAIL_REMAIL_TRUE} name="UAM_ConfirmMail_Remail">
+                 {'UAM_ConfirmMail_Remail_true'|@translate}<br><br>
+            </li>
+
+            <ul>
+              {if $UAM_CONFIRMMAIL_REMAIL_TRUE}
+                <li>
+                  <label class="cluetip" title="{'UAM_remailtxt1Title'|translate}|{'UAM_remailtxt1Title_d'|translate}">
+                    {'UAM_ConfirmMail_ReMail_Txt1'|@translate}
+                  </label>
+                <br><br>
+                  <textarea class="uam_textfields" name="UAM_ConfirmMail_ReMail_Txt1" id="UAM_ConfirmMail_ReMail_Txt1" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_REMAIL_TXT1}</textarea>
+                <br><br>
+                </li>
+              {else}
+                <li>
+                  <label class="cluetip" title="{'UAM_remailtxt1Title'|translate}|{'UAM_remailtxt1Title_d'|translate}">
+                    {'UAM_ConfirmMail_ReMail_Txt1'|@translate}
+                  </label>
+                <br><br>
+                  <textarea class="uam_textfields" name="UAM_ConfirmMail_ReMail_Txt1" id="UAM_ConfirmMail_ReMail_Txt1" rows="10" readonly{$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_REMAIL_TXT1}</textarea>
+                <br><br>
+                </li>
+              {/if}
+<!--
+              {* if 'FCK_PATH'|@defined *}
+                <div style="text-align:right;">
+                  <a href="#" onClick="toogleEditor('UAM_ConfirmMail_ReMail_Txt1'); return false;">FCK Editor On/Off</a>
+                </div>
+              {* /if *}
+-->
+
+              {if $UAM_CONFIRMMAIL_REMAIL_TRUE}
+                <li>
+                  <label class="cluetip" title="{'UAM_remailtxt2Title'|translate}|{'UAM_remailtxt2Title_d'|translate}">
+                    {'UAM_ConfirmMail_ReMail_Txt2'|@translate}
+                  </label>
+                <br><br>
+                  <textarea class="uam_textfields" name="UAM_ConfirmMail_ReMail_Txt2" id="UAM_ConfirmMail_ReMail_Txt2" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_REMAIL_TXT2}</textarea><br>
+                </li>
+              {else}
+                <li>
+                  <label class="cluetip" title="{'UAM_remailtxt2Title'|translate}|{'UAM_remailtxt2Title_d'|translate}">
+                    {'UAM_ConfirmMail_ReMail_Txt2'|@translate}
+                  </label>
+                <br><br>
+                  <textarea class="uam_textfields" name="UAM_ConfirmMail_ReMail_Txt2" id="UAM_ConfirmMail_ReMail_Txt2" rows="10" readonly {$TAG_INPUT_ENABLED}>{$UAM_CONFIRMMAIL_REMAIL_TXT2}</textarea>
+                <br><br>
+                </li>
+              {/if}
+<!--
+              {* if 'FCK_PATH'|@defined *}
+                <div style="text-align:right;">
+                  <a href="#" onClick="toogleEditor('UAM_ConfirmMail_ReMail_Txt2'); return false;">FCK Editor On/Off</a>
+                </div>
+              {* /if *}
+-->
+            </ul>
+        </ul>
+      </fieldset>
+    </div>
+  </div>
+
+
+  <div id="instructionConfig3" class="instructionBlock" >
+
+    <div id="config3_header" class="instructionBlockHeaderCollapsed" onclick="uam_blockToggleDisplay('config3_header', 'Config3')">
+      <span class="cluetip" title="{'UAM_miscTitle'|translate}|{'UAM_miscTitle_d'|translate}">{'UAM_Title3'|@translate}</span>
+    </div>
+  
+    <div id="Config3" class="instructionBlockContent" style="display:none">
+      <fieldset>
+        <ul>
+          <li><label class="cluetip" title="{'UAM_ghosttrackerTitle'|translate}|{'UAM_ghosttrackerTitle_d'|translate}">{'UAM_GhostTracker'|@translate}</label><br><br>
+            <input type="radio" value="false" {$UAM_GHOSTRACKER_FALSE} name="UAM_GhostUser_Tracker">{'UAM_GhostTracker_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_GHOSTRACKER_TRUE} name="UAM_GhostUser_Tracker">{'UAM_GhostTracker_true'|@translate}<input type="text" name="UAM_GhostTracker_DayLimit" value="{$UAM_GHOSTRACKER_DAYLIMIT}" size="5" style="text-align: center;"><br><br>
+          </li>
+        
+          <ul>
+            {if $UAM_GHOSTRACKER_TRUE}
+              <li><label class="cluetip" title="{'UAM_gttextTitle'|translate}|{'UAM_gttextTitle_d'|translate}">{'UAM_GhostTracker_ReminderText'|@translate}</label><br><br>
+                <textarea class="uam_textfields" name="UAM_GhostTracker_ReminderText" id="UAM_GhostTracker_ReminderText" rows="10" {$TAG_INPUT_ENABLED}>{$UAM_GHOSTRACKER_REMINDERTEXT}</textarea><br><br>
+              </li>
+            {else}
+              <li><label class="cluetip" title="{'UAM_gttextTitle'|translate}|{'UAM_gttextTitle_d'|translate}">{'UAM_GhostTracker_ReminderText'|@translate}</label><br><br>
+                <textarea class="uam_textfields" name="UAM_GhostTracker_ReminderText" id="UAM_GhostTracker_ReminderText" rows="10" readonly {$TAG_INPUT_ENABLED}>{$UAM_GHOSTRACKER_REMINDERTEXT}</textarea><br><br>
+              </li>
+            {/if}
+<!--
+            {* if 'FCK_PATH'|@defined *}
+              <div style="text-align:right;">
+                <a href="#" onClick="toogleEditor('UAM_GhostTracker_ReminderText'); return false;">FCK Editor On/Off</a>
+              </div>
+            {* /if *}
+-->
+          </ul>
+    
+          <li><label class="cluetip" title="{'UAM_lastvisitTitle'|translate}|{'UAM_lastvisitTitle_d'|translate}">{'UAM_LastVisit'|@translate}</label><br><br>
+            <input type="radio" value="false" {$UAM_ADDLASTVISIT_FALSE} name="UAM_Add_LastVisit_Column">{'UAM_LastVisit_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_ADDLASTVISIT_TRUE} name="UAM_Add_LastVisit_Column">{'UAM_LastVisit_true'|@translate}<br><br>
+          </li>
+
+          <li><label class="cluetip" title="{'UAM_commentTitle'|translate}|{'UAM_commentTitle_d'|translate}">{'UAM_No_Comment_Anonymous'|@translate}</label><br><br>
+            <input type="radio" value="false" {$UAM_NO_COMMENT_ANO_FALSE} name="UAM_No_Comment_Anonymous">{'UAM_No_Comment_Anonymous_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_NO_COMMENT_ANO_TRUE} name="UAM_No_Comment_Anonymous">{'UAM_No_Comment_Anonymous_true'|@translate}<br><br>
+          </li>
+
+          <li><label class="cluetip" title="{'UAM_RedirTitle'|translate}|{'UAM_RedirTitle_d'|translate}">{'UAM_RedirToProfile'|@translate}</label><br><br>
+            <input type="radio" value="false" {$UAM_REDIRTOPROFILE_FALSE} name="UAM_RedirToProfile">{'UAM_RedirToProfile_false'|@translate}<br>
+            <input type="radio" value="true" {$UAM_REDIRTOPROFILE_TRUE} name="UAM_RedirToProfile">{'UAM_RedirToProfile_true'|@translate}<br><br>
+          </li>
+        </ul>
+      </fieldset>
+    </div>
+  </div>
+
+  <p>
+    <input class="submit" type="submit" value="{'submit'|@translate}" name="submit" {$TAG_INPUT_ENABLED} >&nbsp;<input class="submit" type="submit" value="{'audit'|@translate}" name="audit">
+  </p>
+</form>
+
+<div id="instructionTips" class="instructionBlock" >
+  <div id="Tips_header" class="instructionBlockHeaderCollapsed" onclick="uam_blockToggleDisplay('Tips_header', 'Tips')">
+    <span class="cluetip" title="{'UAM_tipsTitle'|translate}|{'UAM_tipsTitle_d'|translate}">{'UAM_Title4'|@translate}</span>
+  </div>
+  
+  <div id="Tips" class="instructionBlockContent" style="display:none">
+    <fieldset>
+      <div id="Tips1_header" class="instructionBlockHeaderCollapsed" onclick="uam_blockToggleDisplay('Tips1_header', 'Tips1')">
+        <span>{'UAM_Tips1'|@translate}</span>
+      </div>
+      <div id="Tips1" class="instructionBlockContent" style="display:none">
+        <fieldset>
+          {'UAM_Tips1_txt'|@translate}
+        </fieldset>
+      </div>
+    </fieldset>
+  </div>
+</div>
+<fieldset>
+  {'UAM_Support_txt'|@translate}
+</fieldset>
+
+<script type="text/javascript">
+  var n1=document.getElementById("nb_para").value;
+  var n2=document.getElementById("nb_para2").value;
+   uam_blockToggleDisplay(n1,n2);
+</script>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/icon/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/icon/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/icon/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery-latest.js
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery-latest.js	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery-latest.js	(revision 7001)
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.3 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-02-06 00:21:25 -0500 (Wed, 06 Feb 2008) $
+ * $Rev: 4663 $
+ */
+(function(){if(window.jQuery)var _jQuery=window.jQuery;var jQuery=window.jQuery=function(selector,context){return new jQuery.prototype.init(selector,context);};if(window.$)var _$=window.$;window.$=jQuery;var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;var isSimple=/^.[^:#\[\.]*$/;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}else if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem)if(elem.id!=match[3])return jQuery().find(selector);else{this[0]=elem;this.length=1;return this;}else
+selector=[];}}else
+return new jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return new jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(selector.constructor==Array&&selector||(selector.jquery||selector.length&&selector!=window&&!selector.nodeType&&selector[0]!=undefined&&selector[0].nodeType)&&jQuery.makeArray(selector)||[selector]);},jquery:"1.2.3",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;this.each(function(i){if(this==elem)ret=i;});return ret;},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value==undefined)return this.length&&jQuery[type||"attr"](this[0],name)||undefined;else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return!selector?this:this.pushStack(jQuery.merge(this.get(),selector.constructor==String?jQuery(selector).get():selector.length!=undefined&&(!selector.nodeName||jQuery.nodeName(selector,"form"))?selector:[selector]));},is:function(selector){return selector?jQuery.multiFilter(selector,this).length>0:false;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=value.constructor==Array?value:[value];jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this.length?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value==null){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data==undefined&&this.length)data=jQuery.data(this[0],key);return data==null&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script")){scripts=scripts.add(elem);}else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.prototype.init.prototype=jQuery.prototype;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==1){target=this;i=0;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){if(target===options[name])continue;if(deep&&options[name]&&typeof options[name]=="object"&&target[name]&&!options[name].nodeType)target[name]=jQuery.extend(target[name],options[name]);else if(options[name]!=undefined)target[name]=options[name];}return target;};var expando="jQuery"+(new Date()).getTime(),uuid=0,windowData={};var exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i;jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/function/i.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.appendChild(script);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!=undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){if(args){if(object.length==undefined){for(var name in object)if(callback.apply(object[name],args)===false)break;}else
+for(var i=0,length=object.length;i<length;i++)if(callback.apply(object[i],args)===false)break;}else{if(object.length==undefined){for(var name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var i=0,length=object.length,value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret;function color(elem){if(!jQuery.browser.safari)return false;var ret=document.defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(elem.style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=elem.style.outline;elem.style.outline="0 solid black";elem.style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&elem.style&&elem.style[name])ret=elem.style[name];else if(document.defaultView&&document.defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var getComputedStyle=document.defaultView.getComputedStyle(elem,null);if(getComputedStyle&&!color(elem))ret=getComputedStyle.getPropertyValue(name);else{var swap=[],stack=[];for(var a=elem;a&&color(a);a=a.parentNode)stack.unshift(a);for(var i=0;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(getComputedStyle&&getComputedStyle.getPropertyValue(name))||"";for(var i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var style=elem.style.left,runtimeStyle=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;elem.style.left=ret||0;ret=elem.style.pixelLeft+"px";elem.style.left=style;elem.runtimeStyle.left=runtimeStyle;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem=elem.toString();if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var fix=jQuery.isXMLDoc(elem)?{}:jQuery.props;if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(fix[name]){if(value!=undefined)elem[fix[name]]=value;return elem[fix[name]];}else if(jQuery.browser.msie&&name=="style")return jQuery.attr(elem.style,"cssText",value);else if(value==undefined&&jQuery.browser.msie&&jQuery.nodeName(elem,"form")&&(name=="action"||name=="method"))return elem.getAttributeNode(name).nodeValue;else if(elem.tagName){if(value!=undefined){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem.setAttribute(name,""+value);}if(jQuery.browser.msie&&/href|src/.test(name)&&!jQuery.isXMLDoc(elem))return elem.getAttribute(name,2);return elem.getAttribute(name);}else{if(name=="opacity"&&jQuery.browser.msie){if(value!=undefined){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseFloat(value).toString()=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100).toString():"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(value!=undefined)elem[name]=value;return elem[name];}},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(typeof array!="array")for(var i=0,length=array.length;i<length;i++)ret.push(array[i]);else
+ret=array.slice(0);return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]==elem)return i;return-1;},merge:function(first,second){if(jQuery.browser.msie){for(var i=0;second[i];i++)if(second[i].nodeType!=8)first.push(second[i]);}else
+for(var i=0;second[i];i++)first.push(second[i]);return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv&&callback(elems[i],i)||inv&&!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!==null&&value!=undefined){if(value.constructor!=Array)value=[value];ret=ret.concat(value);}}return ret;}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength",selectedIndex:"selectedIndex",defaultValue:"defaultValue",tagName:"tagName",nodeName:"nodeName"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false;var re=quickChild;var m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[];var cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&(!elem||n!=elem))r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval!=undefined)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=function(){return fn.apply(this,arguments);};handler.data=data;handler.guid=fn.guid;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){var val;if(typeof jQuery=="undefined"||jQuery.event.triggered)return val;val=jQuery.event.handle.apply(arguments.callee.elem,arguments);return val;});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data||[]);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event)data.unshift(this.fix({type:type,target:elem}));data[0].type=type;if(exclusive)data[0].exclusive=true;if(jQuery.isFunction(jQuery.data(elem,"handle")))val=jQuery.data(elem,"handle").apply(elem,data);if(!fn&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val;event=jQuery.event.fix(event||window.event||{});var parts=event.type.split(".");event.type=parts[0];var handlers=jQuery.data(this,"events")&&jQuery.data(this,"events")[event.type],args=Array.prototype.slice.call(arguments,1);args.unshift(event);for(var j in handlers){var handler=handlers[j];args[0].handler=handler;args[0].data=handler.data;if(!parts[1]&&!event.exclusive||handler.type==parts[1]){var ret=handler.apply(this,args);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}if(jQuery.browser.msie)event.target=event.preventDefault=event.stopPropagation=event.handler=event.data=null;return val;},fix:function(event){var originalEvent=event;event=jQuery.extend({},originalEvent);event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=originalEvent.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){return this.each(function(){jQuery.event.add(this,type,function(event){jQuery(this).unbind(event);return(fn||data).apply(this,arguments);},fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){if(this[0])return jQuery.event.trigger(type,data,this[0],false,fn);return undefined;},toggle:function(){var args=arguments;return this.click(function(event){this.lastToggle=0==this.lastToggle?1:0;event.preventDefault();return args[this.lastToggle].apply(this,arguments)||false;});},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.apply(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({load:function(url,params,callback){if(jQuery.isFunction(url))return this.bind("load",url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=(new Date).getTime();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){var jsonp,jsre=/=\?(&|$)/g,status,data;s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(s.type.toLowerCase()=="get"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&s.type.toLowerCase()=="get"){var ts=(new Date()).getTime();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&s.type.toLowerCase()=="get"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");if((!s.url.indexOf("http")||!s.url.indexOf("//"))&&s.dataType=="script"&&s.type.toLowerCase()=="get"){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xml=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();xml.open(s.type,s.url,s.async,s.username,s.password);try{if(s.data)xml.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xml.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xml.setRequestHeader("X-Requested-With","XMLHttpRequest");xml.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend)s.beforeSend(xml);if(s.global)jQuery.event.trigger("ajaxSend",[xml,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xml&&(xml.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xml)&&"error"||s.ifModified&&jQuery.httpNotModified(xml,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xml,s.dataType);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xml.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xml,status);complete();if(s.async)xml=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xml){xml.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xml.send(s.data);}catch(e){jQuery.handleError(s,xml,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xml,s]);}function complete(){if(s.complete)s.complete(xml,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xml,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xml;},handleError:function(s,xml,status,e){if(s.error)s.error(xml,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xml,s,e]);},active:0,httpSuccess:function(r){try{return!r.status&&location.protocol=="file:"||(r.status>=200&&r.status<300)||r.status==304||r.status==1223||jQuery.browser.safari&&r.status==undefined;}catch(e){}return false;},httpNotModified:function(xml,url){try{var xmlRes=xml.getResponseHeader("Last-Modified");return xml.status==304||xmlRes==jQuery.lastModified[url]||jQuery.browser.safari&&xml.status==undefined;}catch(e){}return false;},httpData:function(r,type){var ct=r.getResponseHeader("content-type");var xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0;var data=xml?r.responseXML:r.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle(fn,fn2):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall);var hidden=jQuery(this).is(":hidden"),self=this;for(var p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return jQuery.isFunction(opt.complete)&&opt.complete.apply(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.apply(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(!elem)return undefined;type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",array?jQuery.makeArray(array):[]);return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].apply(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:{slow:600,fast:200}[opt.duration])||400;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.apply(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.apply(this.elem,[this.now,this]);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=(new Date()).getTime();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=(new Date()).getTime();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done&&jQuery.isFunction(this.options.complete))this.options.complete.apply(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.fx.step={scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}};jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),fixed=jQuery.css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&jQuery.css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(jQuery.css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&jQuery.css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||jQuery.css(offsetChild,"position")=="absolute"))||(mozilla&&jQuery.css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l)||0;top+=parseInt(t)||0;}return results;};})();
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.metadata.js
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.metadata.js	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.metadata.js	(revision 7001)
@@ -0,0 +1,122 @@
+/*
+ * Metadata - jQuery plugin for parsing metadata from elements
+ *
+ * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id$
+ *
+ */
+
+/**
+ * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
+ * in the JSON will become a property of the element itself.
+ *
+ * There are three supported types of metadata storage:
+ *
+ *   attr:  Inside an attribute. The name parameter indicates *which* attribute.
+ *          
+ *   class: Inside the class attribute, wrapped in curly braces: { }
+ *   
+ *   elem:  Inside a child element (e.g. a script tag). The
+ *          name parameter indicates *which* element.
+ *          
+ * The metadata for an element is loaded the first time the element is accessed via jQuery.
+ *
+ * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
+ * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
+ * 
+ * @name $.metadata.setType
+ *
+ * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
+ * @before $.metadata.setType("class")
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
+ * @desc Reads metadata from the class attribute
+ * 
+ * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
+ * @before $.metadata.setType("attr", "data")
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
+ * @desc Reads metadata from a "data" attribute
+ * 
+ * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
+ * @before $.metadata.setType("elem", "script")
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
+ * @desc Reads metadata from a nested script element
+ * 
+ * @param String type The encoding type
+ * @param String name The name of the attribute to be used to get metadata (optional)
+ * @cat Plugins/Metadata
+ * @descr Sets the type of encoding to be used when loading metadata for the first time
+ * @type undefined
+ * @see metadata()
+ */
+
+(function($) {
+
+$.extend({
+	metadata : {
+		defaults : {
+			type: 'class',
+			name: 'metadata',
+			cre: /({.*})/,
+			single: 'metadata'
+		},
+		setType: function( type, name ){
+			this.defaults.type = type;
+			this.defaults.name = name;
+		},
+		get: function( elem, opts ){
+			var settings = $.extend({},this.defaults,opts);
+			// check for empty string in single property
+			if ( !settings.single.length ) settings.single = 'metadata';
+			
+			var data = $.data(elem, settings.single);
+			// returned cached data if it already exists
+			if ( data ) return data;
+			
+			data = "{}";
+			
+			if ( settings.type == "class" ) {
+				var m = settings.cre.exec( elem.className );
+				if ( m )
+					data = m[1];
+			} else if ( settings.type == "elem" ) {
+				if( !elem.getElementsByTagName )
+					return undefined;
+				var e = elem.getElementsByTagName(settings.name);
+				if ( e.length )
+					data = $.trim(e[0].innerHTML);
+			} else if ( elem.getAttribute != undefined ) {
+				var attr = elem.getAttribute( settings.name );
+				if ( attr )
+					data = attr;
+			}
+			
+			if ( data.indexOf( '{' ) <0 )
+			data = "{" + data + "}";
+			
+			data = eval("(" + data + ")");
+			
+			$.data( elem, settings.single, data );
+			return data;
+		}
+	}
+});
+
+/**
+ * Returns the metadata object for the first member of the jQuery object.
+ *
+ * @name metadata
+ * @descr Returns element's metadata object
+ * @param Object opts An object contianing settings to override the defaults
+ * @type jQuery
+ * @cat Plugins/Metadata
+ */
+$.fn.metadata = function( opts ){
+	return $.metadata.get( this[0], opts );
+};
+
+})(jQuery);
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.js
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.js	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.js	(revision 7001)
@@ -0,0 +1,852 @@
+/*
+ * 
+ * TableSorter 2.0 - Client-side table sorting with ease!
+ * Version 2.0.3
+ * @requires jQuery v1.2.3
+ * 
+ * Copyright (c) 2007 Christian Bach
+ * Examples and docs at: http://tablesorter.com
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ * 
+ */
+/**
+ *
+ * @description Create a sortable table with multi-column sorting capabilitys
+ * 
+ * @example $('table').tablesorter();
+ * @desc Create a simple tablesorter interface.
+ *
+ * @example $('table').tablesorter({ sortList:[[0,0],[1,0]] });
+ * @desc Create a tablesorter interface and sort on the first and secound column in ascending order.
+ * 
+ * @example $('table').tablesorter({ headers: { 0: { sorter: false}, 1: {sorter: false} } });
+ * @desc Create a tablesorter interface and disableing the first and secound column headers.
+ * 
+ * @example $('table').tablesorter({ 0: {sorter:"integer"}, 1: {sorter:"currency"} });
+ * @desc Create a tablesorter interface and set a column parser for the first and secound column.
+ * 
+ * 
+ * @param Object settings An object literal containing key/value pairs to provide optional settings.
+ * 
+ * @option String cssHeader (optional) 			A string of the class name to be appended to sortable tr elements in the thead of the table. 
+ * 												Default value: "header"
+ * 
+ * @option String cssAsc (optional) 			A string of the class name to be appended to sortable tr elements in the thead on a ascending sort. 
+ * 												Default value: "headerSortUp"
+ * 
+ * @option String cssDesc (optional) 			A string of the class name to be appended to sortable tr elements in the thead on a descending sort. 
+ * 												Default value: "headerSortDown"
+ * 
+ * @option String sortInitialOrder (optional) 	A string of the inital sorting order can be asc or desc. 
+ * 												Default value: "asc"
+ * 
+ * @option String sortMultisortKey (optional) 	A string of the multi-column sort key. 
+ * 												Default value: "shiftKey"
+ * 
+ * @option String textExtraction (optional) 	A string of the text-extraction method to use. 
+ * 												For complex html structures inside td cell set this option to "complex", 
+ * 												on large tables the complex option can be slow. 
+ * 												Default value: "simple"
+ * 
+ * @option Object headers (optional) 			An array containing the forces sorting rules. 
+ * 												This option let's you specify a default sorting rule. 
+ * 												Default value: null
+ * 
+ * @option Array sortList (optional) 			An array containing the forces sorting rules. 
+ * 												This option let's you specify a default sorting rule. 
+ * 												Default value: null
+ * 
+ * @option Array sortForce (optional) 			An array containing forced sorting rules. 
+ * 												This option let's you specify a default sorting rule, which is prepended to user-selected rules.
+ * 												Default value: null
+ *  
+  * @option Array sortAppend (optional) 			An array containing forced sorting rules. 
+ * 												This option let's you specify a default sorting rule, which is appended to user-selected rules.
+ * 												Default value: null
+ * 
+ * @option Boolean widthFixed (optional) 		Boolean flag indicating if tablesorter should apply fixed widths to the table columns.
+ * 												This is usefull when using the pager companion plugin.
+ * 												This options requires the dimension jquery plugin.
+ * 												Default value: false
+ *
+ * @option Boolean cancelSelection (optional) 	Boolean flag indicating if tablesorter should cancel selection of the table headers text.
+ * 												Default value: true
+ *
+ * @option Boolean debug (optional) 			Boolean flag indicating if tablesorter should display debuging information usefull for development.
+ *
+ * @type jQuery
+ *
+ * @name tablesorter
+ * 
+ * @cat Plugins/Tablesorter
+ * 
+ * @author Christian Bach/christian.bach@polyester.se
+ */
+
+(function($) {
+	$.extend({
+		tablesorter: new function() {
+			
+			var parsers = [], widgets = [];
+			
+			this.defaults = {
+				cssHeader: "header",
+				cssAsc: "headerSortUp",
+				cssDesc: "headerSortDown",
+				sortInitialOrder: "asc",
+				sortMultiSortKey: "shiftKey",
+				sortForce: null,
+				sortAppend: null,
+				textExtraction: "simple",
+				parsers: {}, 
+				widgets: [],		
+				widgetZebra: {css: ["even","odd"]},
+				headers: {},
+				widthFixed: false,
+				cancelSelection: true,
+				sortList: [],
+				headerList: [],
+				dateFormat: "us",
+				decimal: '.',
+				debug: false
+			};
+			
+			/* debuging utils */
+			function benchmark(s,d) {
+				log(s + "," + (new Date().getTime() - d.getTime()) + "ms");
+			}
+			
+			this.benchmark = benchmark;
+			
+			function log(s) {
+				if (typeof console != "undefined" && typeof console.debug != "undefined") {
+					console.log(s);
+				} else {
+					alert(s);
+				}
+			}
+						
+			/* parsers utils */
+			function buildParserCache(table,$headers) {
+				
+				if(table.config.debug) { var parsersDebug = ""; }
+				
+				var rows = table.tBodies[0].rows;
+				
+				if(table.tBodies[0].rows[0]) {
+
+					var list = [], cells = rows[0].cells, l = cells.length;
+					
+					for (var i=0;i < l; i++) {
+						var p = false;
+						
+						if($.metadata && ($($headers[i]).metadata() && $($headers[i]).metadata().sorter)  ) {
+						
+							p = getParserById($($headers[i]).metadata().sorter);	
+						
+						} else if((table.config.headers[i] && table.config.headers[i].sorter)) {
+	
+							p = getParserById(table.config.headers[i].sorter);
+						}
+						if(!p) {
+							p = detectParserForColumn(table,cells[i]);
+						}
+	
+						if(table.config.debug) { parsersDebug += "column:" + i + " parser:" +p.id + "\n"; }
+	
+						list.push(p);
+					}
+				}
+				
+				if(table.config.debug) { log(parsersDebug); }
+
+				return list;
+			};
+			
+			function detectParserForColumn(table,node) {
+				var l = parsers.length;
+				for(var i=1; i < l; i++) {
+					if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)) {
+						return parsers[i];
+					}
+				}
+				// 0 is always the generic parser (text)
+				return parsers[0];
+			}
+			
+			function getParserById(name) {
+				var l = parsers.length;
+				for(var i=0; i < l; i++) {
+					if(parsers[i].id.toLowerCase() == name.toLowerCase()) {	
+						return parsers[i];
+					}
+				}
+				return false;
+			}
+			
+			/* utils */
+			function buildCache(table) {
+				
+				if(table.config.debug) { var cacheTime = new Date(); }
+				
+				
+				var totalRows = (table.tBodies[0] && table.tBodies[0].rows.length) || 0,
+					totalCells = (table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length) || 0,
+					parsers = table.config.parsers, 
+					cache = {row: [], normalized: []};
+				
+					for (var i=0;i < totalRows; ++i) {
+					
+						/** Add the table data to main data array */
+						var c = table.tBodies[0].rows[i], cols = [];
+					
+						cache.row.push($(c));
+						
+						for(var j=0; j < totalCells; ++j) {
+							cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));	
+						}
+												
+						cols.push(i); // add position for rowCache
+						cache.normalized.push(cols);
+						cols = null;
+					};
+				
+				if(table.config.debug) { benchmark("Building cache for " + totalRows + " rows:", cacheTime); }
+				
+				return cache;
+			};
+			
+			function getElementText(config,node) {
+				
+				if(!node) return "";
+								
+				var t = "";
+				
+				if(config.textExtraction == "simple") {
+					if(node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
+						t = node.childNodes[0].innerHTML;
+					} else {
+						t = node.innerHTML;
+					}
+				} else {
+					if(typeof(config.textExtraction) == "function") {
+						t = config.textExtraction(node);
+					} else { 
+						t = $(node).text();
+					}	
+				}
+				return t;
+			}
+			
+			function appendToTable(table,cache) {
+				
+				if(table.config.debug) {var appendTime = new Date()}
+				
+				var c = cache, 
+					r = c.row, 
+					n= c.normalized, 
+					totalRows = n.length, 
+					checkCell = (n[0].length-1), 
+					tableBody = $(table.tBodies[0]),
+					rows = [];
+				
+				for (var i=0;i < totalRows; i++) {
+					rows.push(r[n[i][checkCell]]);	
+					if(!table.config.appender) {
+						
+						var o = r[n[i][checkCell]];
+						var l = o.length;
+						for(var j=0; j < l; j++) {
+							
+							tableBody[0].appendChild(o[j]);
+						
+						}
+						
+						//tableBody.append(r[n[i][checkCell]]);
+					}
+				}	
+				
+				if(table.config.appender) {
+				
+					table.config.appender(table,rows);	
+				}
+				
+				rows = null;
+				
+				if(table.config.debug) { benchmark("Rebuilt table:", appendTime); }
+								
+				//apply table widgets
+				applyWidget(table);
+				
+				// trigger sortend
+				setTimeout(function() {
+					$(table).trigger("sortEnd");	
+				},0);
+				
+			};
+			
+			function buildHeaders(table) {
+				
+				if(table.config.debug) { var time = new Date(); }
+				
+				var meta = ($.metadata) ? true : false, tableHeadersRows = [];
+			
+				for(var i = 0; i < table.tHead.rows.length; i++) { tableHeadersRows[i]=0; };
+				
+				$tableHeaders = $("thead th",table);
+		
+				$tableHeaders.each(function(index) {
+							
+					this.count = 0;
+					this.column = index;
+					this.order = formatSortingOrder(table.config.sortInitialOrder);
+					
+					if(checkHeaderMetadata(this) || checkHeaderOptions(table,index)) this.sortDisabled = true;
+					
+					if(!this.sortDisabled) {
+						$(this).addClass(table.config.cssHeader);
+					}
+					
+					// add cell to headerList
+					table.config.headerList[index]= this;
+				});
+				
+				if(table.config.debug) { benchmark("Built headers:", time); log($tableHeaders); }
+				
+				return $tableHeaders;
+				
+			};
+						
+		   	function checkCellColSpan(table, rows, row) {
+                var arr = [], r = table.tHead.rows, c = r[row].cells;
+				
+				for(var i=0; i < c.length; i++) {
+					var cell = c[i];
+					
+					if ( cell.colSpan > 1) { 
+						arr = arr.concat(checkCellColSpan(table, headerArr,row++));
+					} else  {
+						if(table.tHead.length == 1 || (cell.rowSpan > 1 || !r[row+1])) {
+							arr.push(cell);
+						}
+						//headerArr[row] = (i+row);
+					}
+				}
+				return arr;
+			};
+			
+			function checkHeaderMetadata(cell) {
+				if(($.metadata) && ($(cell).metadata().sorter === false)) { return true; };
+				return false;
+			}
+			
+			function checkHeaderOptions(table,i) {	
+				if((table.config.headers[i]) && (table.config.headers[i].sorter === false)) { return true; };
+				return false;
+			}
+			
+			function applyWidget(table) {
+				var c = table.config.widgets;
+				var l = c.length;
+				for(var i=0; i < l; i++) {
+					
+					getWidgetById(c[i]).format(table);
+				}
+				
+			}
+			
+			function getWidgetById(name) {
+				var l = widgets.length;
+				for(var i=0; i < l; i++) {
+					if(widgets[i].id.toLowerCase() == name.toLowerCase() ) {
+						return widgets[i]; 
+					}
+				}
+			};
+			
+			function formatSortingOrder(v) {
+				
+				if(typeof(v) != "Number") {
+					i = (v.toLowerCase() == "desc") ? 1 : 0;
+				} else {
+					i = (v == (0 || 1)) ? v : 0;
+				}
+				return i;
+			}
+			
+			function isValueInArray(v, a) {
+				var l = a.length;
+				for(var i=0; i < l; i++) {
+					if(a[i][0] == v) {
+						return true;	
+					}
+				}
+				return false;
+			}
+				
+			function setHeadersCss(table,$headers, list, css) {
+				// remove all header information
+				$headers.removeClass(css[0]).removeClass(css[1]);
+				
+				var h = [];
+				$headers.each(function(offset) {
+						if(!this.sortDisabled) {
+							h[this.column] = $(this);					
+						}
+				});
+				
+				var l = list.length; 
+				for(var i=0; i < l; i++) {
+					h[list[i][0]].addClass(css[list[i][1]]);
+				}
+			}
+			
+			function fixColumnWidth(table,$headers) {
+				var c = table.config;
+				if(c.widthFixed) {
+					var colgroup = $('<colgroup>');
+					$("tr:first td",table.tBodies[0]).each(function() {
+						colgroup.append($('<col>').css('width',$(this).width()));
+					});
+					$(table).prepend(colgroup);
+				};
+			}
+			
+			function updateHeaderSortCount(table,sortList) {
+				var c = table.config, l = sortList.length;
+				for(var i=0; i < l; i++) {
+					var s = sortList[i], o = c.headerList[s[0]];
+					o.count = s[1];
+					o.count++;
+				}
+			}
+			
+			/* sorting methods */
+			function multisort(table,sortList,cache) {
+				
+				if(table.config.debug) { var sortTime = new Date(); }
+				
+				var dynamicExp = "var sortWrapper = function(a,b) {", l = sortList.length;
+					
+				for(var i=0; i < l; i++) {
+					
+					var c = sortList[i][0];
+					var order = sortList[i][1];
+					var s = (getCachedSortType(table.config.parsers,c) == "text") ? ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ? "sortNumeric" : "sortNumericDesc");
+					
+					var e = "e" + i;
+					
+					dynamicExp += "var " + e + " = " + s + "(a[" + c + "],b[" + c + "]); ";
+					dynamicExp += "if(" + e + ") { return " + e + "; } ";
+					dynamicExp += "else { ";
+				}
+				
+				// if value is the same keep orignal order	
+				var orgOrderCol = cache.normalized[0].length - 1;
+				dynamicExp += "return a[" + orgOrderCol + "]-b[" + orgOrderCol + "];";
+						
+				for(var i=0; i < l; i++) {
+					dynamicExp += "}; ";
+				}
+				
+				dynamicExp += "return 0; ";	
+				dynamicExp += "}; ";	
+				
+				eval(dynamicExp);
+				
+				cache.normalized.sort(sortWrapper);
+				
+				if(table.config.debug) { benchmark("Sorting on " + sortList.toString() + " and dir " + order+ " time:", sortTime); }
+				
+				return cache;
+			};
+			
+			function sortText(a,b) {
+				return ((a < b) ? -1 : ((a > b) ? 1 : 0));
+			};
+			
+			function sortTextDesc(a,b) {
+				return ((b < a) ? -1 : ((b > a) ? 1 : 0));
+			};	
+			
+	 		function sortNumeric(a,b) {
+				return a-b;
+			};
+			
+			function sortNumericDesc(a,b) {
+				return b-a;
+			};
+			
+			function getCachedSortType(parsers,i) {
+				return parsers[i].type;
+			};
+			
+			/* public methods */
+			this.construct = function(settings) {
+
+				return this.each(function() {
+					
+					if(!this.tHead || !this.tBodies) return;
+					
+					var $this, $document,$headers, cache, config, shiftDown = 0, sortOrder;
+					
+					this.config = {};
+					
+					config = $.extend(this.config, $.tablesorter.defaults, settings);
+					
+					// store common expression for speed					
+					$this = $(this);
+					
+					// build headers
+					$headers = buildHeaders(this);
+					
+					// try to auto detect column type, and store in tables config
+					this.config.parsers = buildParserCache(this,$headers);
+					
+					
+					// build the cache for the tbody cells
+					cache = buildCache(this);
+					
+					// get the css class names, could be done else where.
+					var sortCSS = [config.cssDesc,config.cssAsc];
+					
+					// fixate columns if the users supplies the fixedWidth option
+					fixColumnWidth(this);
+					
+					// apply event handling to headers
+					// this is to big, perhaps break it out?
+					$headers.click(function(e) {
+						
+						$this.trigger("sortStart");
+						
+						var totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0;
+						
+						if(!this.sortDisabled && totalRows > 0) {
+							
+							
+							// store exp, for speed
+							var $cell = $(this);
+	
+							// get current column index
+							var i = this.column;
+							
+							// get current column sort order
+							this.order = this.count++ % 2;
+							
+							// user only whants to sort on one column
+							if(!e[config.sortMultiSortKey]) {
+								
+								// flush the sort list
+								config.sortList = [];
+								
+								if(config.sortForce != null) {
+									var a = config.sortForce; 
+									for(var j=0; j < a.length; j++) {
+										if(a[j][0] != i) {
+											config.sortList.push(a[j]);
+										}
+									}
+								}
+								
+								// add column to sort list
+								config.sortList.push([i,this.order]);
+							
+							// multi column sorting
+							} else {
+								// the user has clicked on an all ready sortet column.
+								if(isValueInArray(i,config.sortList)) {	 
+									
+									// revers the sorting direction for all tables.
+									for(var j=0; j < config.sortList.length; j++) {
+										var s = config.sortList[j], o = config.headerList[s[0]];
+										if(s[0] == i) {
+											o.count = s[1];
+											o.count++;
+											s[1] = o.count % 2;
+										}
+									}	
+								} else {
+									// add column to sort list array
+									config.sortList.push([i,this.order]);
+								}
+							};
+							setTimeout(function() {
+								//set css for headers
+								setHeadersCss($this[0],$headers,config.sortList,sortCSS);
+								appendToTable($this[0],multisort($this[0],config.sortList,cache));
+							},1);
+							// stop normal event by returning false
+							return false;
+						}
+					// cancel selection	
+					}).mousedown(function() {
+						if(config.cancelSelection) {
+							this.onselectstart = function() {return false};
+							return false;
+						}
+					});
+					
+					// apply easy methods that trigger binded events
+					$this.bind("update",function() {
+						
+						// rebuild parsers.
+						this.config.parsers = buildParserCache(this,$headers);
+						
+						// rebuild the cache map
+						cache = buildCache(this);
+						
+					}).bind("sorton",function(e,list) {
+						
+						$(this).trigger("sortStart");
+						
+						config.sortList = list;
+						
+						// update and store the sortlist
+						var sortList = config.sortList;
+						
+						// update header count index
+						updateHeaderSortCount(this,sortList);
+						
+						//set css for headers
+						setHeadersCss(this,$headers,sortList,sortCSS);
+						
+						
+						// sort the table and append it to the dom
+						appendToTable(this,multisort(this,sortList,cache));
+
+					}).bind("appendCache",function() {
+						
+						appendToTable(this,cache);
+					
+					}).bind("applyWidgetId",function(e,id) {
+						
+						getWidgetById(id).format(this);
+						
+					}).bind("applyWidgets",function() {
+						// apply widgets
+						applyWidget(this);
+					});
+					
+					if($.metadata && ($(this).metadata() && $(this).metadata().sortlist)) {
+						config.sortList = $(this).metadata().sortlist;
+					}
+					// if user has supplied a sort list to constructor.
+					if(config.sortList.length > 0) {
+						$this.trigger("sorton",[config.sortList]);	
+					}
+					
+					// apply widgets
+					applyWidget(this);
+				});
+			};
+			
+			this.addParser = function(parser) {
+				var l = parsers.length, a = true;
+				for(var i=0; i < l; i++) {
+					if(parsers[i].id.toLowerCase() == parser.id.toLowerCase()) {
+						a = false;
+					}
+				}
+				if(a) { parsers.push(parser); };
+			};
+			
+			this.addWidget = function(widget) {
+				widgets.push(widget);
+			};
+			
+			this.formatFloat = function(s) {
+				var i = parseFloat(s);
+				return (isNaN(i)) ? 0 : i;
+			};
+			this.formatInt = function(s) {
+				var i = parseInt(s);
+				return (isNaN(i)) ? 0 : i;
+			};
+			
+			this.isDigit = function(s,config) {
+				var DECIMAL = '\\' + config.decimal;
+				var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';
+				return RegExp(exp).test($.trim(s));
+			};
+			
+			this.clearTableBody = function(table) {
+				if($.browser.msie) {
+					function empty() {
+						while ( this.firstChild ) this.removeChild( this.firstChild );
+					}
+					empty.apply(table.tBodies[0]);
+				} else {
+					table.tBodies[0].innerHTML = "";
+				}
+			};
+		}
+	});
+	
+	// extend plugin scope
+	$.fn.extend({
+        tablesorter: $.tablesorter.construct
+	});
+	
+	var ts = $.tablesorter;
+	
+	// add default parsers
+	ts.addParser({
+		id: "text",
+		is: function(s) {
+			return true;
+		},
+		format: function(s) {
+			return $.trim(s.toLowerCase());
+		},
+		type: "text"
+	});
+	
+	ts.addParser({
+		id: "digit",
+		is: function(s,table) {
+			var c = table.config;
+			return $.tablesorter.isDigit(s,c);
+		},
+		format: function(s) {
+			return $.tablesorter.formatFloat(s);
+		},
+		type: "numeric"
+	});
+	
+	ts.addParser({
+		id: "currency",
+		is: function(s) {
+			return /^[£$€?.]/.test(s);
+		},
+		format: function(s) {
+			return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));
+		},
+		type: "numeric"
+	});
+	
+	ts.addParser({
+		id: "ipAddress",
+		is: function(s) {
+			return /^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);
+		},
+		format: function(s) {
+			var a = s.split("."), r = "", l = a.length;
+			for(var i = 0; i < l; i++) {
+				var item = a[i];
+			   	if(item.length == 2) {
+					r += "0" + item;
+			   	} else {
+					r += item;
+			   	}
+			}
+			return $.tablesorter.formatFloat(r);
+		},
+		type: "numeric"
+	});
+	
+	ts.addParser({
+		id: "url",
+		is: function(s) {
+			return /^(https?|ftp|file):\/\/$/.test(s);
+		},
+		format: function(s) {
+			return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));
+		},
+		type: "text"
+	});
+	
+	ts.addParser({
+		id: "isoDate",
+		is: function(s) {
+			return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);
+		},
+		format: function(s) {
+			return $.tablesorter.formatFloat((s != "") ? new Date(s.replace(new RegExp(/-/g),"/")).getTime() : "0");
+		},
+		type: "numeric"
+	});
+		
+	ts.addParser({
+		id: "percent",
+		is: function(s) { 
+			return /\%$/.test($.trim(s));
+		},
+		format: function(s) {
+			return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));
+		},
+		type: "numeric"
+	});
+
+	ts.addParser({
+		id: "usLongDate",
+		is: function(s) {
+			return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));
+		},
+		format: function(s) {
+			return $.tablesorter.formatFloat(new Date(s).getTime());
+		},
+		type: "numeric"
+	});
+
+	ts.addParser({
+		id: "shortDate",
+		is: function(s) {
+			return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);
+		},
+		format: function(s,table) {
+			var c = table.config;
+			s = s.replace(/\-/g,"/");
+			if(c.dateFormat == "us") {
+				// reformat the string in ISO format
+				s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");
+			} else if(c.dateFormat == "uk") {
+				//reformat the string in ISO format
+				s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
+			} else if(c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") {
+				s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");	
+			}
+			return $.tablesorter.formatFloat(new Date(s).getTime());
+		},
+		type: "numeric"
+	});
+
+	ts.addParser({
+	    id: "time",
+	    is: function(s) {
+	        return /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);
+	    },
+	    format: function(s) {
+	        return $.tablesorter.formatFloat(new Date("2000/01/01 " + s).getTime());
+	    },
+	  type: "numeric"
+	});
+	
+	
+	ts.addParser({
+	    id: "metadata",
+	    is: function(s) {
+	        return false;
+	    },
+	    format: function(s,table,cell) {
+			var c = table.config, p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;
+	        return $(cell).metadata()[p];
+	    },
+	  type: "numeric"
+	});
+	
+	// add default widgets
+	ts.addWidget({
+		id: "zebra",
+		format: function(table) {
+			if(table.config.debug) { var time = new Date(); }
+			$("tr:visible",table.tBodies[0])
+	        .filter(':even')
+	        .removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0])
+	        .end().filter(':odd')
+	        .removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);
+			if(table.config.debug) { $.tablesorter.benchmark("Applying Zebra widget", time); }
+		}
+	});	
+})(jQuery);
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.min.js
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.min.js	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.min.js	(revision 7001)
@@ -0,0 +1,2 @@
+
+(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'.',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}var rows=table.tBodies[0].rows;if(table.tBodies[0].rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,cells[i]);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,node){var l=parsers.length;for(var i=1;i<l;i++){if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)){return parsers[i];}}return parsers[0];}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=table.tBodies[0].rows[i],cols=[];cache.row.push($(c));for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));}cols.push(i);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cache for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){if(!node)return"";var t="";if(config.textExtraction=="simple"){if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){t=node.childNodes[0].innerHTML;}else{t=node.innerHTML;}}else{if(typeof(config.textExtraction)=="function"){t=config.textExtraction(node);}else{t=$(node).text();}}return t;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){rows.push(r[n[i][checkCell]]);if(!table.config.appender){var o=r[n[i][checkCell]];var l=o.length;for(var j=0;j<l;j++){tableBody[0].appendChild(o[j]);}}}if(table.config.appender){table.config.appender(table,rows);}rows=null;if(table.config.debug){benchmark("Rebuilt table:",appendTime);}applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd");},0);};function buildHeaders(table){if(table.config.debug){var time=new Date();}var meta=($.metadata)?true:false,tableHeadersRows=[];for(var i=0;i<table.tHead.rows.length;i++){tableHeadersRows[i]=0;};$tableHeaders=$("thead th",table);$tableHeaders.each(function(index){this.count=0;this.column=index;this.order=formatSortingOrder(table.config.sortInitialOrder);if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))this.sortDisabled=true;if(!this.sortDisabled){$(this).addClass(table.config.cssHeader);}table.config.headerList[index]=this;});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders);}return $tableHeaders;};function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i<c.length;i++){var cell=c[i];if(cell.colSpan>1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i<l;i++){getWidgetById(c[i]).format(table);}}function getWidgetById(name){var l=widgets.length;for(var i=0;i<l;i++){if(widgets[i].id.toLowerCase()==name.toLowerCase()){return widgets[i];}}};function formatSortingOrder(v){if(typeof(v)!="Number"){i=(v.toLowerCase()=="desc")?1:0;}else{i=(v==(0||1))?v:0;}return i;}function isValueInArray(v,a){var l=a.length;for(var i=0;i<l;i++){if(a[i][0]==v){return true;}}return false;}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[];$headers.each(function(offset){if(!this.sortDisabled){h[this.column]=$(this);}});var l=list.length;for(var i=0;i<l;i++){h[list[i][0]].addClass(css[list[i][1]]);}}function fixColumnWidth(table,$headers){var c=table.config;if(c.widthFixed){var colgroup=$('<colgroup>');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('<col>').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i<l;i++){var s=sortList[i],o=c.headerList[s[0]];o.count=s[1];o.count++;}}function multisort(table,sortList,cache){if(table.config.debug){var sortTime=new Date();}var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;for(var i=0;i<l;i++){var c=sortList[i][0];var order=sortList[i][1];var s=(getCachedSortType(table.config.parsers,c)=="text")?((order==0)?"sortText":"sortTextDesc"):((order==0)?"sortNumeric":"sortNumericDesc");var e="e"+i;dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"]); ";dynamicExp+="if("+e+") { return "+e+"; } ";dynamicExp+="else { ";}var orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(var i=0;i<l;i++){dynamicExp+="}; ";}dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(table.config.debug){benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);}return cache;};function sortText(a,b){return((a<b)?-1:((a>b)?1:0));};function sortTextDesc(a,b){return((b<a)?-1:((b>a)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){$this.trigger("sortStart");var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){var $cell=$(this);var i=this.column;this.order=this.count++%2;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j<a.length;j++){if(a[j][0]!=i){config.sortList.push(a[j]);}}}config.sortList.push([i,this.order]);}else{if(isValueInArray(i,config.sortList)){for(var j=0;j<config.sortList.length;j++){var s=config.sortList[j],o=config.headerList[s[0]];if(s[0]==i){o.count=s[1];o.count++;s[1]=o.count%2;}}}else{config.sortList.push([i,this.order]);}};setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache));},1);return false;}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false;}});$this.bind("update",function(){this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);}).bind("sorton",function(e,list){$(this).trigger("sortStart");config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache));}).bind("appendCache",function(){appendToTable(this,cache);}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this);}).bind("applyWidgets",function(){applyWidget(this);});if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist)){config.sortList=$(this).metadata().sortlist;}if(config.sortList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){var DECIMAL='\\'+config.decimal;var exp='/(^[+]?0('+DECIMAL+'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)'+DECIMAL+'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*'+DECIMAL+'0+$)/';return RegExp(exp).test($.trim(s));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.apply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[£$€?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat=="us"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");}else if(c.dateFormat=="uk"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}$("tr:visible",table.tBodies[0]).filter(':even').removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0]).end().filter(':odd').removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery);
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.pager.js
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.pager.js	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/js/jquery.tablesorter.pager.js	(revision 7001)
@@ -0,0 +1,184 @@
+(function($) {
+	$.extend({
+		tablesorterPager: new function() {
+			
+			function updatePageDisplay(c) {
+				var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages);	
+			}
+			
+			function setPageSize(table,size) {
+				var c = table.config;
+				c.size = size;
+				c.totalPages = Math.ceil(c.totalRows / c.size);
+				c.pagerPositionSet = false;
+				moveToPage(table);
+				fixPosition(table);
+			}
+			
+			function fixPosition(table) {
+				var c = table.config;
+				if(!c.pagerPositionSet && c.positionFixed) {
+					var c = table.config, o = $(table);
+					if(o.offset) {
+						c.container.css({
+							top: o.offset().top + o.height() + 'px',
+							position: 'absolute'
+						});
+					}
+					c.pagerPositionSet = true;
+				}
+			}
+			
+			function moveToFirstPage(table) {
+				var c = table.config;
+				c.page = 0;
+				moveToPage(table);
+			}
+			
+			function moveToLastPage(table) {
+				var c = table.config;
+				c.page = (c.totalPages-1);
+				moveToPage(table);
+			}
+			
+			function moveToNextPage(table) {
+				var c = table.config;
+				c.page++;
+				if(c.page >= (c.totalPages-1)) {
+					c.page = (c.totalPages-1);
+				}
+				moveToPage(table);
+			}
+			
+			function moveToPrevPage(table) {
+				var c = table.config;
+				c.page--;
+				if(c.page <= 0) {
+					c.page = 0;
+				}
+				moveToPage(table);
+			}
+						
+			
+			function moveToPage(table) {
+				var c = table.config;
+				if(c.page < 0 || c.page > (c.totalPages-1)) {
+					c.page = 0;
+				}
+				
+				renderTable(table,c.rowsCopy);
+			}
+			
+			function renderTable(table,rows) {
+				
+				var c = table.config;
+				var l = rows.length;
+				var s = (c.page * c.size);
+				var e = (s + c.size);
+				if(e > rows.length ) {
+					e = rows.length;
+				}
+				
+				
+				var tableBody = $(table.tBodies[0]);
+				
+				// clear the table body
+				
+				$.tablesorter.clearTableBody(table);
+				
+				for(var i = s; i < e; i++) {
+					
+					//tableBody.append(rows[i]);
+					
+					var o = rows[i];
+					var l = o.length;
+					for(var j=0; j < l; j++) {
+						
+						tableBody[0].appendChild(o[j]);
+
+					}
+				}
+				
+				fixPosition(table,tableBody);
+				
+				$(table).trigger("applyWidgets");
+				
+				if( c.page >= c.totalPages ) {
+        			moveToLastPage(table);
+				}
+				
+				updatePageDisplay(c);
+			}
+			
+			this.appender = function(table,rows) {
+				
+				var c = table.config;
+				
+				c.rowsCopy = rows;
+				c.totalRows = rows.length;
+				c.totalPages = Math.ceil(c.totalRows / c.size);
+				
+				renderTable(table,rows);
+			};
+			
+			this.defaults = {
+				size: 10,
+				offset: 0,
+				page: 0,
+				totalRows: 0,
+				totalPages: 0,
+				container: null,
+				cssNext: '.next',
+				cssPrev: '.prev',
+				cssFirst: '.first',
+				cssLast: '.last',
+				cssPageDisplay: '.pagedisplay',
+				cssPageSize: '.pagesize',
+				seperator: "/",
+				positionFixed: true,
+				appender: this.appender
+			};
+			
+			this.construct = function(settings) {
+				
+				return this.each(function() {	
+					
+					config = $.extend(this.config, $.tablesorterPager.defaults, settings);
+					
+					var table = this, pager = config.container;
+				
+					$(this).trigger("appendCache");
+					
+					config.size = parseInt($(".pagesize",pager).val());
+					
+					$(config.cssFirst,pager).click(function() {
+						moveToFirstPage(table);
+						return false;
+					});
+					$(config.cssNext,pager).click(function() {
+						moveToNextPage(table);
+						return false;
+					});
+					$(config.cssPrev,pager).click(function() {
+						moveToPrevPage(table);
+						return false;
+					});
+					$(config.cssLast,pager).click(function() {
+						moveToLastPage(table);
+						return false;
+					});
+					$(config.cssPageSize,pager).change(function() {
+						setPageSize(table,parseInt($(this).val()));
+						return false;
+					});
+				});
+			};
+			
+		}
+	});
+	// extend plugin scope
+	$.fn.extend({
+        tablesorterPager: $.tablesorterPager.construct
+	});
+	
+})(jQuery);				
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/navigation_bar.tpl
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/navigation_bar.tpl	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/navigation_bar.tpl	(revision 7001)
@@ -0,0 +1,28 @@
+<div class="navigationBar">
+  {if isset($navbar.URL_FIRST)}
+  <a href="{$navbar.URL_FIRST}" rel="first">{'First'|@translate}</a> |
+  <a href="{$navbar.URL_PREV}" rel="prev">{'Previous'|@translate}</a> |
+  {else}
+  {'First'|@translate} |
+  {'Previous'|@translate} |
+  {/if}
+
+  {assign var='prev_page' value=0}
+  {foreach from=$navbar.pages key=page item=url}
+    {if $page > $prev_page+1}...{/if}
+    {if $page == $navbar.CURRENT_PAGE}
+    <span class="pageNumberSelected">{$page}</span>
+    {else}
+    <a href="{$url}">{$page}</a>
+    {/if}
+    {assign var='prev_page' value=$page}
+  {/foreach}
+
+  {if isset($navbar.URL_NEXT)}
+  | <a href="{$navbar.URL_NEXT}" rel="next">{'Next'|@translate}</a>
+  | <a href="{$navbar.URL_LAST}" rel="last">{'Last'|@translate}</a>
+  {else}
+  | {'Next'|@translate}
+  | {'Last'|@translate}
+  {/if}
+</div>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/uam.css
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/uam.css	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/uam.css	(revision 7001)
@@ -0,0 +1,98 @@
+/* UAM instructions */
+#uam_leftmargin
+{
+  margin-left: 2em
+}
+
+#uam_notice
+{
+  text-align:center;
+  text-decoration: underline;
+  font-weight:bold;
+}
+
+textarea.uam_textfields
+{
+  width: 70%;
+}
+
+/* jQuery cluetip instructions */
+label.cluetip
+{
+  font-weight:bold;
+}
+
+legend.cluetip
+{
+  font-weight:bold;
+}
+
+.instructionBlock
+{
+  border: 1px solid #666;
+  margin: 5px;
+  overflow: hidden;
+}
+
+/* Bloc expand-collapse instructions */
+.instructionBlockHeaderCollapsed, .instructionBlockHeaderExpanded
+{
+  background-color:#111;
+  background-position:15px center;
+  background-repeat:no-repeat;
+  color:#ff3363;
+  cursor:pointer;
+  font-size:110%;
+  overflow:hidden;
+  padding:8px 41px;
+  text-align: left;
+}
+
+.instructionBlockHeaderCollapsed span, .instructionBlockHeaderExpanded span
+{
+  border-bottom: none;
+}
+ 
+.instructionBlockHeaderCollapsed
+{
+  background-image: url(./icon/expand.gif);
+}
+
+.instructionBlockHeaderExpanded
+{
+  background-image: url(./icon/collapse.gif);
+}
+
+.instructionBlockContent
+{
+  padding:0 15px 15px;
+}
+
+/* jQuery tablesorter instructions */
+tr.throw
+{
+cursor:pointer;
+text-align:center;
+}
+
+th.header
+{
+background-image:url("./icon/bg.png");
+background-position:right center;
+background-repeat:no-repeat;
+cursor:pointer;
+}
+
+th.headerSortDown
+{
+background-image:url("./icon/desc.png");
+}
+
+th.headerSortUp
+{
+background-image:url("./icon/asc.png");
+}
+
+.pager{
+  text-align:center;
+}
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/userlist.tpl
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/userlist.tpl	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/userlist.tpl	(revision 7001)
@@ -0,0 +1,87 @@
+﻿{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"}
+{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"}
+{known_script id="jquery.tablesorter" src=$UAM_PATH|@cat:"admin/template/js/jquery.tablesorter.js"}
+{known_script id="jquery.tablesorter.pager" src=$UAM_PATH|@cat:"admin/template/js/jquery.tablesorter.pager.js"}
+
+
+{html_head}<link rel="stylesheet" type="text/css" href="{$UAM_PATH}admin/template/uam.css">{/html_head}
+
+<script type="text/javascript">
+jQuery().ready(function()
+{ldelim}
+  jQuery('.cluetip').cluetip(
+  {ldelim}
+    width: 600,
+    splitTitle: '|'
+  {rdelim});
+{rdelim});
+
+$(document).ready(function() 
+    {ldelim}
+      $("#sorting")
+      .tablesorter({ldelim}sortList:[[3,1]]{rdelim})
+      .tablesorterPager({ldelim}container: $("#pager"), positionFixed: false, size: 20, totalPages: 0{rdelim});
+    {rdelim} 
+);
+</script>
+
+
+<div class="titrePage">
+  <h2>{'Title_Tab'|@translate} {$UAM_VERSION}<br>{'SubTitle5'|@translate}</h2>
+</div>
+
+<form method="post" action="" class="general">
+  <fieldset>
+  	<legend class="cluetip" title="{'UAM_userlistTitle'|translate}|{'UAM_userlistTitle_d'|translate}">{'UserList_Title'|@translate}</legend>
+
+      <table id="sorting" class="table2" width="97%" summary="">
+  			<thead>
+    			<tr class="throw">
+      			<th>{'Username'|@translate}</th>
+            <th>{'Profile'|@translate}</th>
+      			<th>{'Email address'|@translate}</th>
+            <th>{'LastVisit_Date'|@translate}</th>
+            <th>{'Nb_Days'|@translate}</th>
+    			</tr>
+  			</thead>
+        <tbody>
+        {foreach from=$users item=user name=users_loop}
+          <tr class="{if $smarty.foreach.users_loop.index is odd}row1{else}row2{/if}">
+            <td><label for="selection-{$user.ID}">{$user.USERNAME}</label></td>
+            <td style="text-align:center;"><a href="./admin.php?page=profile&amp;user_id={$user.ID}" title="{'Profile'|@translate}" onclick="window.open(this.href); return false;"><img src="{$UAM_PATH}admin/template/icon/edit_s.png"></a></td>
+            <td>{$user.EMAIL}</td>
+            <td style="text-align:center;">{$user.LASTVISIT}</td>
+{if $user.DISPLAY == 'green'}
+            <td style="color:lime;text-align:center;">{$user.DAYS}</td>
+{elseif $user.DISPLAY == 'orange'}
+            <td style="color:orange;text-align:center;">{$user.DAYS}</td>
+{elseif $user.DISPLAY == 'red'}
+            <td style="color:red;text-align:center;">{$user.DAYS}</td>
+{else}
+            <td style="text-align:center;">{$user.DAYS}</td>
+{/if}
+            {foreach from=$user.plugin_columns item=data}
+              <td>{$data}</td>
+            {/foreach}    			
+          </tr>
+        {/foreach}
+        </tbody>
+      </table>
+<div id="pager" class="pager">
+	<form>
+		<img src="{$UAM_PATH}admin/template/icon/first.png" class="first">
+		<img src="{$UAM_PATH}admin/template/icon/prev.png" class="prev">
+		<input type="text" class="pagedisplay">
+		<img src="{$UAM_PATH}admin/template/icon/next.png" class="next">
+		<img src="{$UAM_PATH}admin/template/icon/last.png" class="last">
+		<select class="pagesize">
+			<option  value="10">10</option>
+			<option selected="selected" value="20">20</option>
+			<option value="30">30</option>
+			<option value="40">40</option>
+		</select>
+	</form>
+</div>
+    	<br>
+  </fieldset>
+</form>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/usermanager.tpl
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/usermanager.tpl	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/admin/template/usermanager.tpl	(revision 7001)
@@ -0,0 +1,106 @@
+﻿{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"}
+{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.cluetip.packed.js"}
+{known_script id="jquery.tablesorter" src=$UAM_PATH|@cat:"admin/template/js/jquery.tablesorter.js"}
+{known_script id="jquery.tablesorter.pager" src=$UAM_PATH|@cat:"admin/template/js/jquery.tablesorter.pager.js"}
+
+{html_head}<link rel="stylesheet" type="text/css" href="{$UAM_PATH}admin/template/uam.css">{/html_head}
+
+<script type="text/javascript">
+jQuery().ready(function()
+{ldelim}
+  jQuery('.cluetip').cluetip(
+  {ldelim}
+    width: 600,
+    splitTitle: '|'
+  {rdelim});
+{rdelim});
+
+$(document).ready(function() 
+    {ldelim}
+      $("#sorting")
+      .tablesorter({ldelim}sortList:[[6,1]], headers: {ldelim} 0: {ldelim} sorter: false {rdelim}{rdelim}{rdelim})
+      .tablesorterPager({ldelim}container: $("#pager"), positionFixed: false, size: 20, totalPages: 0{rdelim});
+    {rdelim} 
+);
+</script>
+
+<div class="titrePage">
+  <h2>{'Title_Tab'|@translate} {$UAM_VERSION}<br>{'SubTitle3'|@translate}</h2>
+</div>
+
+<form method="post" action="" class="general">
+  <fieldset>
+  	<legend class="cluetip" title="{'UAM_usermanTitle'|translate}|{'UAM_usermanTitle_d'|translate}">{'UserManager_Title'|@translate}</legend>
+      <table id="sorting" class="table2" width="97%" summary="">
+  		  <thead>
+    			<tr class="throw">
+      			<th>&nbsp;</td>
+      			<th>{'Username'|@translate}&nbsp;&nbsp;</th>
+            <th>{'Profile'|@translate}&nbsp;&nbsp;</th>
+      			<th>{'User status'|@translate}&nbsp;&nbsp;</th>
+      			<th>{'Email address'|@translate}&nbsp;&nbsp;</th>
+      			<th>{'Groups'|@translate}&nbsp;&nbsp;</th>
+      			<th>{'Registration_Date'|@translate}&nbsp;&nbsp;</th>
+          {if $CONFIRM_LOCAL == ""}
+            <th>{'Reminder'|@translate}&nbsp;&nbsp;</th>
+          {/if}
+    			</tr>
+  			</thead>
+        <tbody>
+        {foreach from=$users item=user name=users_loop}
+          <tr class="{if $smarty.foreach.users_loop.index is odd}row1{else}row2{/if}">
+            <td><input type="checkbox" name="selection[]" value="{$user.ID}" {$user.CHECKED} id="selection-{$user.ID}" ></td>
+            <td><label for="selection-{$user.ID}">{$user.USERNAME}</label></td>
+            <td style="text-align:center;"><a href="./admin.php?page=profile&amp;user_id={$user.ID}" title="{'Profile'|@translate}" onclick="window.open(this.href); return false;"><img src="{$UAM_PATH}admin/template/icon/edit_s.png"></a></td>
+            <td>{$user.STATUS}</td>
+            <td>{$user.EMAIL}</td>
+            <td>{$user.GROUPS}</td>
+            <td {if $user.EXPIRATION == True}style="color:red;text-align:center;"{else}style="color:lime;text-align:center;"{/if}>{$user.REGISTRATION}</td>
+          {if $CONFIRM_LOCAL == ""}
+            <td style="text-align:center;">{$user.REMINDER}</td>
+          {/if}
+            {foreach from=$user.plugin_columns item=data}
+              <td>{$data}</td>
+            {/foreach}    			
+          </tr>
+        {/foreach}
+      </tbody>
+      </table>
+{if !empty($users)}
+<div id="pager" class="pager">
+	<form>
+		<img src="{$UAM_PATH}admin/template/icon/first.png" class="first">
+		<img src="{$UAM_PATH}admin/template/icon/prev.png" class="prev">
+		<input type="text" class="pagedisplay">
+		<img src="{$UAM_PATH}admin/template/icon/next.png" class="next">
+		<img src="{$UAM_PATH}admin/template/icon/last.png" class="last">
+		<select class="pagesize">
+			<option  value="10">10</option>
+			<option selected="selected" value="20">20</option>
+			<option value="30">30</option>
+			<option value="40">40</option>
+		</select>
+	</form>
+</div>
+{/if}
+    	<br>
+
+<p>
+  {'target'|@translate}
+  <label><input type="radio" name="target" value="all" > {'all'|@translate}</label>
+  <label><input type="radio" name="target" value="selection" checked="checked" > {'selection'|@translate}</label>
+</p>
+
+<p>
+{if $CONFIRM_LOCAL == "local"}
+  <input class="submit" type="submit" value="{'Delete_selected'|@translate}" name="Del_Selected">
+  <input class="submit" type="submit" value="{'Force_Validation'|@translate}" name="Force_Validation">
+{else}
+  <input class="submit" type="submit" value="{'Delete_selected'|@translate}" name="Del_Selected">
+  <input class="submit" type="submit" value="{'Mail_without_key'|@translate}" name="Mail_Without_Key">
+  <input class="submit" type="submit" value="{'Mail_with_key'|@translate}" name="Mail_With_Key">
+  <input class="submit" type="submit" value="{'Force_Validation'|@translate}" name="Force_Validation">
+{/if}
+</p>
+  </fieldset>
+</form>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/changelog.txt.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/changelog.txt.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/changelog.txt.php	(revision 7001)
@@ -0,0 +1,201 @@
+<?php
+/*
+Plugin Name: UserAdvManager
+** Change log **
+***************************************
+***** Plugin history (branch 2.10)*****
+***************************************
+
+-- 2.10.0-beta : Initial beta release for Piwigo compatibility
+-- 2.10.1-beta : Small correction on generated path
+-- 2.10.2-beta : Bug resolved on register validation page
+
+-- 2.10.3 : Final and fully functional release
+						Bug resolved on plugin activation
+
+-- 2.10.4 : Bug fixed on profiles update
+
+-- 2.10.5 : Improved code on profiles update
+
+-- 2.10.6 : Old language packs (iso) deleted (forget from PWG 1.7.x version)
+
+-- 2.10.7 : Bug fixed on user's validation email sending
+
+-- 2.10.8 : ConfirmMail page looks better (Sylvia theme only)
+						Improved code for checking author on guest comments
+
+-- 2.10.9 : Bug fixed - Missing english translation
+						Bug fixed - Notice on forbidden characters function use
+						Bug fixed - Audit on forbidden characters in username didn't work
+						Adding of email provider exclusion (like *@hotmail.com) - Warning ! -> Known bug : This feature doesn't work on user profile page. So, already registered users can change their email address to a forbiden one.
+
+-- 2.10.9a : Email provider exclusion is no longer case sensitive
+
+-- 2.10.9b : Bug fixed - Home icon wasn't linked to gallery url in ConfirmMail page. If GALLERY_URL is not set, Home icon gets the pwg root path.
+
+-- 2.10.9c : Bug fixed - If Email provider exclusion is set off, new registered user will have a PHP notice on "Undefined variable: ncsemail"
+
+-- 2.10.9d : Code simplification - need no more ""template"" sub-directory in plugin directory for enhance "back link" icon in ConfirMail.tpl
+
+-- 2.10.9e : Compatibility improvement with PHP 5.3 - Some old functions will be deprecated like :
+							ereg replaced by preg_match
+							eregi replace by preg_match with "i" moderator
+							split replace by preg_split
+				
+-- 2.10.9f : Compatibility bug fixed when used with DynamicRecentPeriod plugin
+
+
+***** Plugin history (branch 2.11)***** 
+
+-- 2.11.0 : New tabsheet menu to manage ConfirMail functions (setting a timeout without validation, Cleanup expired user's accounts, Force confirmation, Renew validation key, list unvalidated users,...)
+						Beautify plugin's main admin panel
+						
+-- 2.11.1 : Bug fixed with install and upgrade functions
+						Language files correction
+
+-- 2.11.2 : Bug fixed on bad query for unvalidated users display in unvalidated users list
+						Bug fixed : Sql syntax error on plugin activation
+
+-- 2.11.3 : On Patricia's request (french forum and bug 1173), the unvalidated users management tab shows users according with the settings of unvalidated group and / or unvalidated status.
+						Feature 1172 added : Email providers exclusion list can be set with CR/LF between each entry. The comma seperator (,) is still mandatory.
+						Bug 1175 fixed : Bad translation tag in french language file.
+						Improvement of unvalidated users management tab (feature 1174)- Expired users are displayed in red color text.
+
+-- 2.11.4 : Bug 1177 fixed : Width of excluded email providers list reset to ancient value (80 col)
+						Bug 1179 fixed : Adding a notice in plugin inline documentation for use of validation groups and status. A default group must be set in Piwigo's groups settings and the "Guest" (or another user) must be set as default for status values.
+						Bug 1182 fixed : Language tag missing in confirmation email generation 
+
+-- 2.11.5 : Bug 1195 fixed : Registration displays the good title
+
+
+***************************************
+***** Plugin history (branch 2.12)*****
+***************************************
+
+-- 2.12.0 : Bug 1206 fixed : All plugin functionnalities work in user's profile page
+            Plugin's core code and admin panel refactoring
+            Password control and enforcement : A complexity score is computed on user registration. If this score is less than the goal set by admin, the password choosen is rejected.
+            Feature 1194 "Ghost Tracker" added : New plugin tab displays users who don't comes back to the gallery since x days. Ability to send email reminders and to delete reminded but "dead" users. It's the reason why this feature is called "Ghost Tracker".
+
+-- 2.12.1 : Rollback on admin panel improvement (it was a bad idea)
+
+-- 2.12.2 : Bug 1221 fixed - Adding of a new funtion to populate the lastvisit table on Ghost Tracker activation
+            Bug 1224 fixed - Error in database after plugin activation
+            Bug 1225 fixed - "Reminder" status don't change from "false" to "true" after the sent of a reminder email
+            Some code beautify (SQL requests and HTML 4 strict for tpl)
+
+-- 2.12.3 : Bug 1226 fixed - "duplicate key error" when lastvisit table is not empty and on using Ghost Tracker init function
+
+-- 2.12.4 : Adding a password field control for SendMail2User - Neighborhood plugin compatibility improvement 
+            Bug 1229 fixed - Email was no longer mandatory when plugin was active, even if Piwigo's email madatory option was set. 
+
+-- 2.12.5 : Bug 1233 fixed -  "duplicate key error" when a user wants to register with an existing username. In fact, all standard Piwigo's register controls didn't work when plugin was activated. That fixes this too.
+            Adding DE, ES and IT languages. All translations are not finalized and could be improved.
+            Adding of description.txt file in language directories.
+
+-- 2.12.6 : Bug 1236 fixed -  Admins was unable to add a new user in the user_list page.
+            Beginning of IT translations
+            
+-- 2.12.7 : Bug 1238 fixed - Simple custom email text wasn't send when Extended Description plugin wasn't set
+            Bug 1245 fixed - Semicolons (;) are no longer allowed in text areas (mail info text, ConfirmMail text, reminder text,...). They'll be replaced by dots (.).
+            Bug 1248 fixed - Php notice on user registration with a forbidden email domain
+            Bug 1250 fixed - Email provider didn't work after the third exclusion in list
+            Escaping all special characters typed in login name and recover them
+
+
+***************************************
+***** Plugin history (branch 2.13)*****
+***************************************
+ 
+-- 2.13.0 : Bug 1246 fixed - Extended Description tags are working again ! Caution : The language used and saved in database is the one configured by default in the visitor's browser and not the language given by Language Switch.
+            Evolution 1239 - New option to add a new tab that shows the number of days since their last visit for each registered user.
+            Bug 1257 fixed - If email exclusion list begins with a CR-LF, an informative warning message is displayed (I was unable to delete automatically this CR-LF).
+            Bug 1259 fixed - PHP notice on user addition by admin in user_list page.
+            Bug 1260 fixed - Username case sensitivity is now fully functionnal in all users entries (user registration and admin panel)
+            Evolution 1273 - Adding of reminder field in advanced user management tab. This allows to see if a reminder have already been send.
+            Evolution 1292 - Adding of navigation bar in tabs where users are listed (when more than 1 page is needed to display users).
+            Code refactory and improvements.
+            Translations improvements.
+
+-- 2.13.1 : Bug 1302 fixed - Re-coded double email check on registration.
+            Bug 1304 fixed - Adding of plugin version in plugin admin panel title.
+
+-- 2.13.2 : Bug 1308 fixed - Reminder emails have the good translated subject.
+
+-- 2.13.3 : Bug 1309 fixed - Forbidden characters in login name work fine again.
+            Bug 1340 fixed - Explanation improvement for option "Nickname is mandatory for comments" 
+            Bug 1342 fixed - Calculation between last visit and today is ok and displays the good color in user list.
+            Italian language improvement (thx to Rio)
+
+-- 2.13.4 : Add of obsolete files management
+            Bug 1303 and 1387 fixed - Due to a bug in Piwigo's 2.0.8 switch_lang() function, the email contents using Extended Description tags wasn't taking user's language in account. A first fix is now set for the current 2.0.8 Piwigo's version and another one is ready to work for the next Piwigo's release.
+            Bug 1444 fixed
+            Bug 1445 fixed - The plugin's administration panel have been all reviewed and improved with text simplification and display enhancement.
+            Bug 1463 fixed
+            
+            *** Feature temporarily postponed in a later version due to problems with ";" in text fields *** Add compatibility with FCK Editor plugin for email text fields
+
+
+***************************************
+***** Plugin history (branch 2.14)*****
+***************************************
+
+-- 2.14.0 : Bug 1308 refixed - Piwigo 2.0.9 fixes the bug on switch_lang() function so the initial UAM fix is no longer needed 
+            Evolution 1392 - No more confirmation email for admins profile changing 
+            Evolution 1465 - Plugin's configuration data are now serialized in database
+            Bug 1466 fixed - The plugin version is correctly displayed on Ghost Tracker tab
+            Bug 1468 fixed - Java error (thx to cljosse)
+            Evolution 1485 - The admin's can choose if the validation of registration have to be sent to users created by them
+            Improving obsolete files cleaning
+            Evolution 1488 - When an admin creates an account an information email is always sent to created user
+            Code simplification - All variables are changed from "UserAdvManager" to "UAM"
+
+-- 2.14.1 : Bug 1497 fixed - Using users tracker without Ghost Tracker is now OK
+
+
+***************************************
+***** Plugin history (branch 2.15)*****
+***************************************
+
+-- 2.15.0 : Plugin compatibility for Piwigo 2.1
+            Bug 1467 fixed - FCK Editor's functionnalities are available on registration's confirmation return page customization fields
+            Bug 1474 fixed - Messages on registration's confirmation return page (ConfirmMail.tpl) are customizable 
+            Bug 1508 fixed - Plugin's name is now UserAdvManager (deletion of "nbc_" in code and PEM)
+            Bug 1551 fixed - Database upgrade improvement
+
+-- 2.15.1 : Bug 1571 fixed - Missing translation tag
+            Bug 1572 fixed - Fix unable to read resource: "ConfirmMail.tpl"
+            Bug 1574 fixed - Beautifying ConfirmMail page
+            Bug 1576 fixed - Compatibility with other database systems than MySql like PostgreSql or Sqlite. Using Piwigo's pwg_db_### integrated functions.
+            Bug 1586 fixed - Links to official forum topic support and bugtacker were added in plugin's admin page
+
+-- 2.15.2 : Bug 1551 re-fixed - There was some problems remaining with old version upgrades
+            Some translations revisited
+            Bug 1655 fixed - Navigation bar is usefull again
+            
+-- 2.15.3 : Quick update to fix a database upgrade issue
+
+-- 2.15.4 : Bug 1310 fixed - UAM tables are now sortable
+            Bug 1656 fixed - New register validation mode: Manual validation by admin
+            Bug 1687 fixed - Login case sensitivity is no more used in this plugin because already set in Piwigo's core
+            Bug 1727 partially fixed - New option to redirect users to profile page after their first login only.
+              Known problem: The redirection doesn't work after registration and after confirmation page (if ConfirmMail is enabled)
+                             The redirection applies to already registered users including admins, webmaster and generic status.
+            Bug 1789 fixed - Escaping double quotes in text fields
+            Bug 1790 fixed - Validation tracking tab is set when correct options are set
+            Bug 1795 fixed - Fixes rules using email information and/or email of validation
+
+-- 2.15.5 : Bug 1693 fixed - Multi-languages are available for ConfirmMail customization (using Extended Description plugin)
+            Bug 1727 fixed - The redirection does not appli to admins, webmaster and generic users.
+            Bug 1807 fixed - Textareas are resized according the screen resolution
+            Bug 1808 fixed - The Tracking users table is ordered by default on "LastVisit" field (last in at top) 
+            Bug 1809 fixed - Addition of a direct link to user's profile in all UAM tables. The link gives a new window
+            Bug 1810 partially fixed - Auto login is not performed after visitors have validated their registration but the "home" button changes his link to redirect to identification page when the redirection option is set. Note: The redirection to profile.php doesn't work because I was unable to use the log_user() function on ConfirmMail page. This feature is still under investigation to perform the best way.
+
+-- 2.15.6 : Bug 1819 fixed - Wrong help text on redirection function
+            Bug 1821 fixed - Cleanup of old deprecated functions slags (Case sensitivity on logins)
+            Bug 1834 fixed - Improving plugin installation and uninstallation process
+
+-- 2.15.7 : Bug 1869 fixed - Compatibility with Adult_Content installation process
+*/
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/include/constants.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/include/constants.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/include/constants.php	(revision 7001)
@@ -0,0 +1,6 @@
+<?php
+global $prefixeTable;
+define('USER_CONFIRM_MAIL_TABLE', $prefixeTable.'user_confirm_mail');
+define('USER_LASTVISIT_TABLE', $prefixeTable.'user_lastvisit_check');
+define('UAM_OBSOLETE', 'obsolete.list');
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/include/functions.inc.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/include/functions.inc.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/include/functions.inc.php	(revision 7001)
@@ -0,0 +1,1244 @@
+<?php
+include_once (UAM_PATH.'include/constants.php');
+load_language('plugin.lang', UAM_PATH);
+
+/* Function called from main.inc.php to send validation email */
+function SendMail2User($typemail, $id, $username, $password, $email, $confirm)
+{
+  /* Only available for next Piwigo release (bug in switch_lang function) */
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+	include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
+  
+	$infos1_perso = "";
+  $infos2_perso = "";
+
+/* We have to get the user's language in database */
+  $query ='
+SELECT user_id, language
+FROM '.USER_INFOS_TABLE.'
+WHERE user_id = '.$id.'
+;';
+  $data = pwg_db_fetch_assoc(pwg_query($query));
+
+/* Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language */
+  if (empty($data))
+  {
+/* And switch gallery to this language before using personalized and multilangual contents */
+    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
+    switch_lang_to($language);
+  }
+  else
+  {
+/* And switch gallery to this language before using personalized and multilangual contents */
+    $language = $data['language']; /* Usefull for debugging */
+    switch_lang_to($data['language']);
+    load_language('plugin.lang', UAM_PATH);
+  }
+
+  switch($typemail)
+  {
+    case 1:
+      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Add of %s', stripslashes($username)));
+      $password = $password <> '' ? $password : l10n('UAM_empty_pwd');
+      
+      if (isset($conf_UAM[9]) and $conf_UAM[9] <> '')
+      {
+        if (function_exists('get_user_language_desc'))
+        {
+          $infos1_perso = get_user_language_desc($conf_UAM[9])."\n\n";
+        }
+        else $infos1_perso = l10n($conf_UAM[9])."\n\n"; 
+      }
+      
+      break;
+      
+    case 2:
+      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Update of %s', stripslashes($username)));
+      $password = $password <> '' ? $password : l10n('UAM_empty_pwd');
+
+      break;
+        
+    case 3:
+      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Update of %s', stripslashes($username)));
+      $password = $password <> '' ? $password : l10n('UAM_no_update_pwd');
+
+      break;
+  }
+
+  if (isset($conf_UAM[0]) and $conf_UAM[0] == 'true')
+  {
+    $infos1 = array(
+      get_l10n_args('infos_mail %s', stripslashes($username)),
+      get_l10n_args('User: %s', stripslashes($username)),
+      get_l10n_args('Password: %s', $password),
+      get_l10n_args('Email: %s', $email),
+      get_l10n_args('', ''),
+    );
+  }
+
+
+  if ( isset($conf_UAM[1]) and $conf_UAM[1] == 'true' and $confirm)
+  {
+    $infos2 = array
+    (
+      get_l10n_args('Link: %s', AddConfirmMail($id, $email)),
+      get_l10n_args('', ''),
+    );
+
+    if (isset($conf_UAM[10]) and $conf_UAM[10] <> '')
+    {
+      if (function_exists('get_user_language_desc'))
+      {
+        $infos2_perso = get_user_language_desc($conf_UAM[10])."\n\n";
+      }
+      else $infos2_perso = l10n($conf_UAM[10])."\n\n";
+    }
+  }
+
+/* ******************************************************** */
+/* **** Pending code since to find how to make it work **** */
+/* ******************************************************** */
+// Testing if FCK Editor is used. Then decoding htmlchars to avoid problems with pwg_mail()
+/*$areas = array();
+array_push( $areas,'UAM_MailInfo_Text','UAM_ConfirmMail_Text');
+
+if (function_exists('set_fckeditor_instance'))
+{
+  $fcke_config = unserialize($conf['FCKEditor']);
+  foreach($areas as $area)
+  {
+    if (isset($fcke_config['UAM_MailInfo_Text']) and $fcke_config['UAM_MailInfo_Text'] = true)
+    {
+      $infos1_perso = html_entity_decode($infos1_perso,ENT_QUOTES,UTF-8);
+    }
+    
+    if (isset($fcke_config['UAM_ConfirmMail_Text']) and $fcke_config['UAM_ConfirmMail_Text'] = true)
+    {
+      $infos2_perso = html_entity_decode($infos2_perso,ENT_QUOTES,UTF-8);
+    }
+  }
+}*/
+
+
+/* Sending the email with subject and contents */
+  pwg_mail($email, array(
+    'subject' => $subject,
+    'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
+  ));
+
+/* ********************** */
+/* Email sending debugger */
+/* This is only to trace  */
+/* the send of emails for */
+/* debugging              */
+/* ********************** */
+//$content = (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url();   
+//MailLog($email,$subject,$content,$language);
+/* ********************** */
+
+/* Switching back to default language */
+switch_lang_back();
+}
+
+
+/* Function called from UAM_admin.php to resend validation email with or without new validation key */
+function ResendMail2User($typemail, $user_id, $username, $email, $confirm)
+{
+  /* Only available for next Piwigo release (bug in switch_lang function) */
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+  
+	include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
+  
+	$infos1_perso = "";
+  $infos2_perso = "";
+  
+/* We have to get the user's language in database */
+  $query ='
+SELECT user_id, language
+FROM '.USER_INFOS_TABLE.'
+WHERE user_id = '.$user_id.'
+;';
+  $data = pwg_db_fetch_assoc(pwg_query($query));
+  $language = $data['language'];
+  
+/* And switch gallery to this language before using personalized and multilangual contents */
+  switch_lang_to($data['language']);
+   
+  load_language('plugin.lang', UAM_PATH);
+
+  switch($typemail)
+  {
+    case 1:
+      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Reminder_with_key_of_%s', $username));
+      
+      if (isset($conf_UAM_ConfirmMail[2]) and $conf_UAM_ConfirmMail[2] <> '' and isset($conf_UAM_ConfirmMail[3]) and $conf_UAM_ConfirmMail[3] == 'true' and $confirm)
+      {
+        if (function_exists('get_user_language_desc'))
+        {
+          $infos1 = get_user_language_desc($conf_UAM_ConfirmMail[2])."\n\n";
+        }
+				else $infos1 = l10n($conf_UAM_ConfirmMail[2])."\n\n";
+
+        $infos2 = array
+        (
+          get_l10n_args('Link: %s', ResetConfirmMail($user_id)),
+          get_l10n_args('', ''),
+        );        
+			}
+
+/* Set reminder true */      
+      $query = "
+UPDATE ".USER_CONFIRM_MAIL_TABLE."
+SET reminder = 'true'
+WHERE user_id = '".$user_id."'
+;";
+      pwg_query($query);
+      
+		break;
+      
+    case 2:
+      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Reminder_without_key_of_%s',$username));
+      
+      if (isset($conf_UAM_ConfirmMail[2]) and $conf_UAM_ConfirmMail[2] <> '' and isset($conf_UAM_ConfirmMail[3]) and $conf_UAM_ConfirmMail[3] == 'true' and !$confirm)
+      {
+        if (function_exists('get_user_language_desc'))
+        {
+          $infos1 = get_user_language_desc($conf_UAM_ConfirmMail[2])."\n\n";
+        }
+        else $infos1 = l10n($conf_UAM_ConfirmMail[2])."\n\n";
+      }
+      
+/* Set reminder true */      
+      $query = "
+UPDATE ".USER_CONFIRM_MAIL_TABLE."
+SET reminder = 'true'
+WHERE user_id = '".$user_id."'
+;";
+      pwg_query($query);
+      
+    break;
+	}
+  
+  pwg_mail($email, array(
+    'subject' => $subject,
+    'content' => ($infos1."\n\n").(isset($infos2) ? l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
+  ));
+
+/* ********************** */
+/* Email sending debugger */
+/* This is only to trace  */
+/* the send of emails for */
+/* debugging              */
+/* ********************** */
+//$content = ($infos1."\n\n").(isset($infos2) ? l10n_args($infos2)."\n\n" : "").get_absolute_root_url();
+//MailLog($email,$subject,$content,$language);
+/* ********************** */
+
+/* Switching back to default language */
+switch_lang_back();
+}
+
+
+/* Function called from UAM_admin.php to send a reminder mail for ghost users */
+function ghostreminder($user_id, $username, $email)
+{
+  /* Only available for next Piwigo release (bug in switch_lang function) */
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+	include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
+  
+	$infos1_perso = "";
+
+/* We have to get the user's language in database */
+  $query ='
+SELECT user_id, language
+FROM '.USER_INFOS_TABLE.'
+WHERE user_id = '.$user_id.'
+;';
+  $data = pwg_db_fetch_assoc(pwg_query($query));
+  $language = $data['language'];
+
+/* And switch gallery to this language before using personalized and multilangual contents */
+  switch_lang_to($data['language']);
+   
+  load_language('plugin.lang', UAM_PATH);
+  
+  $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Ghost_reminder_of_%s', $username));     
+
+  if (isset($conf_UAM[18]) and $conf_UAM[18] <> '' and isset($conf_UAM[16]) and $conf_UAM[16] == 'true')
+  {
+    if (function_exists('get_user_language_desc'))
+    {
+      $infos1 = get_user_language_desc($conf_UAM[18])."\n\n";
+    }
+    else
+    {
+      $infos1 = l10n($conf_UAM[18])."\n\n";
+    }
+
+    resetlastvisit($user_id);
+  }
+
+  pwg_mail($email, array(
+    'subject' => $subject,
+    'content' => $infos1.get_absolute_root_url(),
+  ));
+
+/* ********************** */
+/* Email sending debugger */
+/* This is only to trace  */
+/* the send of emails for */
+/* debugging              */
+/* ********************** */
+//$content = get_user_language_desc($conf_UAM[19])."\n\n";  
+//MailLog($email,$subject,$content,$language);
+/* ********************** */
+
+/* Switching back to default language */
+switch_lang_back();
+}
+
+
+/* Function called from functions AddConfirmMail and ResetConfirmMail for validation key generation */
+function FindAvailableConfirmMailID()
+{
+  while (true)
+  {
+    $id = generate_key(16);
+    $query = "
+SELECT COUNT(*)
+  FROM ".USER_CONFIRM_MAIL_TABLE."
+WHERE id = '".$id."'
+;";
+    list($count) = pwg_db_fetch_row(pwg_query($query));
+
+    if ($count == 0)
+      return $id;
+  }
+}
+
+
+/* Function called from functions SendMail2User to process unvalidated users and generate validation key link */
+function AddConfirmMail($user_id, $email)
+{
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  $Confirm_Mail_ID = FindAvailableConfirmMailID();
+
+  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+  
+  if (isset($Confirm_Mail_ID))
+  {
+    $query = "
+SELECT status
+  FROM ".USER_INFOS_TABLE."
+WHERE user_id = '".$user_id."'
+;";
+    list($status) = pwg_db_fetch_row(pwg_query($query));
+    
+    $query = "
+INSERT INTO ".USER_CONFIRM_MAIL_TABLE."
+  (id, user_id, mail_address, status, date_check)
+VALUES
+  ('".$Confirm_Mail_ID."', '".$user_id."', '".$email."', '".$status."', null)
+;";
+    pwg_query($query);
+
+    $query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$user_id."'
+  AND (
+    group_id = '".$conf_UAM[2]."'
+  OR 
+    group_id = '".$conf_UAM[3]."'
+  )
+;";
+    pwg_query($query);
+
+    if (!is_admin() and $conf_UAM[8] <> -1)
+    {
+      $query = "
+UPDATE ".USER_INFOS_TABLE."
+SET status = '".$conf_UAM[8]."'
+WHERE user_id = '".$user_id."'
+;";
+      pwg_query($query);
+    }
+
+    if ( $conf_UAM[2] <> -1 )
+    {
+      $query = "
+INSERT INTO ".USER_GROUP_TABLE."
+  (user_id, group_id)
+VALUES
+  ('".$user_id."', '".$conf_UAM[2]."')
+;";
+      pwg_query($query);
+    }
+    
+    return get_absolute_root_url().UAM_PATH.'ConfirmMail.php?key='.$Confirm_Mail_ID.'&userid='.$user_id;
+  }
+}
+
+
+/* Function called from main.inc.php to set group to new users if manual validation is set */
+function setgroup($user_id)
+{
+  global $conf;
+  
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  $query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$user_id."'
+  AND (
+    group_id = '".$conf_UAM[2]."'
+  OR 
+    group_id = '".$conf_UAM[3]."'
+  )
+;";
+  pwg_query($query);
+
+  if (!is_admin() and $conf_UAM[8] <> -1)
+  {
+    $query = "
+UPDATE ".USER_INFOS_TABLE."
+SET status = '".$conf_UAM[8]."'
+WHERE user_id = '".$user_id."'
+;";
+    pwg_query($query);
+  }
+
+  if ( $conf_UAM[2] <> -1 )
+  {
+    $query = "
+INSERT INTO ".USER_GROUP_TABLE."
+  (user_id, group_id)
+VALUES
+  ('".$user_id."', '".$conf_UAM[2]."')
+;";
+    pwg_query($query);
+  }
+}
+
+
+/* Function called from UAM_admin.php to reset validation key */
+function ResetConfirmMail($user_id)
+{
+  global $conf;
+  
+  $Confirm_Mail_ID = FindAvailableConfirmMailID();
+
+  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+  
+  if (isset($Confirm_Mail_ID))
+  { 
+    $query = "
+UPDATE ".USER_CONFIRM_MAIL_TABLE."
+SET id = '".$Confirm_Mail_ID."'
+WHERE user_id = '".$user_id."'
+;";
+    pwg_query($query);
+
+		$query = "
+UPDATE ".USER_INFOS_TABLE."
+SET registration_date = '".$dbnow."'
+WHERE user_id = '".$user_id."'
+;";
+		pwg_query($query);
+    
+    return get_absolute_root_url().UAM_PATH.'ConfirmMail.php?key='.$Confirm_Mail_ID.'&userid='.$user_id;
+  }
+}
+
+
+/* Function called from function_UserAdvManager.inc.php to reset last visit date after sending a reminder */
+function resetlastvisit($user_id)
+{
+  global $conf;
+
+  list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+
+  $query = "
+UPDATE ".USER_LASTVISIT_TABLE."
+SET lastvisit = '".$dbnow."', reminder = 'true'
+WHERE user_id = '".$user_id."'
+;";
+  pwg_query($query);
+}
+
+
+/* Function called from main.inc.php - Triggered on user deletion */
+function DeleteConfirmMail($user_id)
+{
+  $query = "
+DELETE FROM ".USER_CONFIRM_MAIL_TABLE."
+WHERE user_id = '".$user_id."'
+;";
+  pwg_query($query);
+}
+
+/* Function called from main.inc.php - Triggered on user deletion */
+function DeleteLastVisit($user_id)
+{
+  $query = "
+DELETE FROM ".USER_LASTVISIT_TABLE."
+WHERE user_id = '".$user_id."'
+;";
+  pwg_query($query);
+}
+
+
+/* Function called from main.inc.php - Triggered on user deletion */
+function DeleteRedir($user_id)
+{
+  $tab = array();
+
+  $query = '
+SELECT value
+FROM '.CONFIG_TABLE.'
+WHERE param = "UserAdvManager_Redir"
+;';
+
+  $tab = pwg_db_fetch_row(pwg_query($query));
+  
+  $values = explode(',', $tab[0]);
+
+  unset($values[array_search($user_id, $values)]);
+     
+  $query = "
+UPDATE ".CONFIG_TABLE."
+SET value = \"".implode(',', $values)."\"
+WHERE param = 'UserAdvManager_Redir';";
+
+  pwg_query($query);
+}
+
+
+/* Function called from ConfirmMail.php to verify validation key used by user according time limit */
+/* Return true is key validation is OK else return false */
+function VerifyConfirmMail($id)
+{
+  global $conf;
+
+  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+  
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+
+  $query = "
+SELECT COUNT(*)
+FROM ".USER_CONFIRM_MAIL_TABLE."
+WHERE id = '".$id."'
+;";
+  list($count) = pwg_db_fetch_row(pwg_query($query));
+
+  if ($count == 1)
+  {
+    $query = "
+SELECT user_id, status, date_check
+FROM ".USER_CONFIRM_MAIL_TABLE."
+WHERE id = '".$id."'
+;";
+    $data = pwg_db_fetch_assoc(pwg_query($query));
+        
+    if (!empty($data) and isset($data['user_id']) and !isset($data['date_check']))
+    {
+      $query = "
+SELECT registration_date
+FROM ".USER_INFOS_TABLE."
+WHERE user_id = '".$data['user_id']."'
+;";
+      list($registration_date) = pwg_db_fetch_row(pwg_query($query));
+
+/*              Time limit process              */
+/* ******************************************** */  
+      if (!empty($registration_date))
+      {
+				// Verify Confirmmail with time limit ON
+				if (isset ($conf_UAM_ConfirmMail[1]))
+				{
+					// dates formating and compare
+					$today = date("d-m-Y"); // Get today's date
+					list($day, $month, $year) = explode('-', $today); // explode date of today						 
+ 					$daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
+	  		
+	  			list($regdate, $regtime) = explode(' ', $registration_date); // Explode date and time from registration date
+					list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
+					$regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
+			
+					$deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps	
+					$deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
+
+					// Condition with the value set for time limit
+					if ($deltadays <= $conf_UAM_ConfirmMail[1]) // If Nb of days is less than the limit set
+					{
+						list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+
+						$query = '
+UPDATE '.USER_CONFIRM_MAIL_TABLE.'
+SET date_check="'.$dbnow.'"
+WHERE id = "'.$id.'"
+;';
+						pwg_query($query);
+      
+						if ($conf_UAM[2] <> -1) // Delete user from unvalidated users group
+						{
+							$query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$data['user_id']."'
+  AND group_id = '".$conf_UAM[2]."'
+;";
+							pwg_query($query);
+						}
+	    
+						if ($conf_UAM[3] <> -1) // Add user to validated users group 
+						{
+							$query = "
+INSERT INTO ".USER_GROUP_TABLE."
+  (user_id, group_id)
+VALUES
+  ('".$data['user_id']."', '".$conf_UAM[3]."')
+;";
+							pwg_query($query);
+						}
+
+						if (($conf_UAM[4] <> -1 or isset($data['status']))) // Change user's status
+						{
+							$query = "
+UPDATE ".USER_INFOS_TABLE."
+SET status = '".(isset($data['status']) ? $data['status'] : $conf_UAM[4])."'
+WHERE user_id = '".$data['user_id']."'
+;";
+							pwg_query($query);
+						}
+						// Refresh user's category cache
+						invalidate_user_cache();
+  
+						return true;
+					}
+					elseif ($deltadays > $conf_UAM_ConfirmMail[1]) // If timelimit exeeds
+					{
+						return false;
+					}
+				}
+				// Verify Confirmmail with time limit OFF
+				else
+				{
+					list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+
+					$query = '
+UPDATE '.USER_CONFIRM_MAIL_TABLE.'
+SET date_check="'.$dbnow.'"
+WHERE id = "'.$id.'"
+;';
+					pwg_query($query);
+      
+					if ($conf_UAM[2] <> -1)
+					{
+						$query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$data['user_id']."'
+AND group_id = '".$conf_UAM[2]."'
+;";
+						pwg_query($query);
+					}
+    
+					if ($conf_UAM[3] <> -1)
+					{
+						$query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$data['user_id']."'
+AND group_id = '".$conf_UAM[3]."'
+;";
+						pwg_query($query);
+
+						$query = "
+INSERT INTO ".USER_GROUP_TABLE."
+  (user_id, group_id)
+VALUES
+  ('".$data['user_id']."', '".$conf_UAM[3]."')
+;";
+						pwg_query($query);
+					}
+
+					if (($conf_UAM[4] <> -1 or isset($data['status'])))
+					{
+						$query = "
+UPDATE ".USER_INFOS_TABLE."
+SET status = '".(isset($data['status']) ? $data['status'] : $conf_UAM[4])."'
+WHERE user_id = '".$data['user_id']."'
+;";
+						pwg_query($query);
+					}
+					// Refresh user's category cache
+					invalidate_user_cache();
+  
+					return true;
+				}
+			}
+		}
+	}
+  else
+    return false;
+}
+
+/* Function called from UAM_admin.php to force users validation by admin */
+function ForceValidation($id)
+{
+  global $conf;
+
+  include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+        
+  $query = "
+SELECT COUNT(*)
+  FROM ".USER_CONFIRM_MAIL_TABLE."
+WHERE user_id = '".$id."'
+;";
+  list($count) = pwg_db_fetch_row(pwg_query($query));
+
+  if ($count == 1)
+  {
+    $query = "
+SELECT user_id, status, date_check
+  FROM ".USER_CONFIRM_MAIL_TABLE."
+WHERE user_id = '".$id."'
+;";
+    $data = pwg_db_fetch_assoc(pwg_query($query));
+
+    if (!empty($data) and isset($data['user_id']) and !isset($data['date_check']))
+    {      
+			list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+
+			$query = "
+UPDATE ".USER_CONFIRM_MAIL_TABLE."
+SET date_check='".$dbnow."'
+WHERE user_id = '".$data['user_id']."'
+;";
+			pwg_query($query);
+	     
+			if ($conf_UAM[2] <> -1)
+			{
+				$query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$data['user_id']."'
+  AND group_id = '".$conf_UAM[2]."'
+;";
+				pwg_query($query);
+			}
+  
+			if ($conf_UAM[3] <> -1)
+			{
+				$query = "
+DELETE FROM ".USER_GROUP_TABLE."
+WHERE user_id = '".$data['user_id']."'
+  AND group_id = '".$conf_UAM[3]."'
+				;";
+				pwg_query($query);
+	
+				$query = "
+INSERT INTO ".USER_GROUP_TABLE."
+  (user_id, group_id)
+VALUES
+  ('".$data['user_id']."', '".$conf_UAM[3]."')
+;";
+				pwg_query($query);
+			}
+
+			if (($conf_UAM[4] <> -1 or isset($data['status'])))
+			{
+				$query = "
+UPDATE ".USER_INFOS_TABLE."
+SET status = '".(isset($data['status']) ? $data['status'] : $conf_UAM[4])."'
+WHERE user_id = '".$data['user_id']."'
+;";
+				pwg_query($query);
+			}
+			// Refresh user's category cache
+			invalidate_user_cache();
+			return true;
+		}
+	}
+}
+
+
+/* Function called from main.inc.php - Check if username matches forbidden caracters */
+function ValidateUsername($login)
+{
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  if (isset($login) and isset($conf_UAM[7]) and $conf_UAM[7] <> '')
+  {
+    $conf_CharExclusion = preg_split("/,/",$conf_UAM[7]);
+    for ($i = 0 ; $i < count($conf_CharExclusion) ; $i++)
+    {
+      $pattern = '/'.$conf_CharExclusion[$i].'/i';
+      if (preg_match($pattern, $login))
+      {
+        return true;
+      }
+    }
+  }
+  else
+  {
+    return false;
+  }
+}
+
+
+/* Function called from main.inc.php - Check if user's email is in excluded email providers list */
+/* Doesn't work on call - Must be copied in main.inc.php to work */
+function ValidateEmailProvider($email)
+{
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+	if (isset($email) and isset($conf_UAM[12]) and $conf_UAM[12] <> '')
+	{
+		//$ncsemail = strtolower($email);
+		$conf_MailExclusion = preg_split("/[\s,]+/",$conf_UAM[12]);
+		for ($i = 0 ; $i < count($conf_MailExclusion) ; $i++)
+		{
+			$pattern = '/'.$conf_MailExclusion[$i].'/i';
+			if (preg_match($pattern, $email))
+      {
+        		return true;
+      }
+		}
+	}
+  else
+  {
+    return false;
+  }
+}
+
+
+/* Function called from UserAdvManager.php - Get unvalidated users according time limit */
+function get_unvalid_user_list()
+{
+	global $conf, $page;
+          
+	/* Get ConfirmMail configuration */
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+  /* Get UAM configuration */
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+  $users = array();
+
+	/* search users depending expiration date */
+  $query = '
+SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
+                u.'.$conf['user_fields']['username'].' AS username,
+                u.'.$conf['user_fields']['email'].' AS email,
+                ui.status,
+                ui.adviser,
+                ui.enabled_high,
+                ui.level,
+                ui.registration_date
+FROM '.USERS_TABLE.' AS u
+  INNER JOIN '.USER_INFOS_TABLE.' AS ui
+    ON u.'.$conf['user_fields']['id'].' = ui.user_id
+  LEFT JOIN '.USER_GROUP_TABLE.' AS ug
+    ON u.'.$conf['user_fields']['id'].' = ug.user_id
+WHERE u.'.$conf['user_fields']['id'].' >= 3
+  AND (TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) >= "'.$conf_UAM_ConfirmMail[1].'"
+  OR TO_DAYS(NOW()) - TO_DAYS(ui.registration_date) < "'.$conf_UAM_ConfirmMail[1].'")';
+
+	if ($conf_UAM[2] <> '-1' and $conf_UAM[8] == '-1')
+  {
+    $query.= '
+  AND ug.group_id = '.$conf_UAM[2];
+  }
+  if ($conf_UAM[2] == '-1' and $conf_UAM[8] <> '-1')
+  {
+    $query.= '
+  AND ui.status = \''.$conf_UAM[8]."'";
+  }
+  if ($conf_UAM[2] <> '-1' and $conf_UAM[8] <> '-1')
+  {
+    $query.= '
+  AND ug.group_id = \''.$conf_UAM[2]."'";
+  }
+  $query.= '
+ORDER BY ui.registration_date ASC
+;';
+
+	$result = pwg_query($query);
+      
+  while ($row = pwg_db_fetch_assoc($result))
+  {
+  	$user = $row;
+    $user['groups'] = array();
+
+    array_push($users, $user);
+	}
+
+	/* add group lists */
+  $user_ids = array();
+  foreach ($users as $i => $user)
+  {
+  	$user_ids[$i] = $user['id'];
+	}
+	
+	$user_nums = array_flip($user_ids);
+
+  if (count($user_ids) > 0)
+  {
+  	$query = '
+SELECT user_id, group_id
+  FROM '.USER_GROUP_TABLE.'
+WHERE user_id IN ('.implode(',', $user_ids).')
+;';
+        
+		$result = pwg_query($query);
+        
+    while ($row = pwg_db_fetch_assoc($result))
+    {
+    	array_push(
+      	$users[$user_nums[$row['user_id']]]['groups'],
+        $row['group_id']
+			);
+		}
+	}
+
+	return $users;
+}
+
+
+/* Function called from UserAdvManager.php - Get ghost users */
+function get_ghost_user_list()
+{
+	global $conf, $page;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+  $users = array();
+
+	/* search users depending expiration date */
+  $query = '
+SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
+                u.'.$conf['user_fields']['username'].' AS username,
+                u.'.$conf['user_fields']['email'].' AS email,
+                lv.lastvisit,
+                lv.reminder
+FROM '.USERS_TABLE.' AS u
+  INNER JOIN '.USER_LASTVISIT_TABLE.' AS lv
+    ON u.'.$conf['user_fields']['id'].' = lv.user_id
+WHERE (TO_DAYS(NOW()) - TO_DAYS(lv.lastvisit) >= "'.$conf_UAM[17].'")
+ORDER BY lv.lastvisit ASC;';
+
+	$result = pwg_query($query);
+      
+  while ($row = pwg_db_fetch_assoc($result))
+  {
+  	$user = $row;
+    $user['groups'] = array();
+
+    array_push($users, $user);
+	}
+
+	/* add group lists */
+  $user_ids = array();
+  foreach ($users as $i => $user)
+  {
+  	$user_ids[$i] = $user['id'];
+	}
+
+	return $users;
+}
+
+
+/* Function called from UserAdvManager.php - Get all users to display the number of days since their last visit */
+function get_user_list()
+{
+	global $conf, $page;
+  
+  $users = array();
+
+	/* search users depending expiration date */
+  $query = '
+SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
+                u.'.$conf['user_fields']['username'].' AS username,
+                u.'.$conf['user_fields']['email'].' AS email,
+                ug.lastvisit
+FROM '.USERS_TABLE.' AS u
+  INNER JOIN '.USER_LASTVISIT_TABLE.' AS ug
+    ON u.'.$conf['user_fields']['id'].' = ug.user_id
+WHERE u.'.$conf['user_fields']['id'].' >= 3
+ORDER BY ug.lastvisit DESC
+;';
+
+	$result = pwg_query($query);
+      
+  while ($row = pwg_db_fetch_assoc($result))
+  {
+  	$user = $row;
+    $user['groups'] = array();
+
+    array_push($users, $user);
+	}
+
+	/* add group lists */
+  $user_ids = array();
+  foreach ($users as $i => $user)
+  {
+  	$user_ids[$i] = $user['id'];
+	}
+
+	return $users;
+}
+
+
+/* Function called from UserAdvManager.php - to determine who is expired or not and giving a different display color */
+function expiration($id)
+{
+	global $conf, $page;
+          
+	/* Get ConfirmMail configuration */
+  $conf_UAM_ConfirmMail = unserialize($conf['UserAdvManager_ConfirmMail']);
+          
+	/* Get UAM configuration */
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+	
+	$query = "
+SELECT registration_date
+  FROM ".USER_INFOS_TABLE."
+WHERE user_id = '".$id."'
+;";
+	list($registration_date) = pwg_db_fetch_row(pwg_query($query));
+
+/*              Time limit process              */
+/* ******************************************** */  
+	if (!empty($registration_date))
+  {
+		// dates formating and compare
+		$today = date("d-m-Y"); // Get today's date
+		list($day, $month, $year) = explode('-', $today); // explode date of today						 
+ 		$daytimestamp = mktime(0, 0, 0, $month, $day, $year);// Generate UNIX timestamp
+	  	
+	  list($regdate, $regtime) = explode(' ', $registration_date); // Explode date and time from registration date
+		list($regyear, $regmonth, $regday) = explode('-', $regdate); // Explode date from registration date
+		$regtimestamp = mktime(0, 0, 0, $regmonth, $regday, $regyear);// Generate UNIX timestamp
+			
+		$deltasecs = $daytimestamp - $regtimestamp;// Compare the 2 UNIX timestamps	
+		$deltadays = floor($deltasecs / 86400);// Convert result from seconds to days
+
+		// Condition with the value set for time limit
+		if ($deltadays <= $conf_UAM_ConfirmMail[1]) // If Nb of days is less than the limit set
+		{
+			return false;
+		}
+		else
+		{
+			return true;
+		}
+	}
+}
+
+
+/**
+ * Returns a password's score for password complexity check
+ *
+ * @param password filled by user
+ * 
+ * Thanx to MathieuGut from http://m-gut.developpez.com
+ */
+function testpassword($password) // Le mot de passe passé en paramètre - $password given by user
+{
+
+  // Initialisation des variables - Variables initiation
+  $points = 0;
+  $point_lowercase = 0;
+  $point_uppercase = 0;
+  $point_numbers = 0;
+  $point_characters = 0;
+
+  // On récupère la longueur du mot de passe - Getting password lengh	
+  $length = strlen($password);
+  
+  // On fait une boucle pour lire chaque lettre - Loop to read password characters
+  for($i = 0; $i < $length; $i++)
+  {
+    // On sélectionne une à une chaque lettre - Select each letters
+    // $i étant à 0 lors du premier passage de la boucle - $i is 0 at first turn
+    $letters = $password[$i];
+
+    if ($letters>='a' && $letters<='z')
+    {
+      // On ajoute 1 point pour une minuscule - Adding 1 point to score for a lowercase
+		  $points = $points + 1;
+
+		  // On rajoute le bonus pour une minuscule - Adding bonus points for lowercase
+		  $point_lowercase = 1;
+    }
+    else if ($letters>='A' && $letters <='Z')
+    {
+      // On ajoute 2 points pour une majuscule - Adding 2 points to score for uppercase
+      $points = $points + 2;
+		
+      // On rajoute le bonus pour une majuscule - Adding bonus points for uppercase
+      $point_uppercase = 2;
+    }
+    else if ($letters>='0' && $letters<='9')
+    {
+      // On ajoute 3 points pour un chiffre - Adding 3 points to score for numbers
+      $points = $points + 3;
+		
+      // On rajoute le bonus pour un chiffre - Adding bonus points for numbers
+      $point_numbers = 3;
+    }
+    else
+    {
+      // On ajoute 5 points pour un caractère autre - Adding 5 points to score for special characters
+      $points = $points + 5;
+		
+      // On rajoute le bonus pour un caractère autre - Adding bonus points for special characters
+      $point_characters = 5;
+    }
+  }
+
+  // Calcul du coefficient points/longueur - calculating the coefficient points/length
+  $step1 = $points / $length;
+
+  // Calcul du coefficient de la diversité des types de caractères... - Calculation of the diversity of character types...
+  $step2 = $point_lowercase + $point_uppercase + $point_numbers + $point_characters;
+
+  // Multiplication du coefficient de diversité avec celui de la longueur - Multiplying the coefficient of diversity with that of the length
+  $score = $step1 * $step2;
+
+  // Multiplication du résultat par la longueur de la chaîne - Multiplying the result by the length of the chain
+  $finalscore = $score * $length;
+
+  return $finalscore;
+}
+
+/* Function called from maintain.inc.php - to check if database upgrade is needed */
+function table_exist($table)
+{
+  $query = 'DESC '.$table.';';
+  return (bool)($res=pwg_query($query));
+}
+
+/* Email sending debugger function */
+function MailLog($to, $subject, $content, $language)
+{
+   $fo=fopen (UAM_PATH.'admin/maillog.txt','a') ;
+   fwrite($fo,"======================\n") ;
+   fwrite($fo,'le ' . date('D, d M Y H:i:s') . "\r\n");
+   fwrite($fo,$to . "\n" . $subject . "\r\n") ;
+   fwrite($fo, "\n" . $content . "\r\n") ;
+   fwrite($fo, 'Langue : '."\n" . $language . "\r\n") ;
+   fclose($fo) ;
+   //return mail ($to,$subject) ;
+}
+
+
+/* Function called from UAM_admin.php and main.inc.php to get the plugin version and name */
+function PluginInfos($dir)
+{
+  $path = $dir;
+
+  $plg_data = implode( '', file($path.'main.inc.php') );
+  if ( preg_match("|Plugin Name: (.*)|", $plg_data, $val) )
+  {
+    $plugin['name'] = trim( $val[1] );
+  }
+  if (preg_match("|Version: (.*)|", $plg_data, $val))
+  {
+    $plugin['version'] = trim($val[1]);
+  }
+  if ( preg_match("|Plugin URI: (.*)|", $plg_data, $val) )
+  {
+    $plugin['uri'] = trim($val[1]);
+  }
+  if ($desc = load_language('description.txt', $path.'/', array('return' => true)))
+  {
+    $plugin['description'] = trim($desc);
+  }
+  elseif ( preg_match("|Description: (.*)|", $plg_data, $val) )
+  {
+    $plugin['description'] = trim($val[1]);
+  }
+  if ( preg_match("|Author: (.*)|", $plg_data, $val) )
+  {
+    $plugin['author'] = trim($val[1]);
+  }
+  if ( preg_match("|Author URI: (.*)|", $plg_data, $val) )
+  {
+    $plugin['author uri'] = trim($val[1]);
+  }
+  if (!empty($plugin['uri']) and strpos($plugin['uri'] , 'extension_view.php?eid='))
+  {
+    list( , $extension) = explode('extension_view.php?eid=', $plugin['uri']);
+    if (is_numeric($extension)) $plugin['extension'] = $extension;
+  }
+// IMPORTANT SECURITY !
+  $plugin = array_map('htmlspecialchars', $plugin);
+
+  return $plugin ;
+}
+
+
+function clean_obsolete_files()
+{
+  if (file_exists(UAM_PATH.'obsolete.list')
+    and $old_files = file(UAM_PATH.'obsolete.list', FILE_IGNORE_NEW_LINES)
+    and !empty($old_files))
+  {
+    array_push($old_files, 'obsolete.list');
+    foreach($old_files as $old_file)
+    {
+      $path = UAM_PATH.$old_file;
+      if (is_file($path))
+      {
+        @unlink($path);
+      }
+    }
+  }
+}
+
+
+// check_consult - Thx to LucMorizur
+// checks if a user id is registered as having already
+// visited his profile.php page.
+// @uid        : the user id
+// @user_idsOK : (returned) array of all users ids having already visited
+//               their profile.php pages
+//
+// @returns    : true or false whether the users has already visited his
+//               profile.php page or not
+function check_consult($uid, &$user_idsOK)
+{
+  $t = array();
+  $v = false;
+  
+  $query = "
+SELECT value
+FROM ".CONFIG_TABLE."
+WHERE param = 'UserAdvManager_Redir'
+;";
+  
+  if ($v = (($t = pwg_db_fetch_row(pwg_query($query))) !== false))
+  {
+    $user_idsOK = explode(',', $t[0]);
+    $v = (in_array($uid, $user_idsOK));
+  }
+  return $v;
+}
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/include/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/include/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/include/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/include/upgradedb.inc.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/include/upgradedb.inc.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/include/upgradedb.inc.php	(revision 7001)
@@ -0,0 +1,269 @@
+<?php
+/**
+ * @author Eric@piwigo.org
+ * @copyright 2010
+ * 
+ * Upgrade processes for old plugin version
+ * Called from maintain.inc.php on plugin activation
+ * 
+ */
+
+if(!defined('UAM_PATH'))
+{
+  define('UAM_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
+}
+if (!defined('UAM_ROOT'))
+{
+  define('UAM_ROOT', dirname(__FILE__).'/');
+}
+
+include_once (UAM_PATH.'include/constants.php');
+include_once (UAM_PATH.'include/functions.inc.php');
+
+// +----------------------------------------------------------+
+// |       Upgrading database from old plugin versions        |
+// +----------------------------------------------------------+
+
+/* upgrade from branch 2.10 to 2.11 */
+/* ******************************** */
+function upgrade_210_211()
+{
+	global $conf;
+	  
+  $q = '
+INSERT INTO '.CONFIG_TABLE.' (param, value, comment)
+VALUES ("nbc_UserAdvManager_ConfirmMail","false;5;Hello.
+		
+This is a reminder message because you registered on our gallery but you do not validate your registration and your validation key has expired. To still allow you to access to our gallery, your validation period has been reset. You have again 5 days to validate your registration.
+
+Note: After this period, your account will be permanently deleted.;false;Hello.
+
+This is a reminder message because you registered on our gallery but you do not validate your registration and your validation key will expire. To allow you access to our gallery, you have 2 days to confirm your registration by clicking on the link in the message you should have received when you registered.
+
+Note: After this period, your account will be permanently deleted.","Parametres nbc_UserAdvManager - ConfirmMail")
+  ;';
+  pwg_query($q);
+
+  upgrade_211_212();
+}
+
+
+/* upgrade from branch 2.11 to 2.12 */
+/* ******************************** */
+function upgrade_211_212()
+{
+	global $conf;
+
+  $conf_UAM = isset($conf['nbc_UserAdvManager']) ? explode(";" , $conf['nbc_UserAdvManager']) : array();
+
+  if ((!isset($conf_UAM[14]) and !isset($conf_UAM[15])) and !isset($conf_UAM[16]) and !isset($conf_UAM[17]))
+  {
+    $upgrade_UAM = $conf_UAM[0].';'.$conf_UAM[1].';'.$conf_UAM[2].';'.$conf_UAM[3].';'.$conf_UAM[4].';'.$conf_UAM[5].';'.$conf_UAM[6].';'.$conf_UAM[7].';'.$conf_UAM[8].';'.$conf_UAM[9].';'.$conf_UAM[10].';'.$conf_UAM[11].';'.$conf_UAM[12].';'.$conf_UAM[13].';false;100;false;false;10;Hello.
+	
+This is a reminder because a very long time passed since your last visit on our gallery. If you do not want anymore to use your access account, please let us know by replying to this email. Your account will be deleted.
+
+On receipt of this message and no new visit within 15 days, we would be obliged to automatically delete your account.
+
+Best regards,
+
+The admin of the gallery.';
+		
+		$query = '
+UPDATE '.CONFIG_TABLE.'
+SET value="'.$upgrade_UAM.'"
+WHERE param="nbc_UserAdvManager"
+LIMIT 1
+;';
+		pwg_query($query);
+  }
+  
+	$q = "
+CREATE TABLE IF NOT EXISTS ".USER_LASTVISIT_TABLE." (
+  user_id SMALLINT(5) NOT NULL DEFAULT '0',
+  lastvisit DATETIME NULL DEFAULT NULL,
+  reminder ENUM('true','false') NULL,
+PRIMARY KEY (`user_id`)
+  )
+;";
+  pwg_query($q);
+
+  upgrade_212_213();
+}
+
+
+/* upgrade from branch 2.12 to 2.13 */
+/* ******************************** */
+function upgrade_212_213()
+{
+/* Create missing table */
+  $query = "
+ALTER TABLE ".USER_CONFIRM_MAIL_TABLE."
+ADD reminder ENUM('true', 'false') NULL DEFAULT NULL
+;";
+  
+  pwg_query($query);
+
+/* Upgrade plugin configuration */
+	global $conf;
+
+  $conf_UAM = isset($conf['nbc_UserAdvManager']) ? explode(";" , $conf['nbc_UserAdvManager']) : array();
+
+  if ((!isset($conf_UAM[20])))
+  {
+    $upgrade_UAM = $conf_UAM[0].';'.$conf_UAM[1].';'.$conf_UAM[2].';'.$conf_UAM[3].';'.$conf_UAM[4].';'.$conf_UAM[5].';'.$conf_UAM[6].';'.$conf_UAM[7].';'.$conf_UAM[8].';'.$conf_UAM[9].';'.$conf_UAM[10].';'.$conf_UAM[11].';'.$conf_UAM[12].';'.$conf_UAM[13].';'.$conf_UAM[14].';'.$conf_UAM[15].';'.$conf_UAM[16].';'.$conf_UAM[17].';'.$conf_UAM[18].';'.$conf_UAM[19].';false';
+		
+		$query = '
+UPDATE '.CONFIG_TABLE.'
+SET value="'.$upgrade_UAM.'"
+WHERE param="nbc_UserAdvManager"
+LIMIT 1
+;';
+		pwg_query($query);
+    
+    upgrade_213_214();
+  }
+}
+
+
+/* upgrade from branch 2.13 to 2.14 */
+/* ******************************** */
+function upgrade_213_214()
+{
+	global $conf;
+  
+  $conf_UAM = explode(';', $conf['nbc_UserAdvManager']);
+
+  $upgrade_UAM = array($conf_UAM[0],$conf_UAM[1],$conf_UAM[2],$conf_UAM[3],$conf_UAM[4],$conf_UAM[5],$conf_UAM[6],$conf_UAM[7],$conf_UAM[8],$conf_UAM[9],$conf_UAM[10],$conf_UAM[11],$conf_UAM[12],$conf_UAM[13],$conf_UAM[14],$conf_UAM[15],$conf_UAM[16],$conf_UAM[17],$conf_UAM[18],$conf_UAM[19],$conf_UAM[20],'false');
+
+  $query = '
+UPDATE '.CONFIG_TABLE.'
+  SET value = "'.addslashes(serialize($upgrade_UAM)).'"
+  WHERE param = "nbc_UserAdvManager"
+;';
+  pwg_query($query);
+  
+  if (unserialize($conf['nbc_UserAdvManager_ConfirmMail']) === false)
+  {
+    $data = explode(';', $conf['nbc_UserAdvManager_ConfirmMail']);
+
+    $query = '
+UPDATE '.CONFIG_TABLE.'
+  SET value = "'.addslashes(serialize($data)).'"
+  WHERE param = "nbc_UserAdvManager_ConfirmMail"
+;';
+    pwg_query($query);
+    
+    upgrade_214_215();
+  }
+}
+
+/* upgrade from branch 2.14 to 2.15 */
+/* ******************************** */
+function upgrade_214_215()
+{
+  global $conf;
+
+/* Changing parameter name */
+  $q = '
+UPDATE '.CONFIG_TABLE.'
+SET param = "UserAdvManager"
+WHERE param = "nbc_UserAdvManager"
+;';
+  pwg_query($q);
+  
+  $q = '
+UPDATE '.CONFIG_TABLE.'
+SET param = "UserAdvManager_ConfirmMail"
+WHERE param = "nbc_UserAdvManager_ConfirmMail"
+;';
+  pwg_query($q);
+
+/* Upgrading ConfirmMail options */
+  $query = '
+SELECT value
+  FROM '.CONFIG_TABLE.'
+WHERE param = "UserAdvManager_ConfirmMail"
+;';
+
+  $result = pwg_query($query);
+  $conf_UAM_ConfirmMail = pwg_db_fetch_assoc($result);
+    
+  $conf_ConfirmMail = unserialize($conf_UAM_ConfirmMail['value']);
+  
+  $conf_ConfirmMail[5] ='Thank you to have confirmed your email address and your registration on the gallery. Have fun !';
+  $conf_ConfirmMail[6] ='Your activation key is incorrect or expired or you have already validated your account, please contact the webmaster to fix this problem.';
+  
+  $update_conf = serialize($conf_ConfirmMail);
+    
+  $query = '
+      UPDATE '.CONFIG_TABLE.'
+			SET value="'.addslashes($update_conf).'"
+			WHERE param="UserAdvManager_ConfirmMail"
+			LIMIT 1
+		;';
+
+		pwg_query($query);
+    
+    upgrade_2153_2154();
+}
+
+/* upgrade from branch 2.15.3 to 2.15.4 */
+/* ************************************ */
+function upgrade_2153_2154()
+{
+  global $conf;
+
+/* Upgrading options */
+  $query = '
+SELECT value
+  FROM '.CONFIG_TABLE.'
+WHERE param = "UserAdvManager"
+;';
+
+  $result = pwg_query($query);
+  $conf_UAM = pwg_db_fetch_assoc($result);
+    
+  $Newconf_UAM = unserialize($conf_UAM['value']);
+  
+  $Newconf_UAM[0] = $Newconf_UAM[0];
+  $Newconf_UAM[1] = $Newconf_UAM[2];
+  $Newconf_UAM[2] = $Newconf_UAM[3];
+  $Newconf_UAM[3] = $Newconf_UAM[4];
+  $Newconf_UAM[4] = $Newconf_UAM[5];
+  $Newconf_UAM[5] = $Newconf_UAM[6];
+  $Newconf_UAM[6] = $Newconf_UAM[7];
+  $Newconf_UAM[7] = $Newconf_UAM[8];
+  $Newconf_UAM[8] = $Newconf_UAM[9];
+  $Newconf_UAM[9] = $Newconf_UAM[10];
+  $Newconf_UAM[10] = $Newconf_UAM[11];
+  $Newconf_UAM[11] = $Newconf_UAM[12];
+  $Newconf_UAM[12] = $Newconf_UAM[13];
+  $Newconf_UAM[13] = $Newconf_UAM[14];
+  $Newconf_UAM[14] = $Newconf_UAM[15];
+  $Newconf_UAM[15] = $Newconf_UAM[16];
+  $Newconf_UAM[16] = $Newconf_UAM[17];
+  $Newconf_UAM[17] = $Newconf_UAM[18];
+  $Newconf_UAM[18] = $Newconf_UAM[19];
+  $Newconf_UAM[19] = $Newconf_UAM[20];
+  $Newconf_UAM[20] = $Newconf_UAM[21];
+  $Newconf_UAM[21] = 'false';
+  
+  $update_conf = serialize($Newconf_UAM);
+    
+  $query = '
+      UPDATE '.CONFIG_TABLE.'
+			SET value="'.addslashes($update_conf).'"
+			WHERE param="UserAdvManager"
+			LIMIT 1
+		;';
+
+	pwg_query($query);
+
+  $query = '
+INSERT INTO '.CONFIG_TABLE.' (param, value, comment)
+VALUES ("UserAdvManager_Redir","0","UAM Redirections")
+  ;';
+  
+  pwg_query($query);
+}
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/description.txt
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/description.txt	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/description.txt	(revision 7001)
@@ -0,0 +1,1 @@
+Stärkt die Möglichkeiten der User-Management
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/help/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/help/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/help/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/help/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/help/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/help/plugin.lang.php	(revision 7001)
@@ -0,0 +1,190 @@
+<?php
+global $lang;
+
+$lang['UAM_restricTitle'] = 'Einschränkungen für Registrierungen';
+$lang['UAM_confirmTitle'] = 'Bestätigungen und Validierungen der Registrierung';
+$lang['UAM_confirmTitle_d'] = '
+- Informationen E-Mail generation<br>
+- Registrieren und Validierung E-Mail generation<br>
+- Gruppen oder Status automatisch Beitritt<br>
+- Anmeldeschluss Validierung<br>
+- Reminder per E-Mail generation<br>
+...
+';
+$lang['UAM_miscTitle'] = 'Registrierung gefolgt und andere Optionen';
+$lang['UAM_miscTitle_d'] = '
+- Geist Benutzer-Management<br>
+- Gefolgt registrierte Benutzer<br>
+- Nickname obligatorisch für Gäste Kommentare<br>
+...
+';
+$lang['UAM_casenTitle'] = 'Benutzernamen: Groß-und Kleinschreibung';
+$lang['UAM_carexcTitle'] = 'Benutzernamen: Ausschluss von Zeichen';
+$lang['UAM_carexcTitle_d'] = 'Es mag interessant sein, bestimmte Zeichen in Benutzernamen verbieten (Beispiel: verweigern Logins mit &quot;@&quot;). Diese Option erm&ouml;glicht es, Zeichen oder Zeichenfolge, Veranstaltungen auszuschlie&szlig;en.<br>
+NB: Die Option kann auch ausschließen, ganze Wörter.
+<br><br>
+<b style=&quot;color: red;&quot;>Warnung: Diese Option hat keine Auswirkungen auf den Benutzernamen erstellt vor ihrer Aktivierung.</b>';
+$lang['UAM_passwTitle'] = 'Stärkung des Sicherheitsniveaus von Kennwörtern';
+$lang['UAM_passwTitle_d'] = 'Durch die Aktivierung dieser Option ist zwingend die Beschlagnahme eines Passwortes bei der Anmeldung und das Kennwort erfordert vom Besucher ausgewählt, um ein Mindestmaß an Komplexität gerecht zu werden. Wird der Schwellenwert nicht erreicht wird, die Gäste erzielt, und die Mindestpunktzahl erreicht werden soll angezeigt werden, zusammen mit Empfehlungen an den Wert dieser Gäste zu steigern.<br><br>
+Es gibt Feldtest der Komplexität eines Passworts zu messen und sich leisten können, eine Vorstellung von der Partitur zu erhalten, um komplexe, kundenspezifische definieren.<br><br>
+Hinweis: Die Gäste eines Passwortes ist auf der Grundlage mehrerer Parameter: Länge berechnet, die Art der verwendeten Zeichen (Buchstaben, Ziffern, Großbuchstaben, Kleinbuchstaben, Sonderzeichen). Ein Wert unter 100 wird als gering, zwischen 100 und 500, die Komplexität ist durchschnittlich, mehr als 500, die Sicherheit ist sehr gut.';
+$lang['UAM_passwtestTitle'] = 'Prüfung der Komplexität eines Passworts';
+$lang['UAM_passwtestTitle_d'] = 'Geben Sie das Kennwort zu testen, und klicken Sie auf &quot;Ergebnis Berechnung&quot;, um das Ergebnis zu sehen.';
+$lang['UAM_passwadmTitle'] = 'Die Anwendung für Administratoren';
+$lang['UAM_passwadmTitle_d'] = 'Ein Administrator kann einen Benutzer-Account erstellen, mit oder ohne Anwendung der Regel der Komplexität des Computings.<br><br>
+Hinweis: Wenn der Benutzer erstellte Konto will Passwort zu ändern und Passwörter für die Benutzer Stärkung aktiv ist, wird es vorbehaltlich der Regel-Satz.';
+$lang['UAM_mailexcTitle'] = 'Ausschluss von Mail-Domänen';
+$lang['UAM_infomailTitle'] = 'Informationen E-Mail an Benutzer';
+$lang['UAM_infomailTitle_d'] = 'Diese Option ermöglicht die Automatisierung Senden einer E-Mail-Informationen an einen Benutzer bei der Anmeldung oder bei Änderungen sein Passwort oder E-Mail-Adresse in ihrem Profil.<br><br>
+Der Inhalt der Nachricht gesendet wird von einem anpassbaren Teil komponiert, um eine kleine Begrüßung und Einführung fester Bestandteil in denen die Login, Passwort und E-Mail-Adresse des Benutzers.';
+$lang['UAM_infotxtTitle'] = 'Anpassen der Informationen per E-Mail';
+$lang['UAM_infotxtTitle_d'] = 'Geben Sie den einleitenden Text, den Sie in der Informations-E-Mail angezeigt.<br><br>
+Um mehrere Sprachen zu benutzen, können Sie die Extended description Plugin-Tags verwenden, wenn er aktiv ist.<br><br>
+<b style=&quot;color: red;&quot;>Text &Auml;nderung ist nur verf&uuml;gbar, wenn die &quot;Informations-E-Mail&quot; aktiviert ist.</b>';
+$lang['UAM_confirmtxtTitle'] = 'Anpassen der E-Mail-Bestätigung';
+$lang['UAM_confirmtxtTitle_d'] = 'Geben Sie den einleitenden Text, den Sie in der E-Mail-Bestätigung der Anmeldung erscheinen.<br><br>
+Um mehrere Sprachen zu benutzen, können Sie die Extended description Plugin-Tags verwenden, wenn er aktiv ist.<br><br>
+<b style=&quot;color: red;&quot;>Der Text werden modifiziert ist nur verf&uuml;gbar, wenn die &quot;Best&auml;tigung der Anmeldung&quot; aktiviert ist.</b>';
+$lang['UAM_confirmgrpTitle'] = 'Validation Gruppen';
+$lang['UAM_confirmgrpTitle_d'] = '<b style=&quot;color: red;&quot;>WARNUNG: Validierung Gruppen setzt voraus, dass Sie mindestens einen Benutzer Gruppe angelegt haben und definiert ist &quot;by default&quot; im User-Gruppen Piwigo-Management.</b><br><br>
+Die Gruppen sind validiert f&uuml;r den Einsatz in Verbindung mit der &quot;Best&auml;tigung der Anmeldung&quot;';
+$lang['UAM_confirmstatTitle'] = 'Validation Satzung';
+$lang['UAM_confirmstatTitle_d'] = '<b style=&quot;color: red;&quot;>WARNUNG: Die Verwendung des Status Validierung erfordert, dass Sie die &quot;Gast&quot;-Nutzer mit Standard-Einstellung (als User Template) f&uuml;r neu registrierte gehalten haben. Hinweis: Sie k&ouml;nnen einem anderen Benutzer als neue Vorlage f&uuml;r registrierte gesetzt. Bitte beachten Sie die Dokumentation des Piwigo f&uuml;r weitere Details.</b><br><br>
+Die Satzung sind validiert f&uuml;r den Einsatz in Verbindung mit der &quot;Best&auml;tigung der Anmeldung&quot;';
+$lang['UAM_validationlimitTitle'] = 'Anmeldeschluss Validierung beschränkt';
+$lang['UAM_validationlimitTitle_d'] = 'Diese Option ermöglicht es, die Gültigkeit der Schlüssel Validierung E-Mail-Grenze geschickt, um neue Registranten. Besucher, wer x Tage Zeit haben, um sich identifizieren, zu registrieren. Nach Ablauf dieser Frist die Validierung Link läuft.<br><br>
+Diese Option ist in Verbindung mit der &quot;Best&auml;tigung der Anmeldung verwendet&quot;';
+$lang['UAM_remailTitle'] = 'Erinnern Unvalidierte User';
+$lang['UAM_remailTitle_d'] = 'Mit dieser Option k&ouml;nnen Sie eine Erinnerung per E-Mail an registrierte Benutzer zu senden, aber noch nicht best&auml;tigt ihre Eintragung in die Zeit. Es funktioniert also in Verbindung mit der &quot;Best&auml;tigung der Anmeldung&quot;<br><br>
+2 Arten von E-Mails gesendet werden können: Mit oder ohne Regeneration der Validierung Schlüssel. Gegebenenfalls kann der Inhalt von E-Mails angepasst werden.<br><br>
+Wenden Sie sich an die &quot;Tracking Validierungen&quot; aus.';
+$lang['UAM_remailtxt1Title'] = 'Reminder per E-Mail mit den neuen Schlüssel generiert';
+$lang['UAM_remailtxt1Title_d'] = 'Geben Sie den einleitenden Text, den Sie in der E-Mail-Erinnerung angezeigt wird, zusätzlich zu der Prüfschlüssel regeneriert.<br><br>
+Wenn leer, wird die E-Mail-Erinnerung nur den Bestätigungslink. Es wird daher dringend empfohlen, ein wenig erläuternden Text zu nehmen. (NB: Der Text Fertigpen mit der Installation des Plugins ist als Beispiel vorgesehen)<br><br>
+Um mehrere Sprachen zu benutzen, können Sie die Extended description Plugin-Tags verwenden, wenn er aktiv ist.<br><br>
+<b style=&quot;color: red;&quot;>Der Text werden modifiziert ist nur verf&uuml;gbar, wenn &quot;Remind Benutzer validierten&quot; aktiviert ist.</b>';
+$lang['UAM_remailtxt2Title'] = 'Reminder per E-Mail, ohne dass neue Schlüssel generiert';
+$lang['UAM_remailtxt2Title_d'] = 'Geben Sie den einleitenden Text, den Sie in der Erinnerung, ohne eine Bestätigung per E-Mail-Taste erscheinen regeneriert.<br><br>
+Wenn links leer ist, wird die E-Mail-Erinnerung leer sein. Es wird daher dringend empfohlen, ein wenig erläuternden Text zu nehmen. (NB: Der Text Fertigpen mit der Installation des Plugins ist als Beispiel vorgesehen)<br><br>
+Um mehrere Sprachen zu benutzen, können Sie die Extended description Plugin-Tags verwenden, wenn er aktiv ist.<br><br>
+<b style=&quot;color: red;&quot;>Der Text werden modifiziert ist nur verf&uuml;gbar, wenn &quot;Remind Benutzer validierten&quot; aktiviert ist.</b>';
+$lang['UAM_ghosttrackerTitle'] = 'Geist Besucher-Management';
+$lang['UAM_ghosttrackerTitle_d'] = 'Auch bekannt als &quot;Geist Tracker&quot;, wenn diese Funktion aktiviert ist, k&ouml;nnen Sie verwalten Ihre Besucher je nach der H&auml;ufigkeit ihrer Besuche. Wenn die Zeit zwischen 2 besucht, ist erreicht, wird der Besucher in Frage zu &quot;Geist Tracker&quot; Tisch, an dem Sie in der Lage sein wird, die Besucher per E-Mail erinnern.<br><br>
+<b style=&quot;color: red;&quot;>Wenn Sie diese Funktion zum ersten Mal oder haben Sie nach einem langen Zeitraum aus, in dem neue Besucher registriert sind, müssen Sie initialisieren, oder setzen Sie den Geist Tracker reaktiviert.</b>';
+$lang['UAM_gttextTitle'] = 'Geist Tracker Erinnerungs-Nachricht';
+$lang['UAM_gttextTitle_d'] = 'Geben Sie den gewünschten Text in die E-Mail-Erinnerung angezeigt, die Benutzer rechtzeitig, um wieder zur Galerie zu besuchen (Anm.: Der Text Fertigpen mit der Installation des Plugins ist als Beispiel vorgesehen).<br><br>
+Um mehrere Sprachen zu benutzen, können Sie die Extended description Plugin-Tags verwenden, wenn er aktiv ist.<br><br>
+<b style=&quot;color: red;&quot;>Der Text werden modifiziert ist nur verf&uuml;gbar, wenn &quot;Ghost Besucher Management&quot; aktiviert ist.</b>';
+$lang['UAM_lastvisitTitle'] = 'Tracking registrierte Benutzer';
+$lang['UAM_lastvisitTitle_d'] = 'Dies aktiviert einen Tisch in der &quot;Tracking users&quot;-Reiter, die Mitglieder der Galerie aufgef&uuml;hrt sind und zum Zeitpunkt ihres letzten Besuch und verbrachte Zeit (Tage) seit ihrem letzten Besuch. Die &Uuml;berwachung ist rein informativ f&uuml;r den Administrator der Galerie.';
+$lang['UAM_commentTitle'] = 'Nickname obligatorisch für Gäste Kommentare';
+$lang['UAM_commentTitle_d'] = 'Wenn &quot;Kommentare f&uuml;r alle&quot; aktiv ist (Beh&ouml;rde f&uuml;r unregistrierte Besucher Kommentare post), erm&ouml;glicht diese Option, um den nicht registrierten Besucher zu zwingen, ein Spitzname, der Kommentar ist willkommen in Kraft.';
+$lang['UAM_tipsTitle'] = 'Tipps und Beispiele';
+$lang['UAM_tipsTitle_d'] = 'Tipps und verschiedene Anwendungsbeispiele';
+$lang['UAM_userlistTitle'] = 'Tracking Benutzer';
+$lang['UAM_usermanTitle'] = 'Tracking Validierungen';
+$lang['UAM_gtTitle'] = 'Geist Besucher-Management';
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_adminconfmailTitle'] = 'Best&auml;tigung der Anmeldung f&uuml;r Administratoren';
+$lang['UAM_adminconfmailTitle_d'] = 'Sie k&ouml;nnen diese Validierung deaktivieren nur f&uuml;r Benutzer-Accounts durch den Administrator &uuml;ber Piwigo\'s Benutzer-Management-Schnittstelle geschaffen.<br><br>
+Bei Aktivierung dieser Option, E-Mail-Best&auml;tigung f&uuml;r die Registrierung wird f&uuml;r jeden Benutzer vom Administrator erstellt wurde gesendet werden.<br><br>
+Durch die Deaktivierung dieser Option (Standard), nur die E-Mail-Informationen gesendet werden (wenn &quot;Informations-E-Mail an Benutzer&quot; aktiviert ist).';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+/*TODO*/$lang['UAM_confirmmail_custom1'] = 'Text of the confirmation page - Confirmation accepted';
+/*TODO*/$lang['UAM_confirmmail_custom1_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>acceptance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+/*TODO*/$lang['UAM_confirmmail_custom2'] = 'Text of the confirmation page - Confirmation rejected';
+/*TODO*/$lang['UAM_confirmmail_custom2_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>rejectance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.2
+$lang['UAM_casenTitle_d'] = 'Standardm&auml;&szlig;ig ist Piwigo Groß-und Kleinschreibung sensitive: Gro&szlig;-und Kleinschreibung ber&uuml;cksichtigt werden verschiedene Buchstaben in den Namen von den Nutzern bei der Registrierung gew&auml;hlt. So, &quot;Foo&quot;, &quot;foo&quot; und &quot;FOO&quot; k&ouml;nnen 3 verschiedene Benutzer.<br><br>
+Die Aktivierung dieser Option erlaubt es, alle Optionen im Fall von &quot;foo&quot; als ein Benutzer zu betrachten. Wenn &quot;foo&quot; bereits vorhanden ist, einen neuen Benutzer erstellen &quot;Foo&quot; werden nicht angenommen.<br><br>
+<b style=&quot;color: red;&quot;>Warnung: Diese Option hat keine Auswirkungen auf den Benutzernamen erstellt vor ihrer Aktivierung.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['UAM_restricTitle_d'] = '
+- Charaktere Ausgrenzung<br>
+- Passwort Durchsetzung<br>
+- E-Mail-Domänen Ausgrenzung<br>
+...
+';
+$lang['UAM_userlistTitle_d'] = 'Diese Seite gibt es zur Information an den Administrator. Es zeigt eine Liste von allen Nutzern auf der Galerie zeigt das Datum und die Anzahl der Tage seit dem letzten Besuch registriert. Die Liste ist in aufsteigender Reihenfolge der Anzahl der Tage sortiert.
+<br><br>
+<b><u>Erst wenn der Geist Tracker aktiv ist</u></b>, wird die Anzahl der Tage ohne einen Besuch wie der folgende Farbcode nach dem Maximum in der Geist Tracker Optionen:
+<br>
+- <b style=&quot;color: lime;&quot;>Grün</b> : Wenn der Benutzer hat die Galerie <b style=&quot;color:lime;&quot;><u>weniger als 50%</u></b> besucht der angegebene H&ouml;chstzahl in der Geist-Tracker.<br>
+- <b style=&quot;color: orange;&quot;>Orange</b> : Wenn der Benutzer hat die Galerie <b style=&quot;color:orange;&quot;><u>zwischen 50% und 99%</u></b> besucht der angegebene H&ouml;chstzahl in der Geist-Tracker.<br>
+- <b style=&quot;color: red;&quot;>Rot</b> : Wenn der Benutzer hat die Galerie <b style=&quot;color:red;&quot;><u>f&uuml;r mehr als 100%</u></b> besucht der angegebene H&ouml;chstzahl in der Geist-Tracker. <b><u>In diesem Fall muss der Benutzer sich auch in der Geist-Tracker-Tabelle.</u></b><br>
+<br>
+Beispiel:
+<br>
+Die Höchstdauer von Geist Tracker ist so konfiguriert, dass 100 Tage.
+<br>
+Ein Benutzer wird in grün angezeigt, wenn er die Galerie für weniger als 50 Tagen besucht haben, in orange, wenn sein letzter Besuch stattgefunden hat zwischen 50 und 99 Tage und rot für 100 Tage und mehr.
+<br><br>
+<b>HINWEIS</b>: Die Liste wird nicht angezeigt, die nicht validiert ihrer Registrierung (falls die M&ouml;glichkeit der Validierung der Registrierung aktiviert ist). Diese Benutzer werden dann in besonderer Weise in der &quot;Tracking Validierungen verwaltet&quot; aus.
+<br><br>
+<b>Die Sortierung der Tabelle Function</b>: Sie können die Daten mit einem Klick auf die Spaltenüberschriften angezeigt. Halten Sie SHIFT-Taste, um Art bis zu 4 gleichzeitige maximale Spalten.';
+$lang['UAM_usermanTitle_d'] = 'Wenn die Begrenzung der Frist für die Anmeldung aktiviert ist, finden Sie weiter unten die Liste der Benutzer, deren Validierung Eintragung erwartet wird, <b style=&quot;text-decoration: underline;&quot;>ob oder nicht</b> sind sie in der Zeit zu validieren.<br><br>
+Das Datum der Eintragung wird in grün angezeigt, wenn der Benutzer unter dem betreffenden Frist wird auf seine Registrierung zu bestätigen. In diesem Fall ist die Validierung Schlüssel noch gültig ist, und wir können eine E-Mail mit oder ohne eine neue Validierung Schlüssel zu schicken.<br><br>
+Wenn das Datum der Eintragung erscheint in Rot, die Validierung abgelaufen. In diesem Fall müssen Sie eine E-Mail mit der Regeneration der Validierung Schlüssel senden, wenn Sie dem Benutzer die Möglichkeit, ihre Anmeldung bestätigen möchten.<br><br>
+In allen Fällen ist es möglich, manuell die Validierung Kraft.<br><br>
+In dieser Ansicht können Sie:
+<br><br>
+- Löschen Sie manuell Konten <b>(Handbuch Drain)</b>
+<br>
+- Generieren Sie per E-Mail-Erinnerung <b>ohne</b> erzeugt einen neuen Schlüssel. Warnung: Senden Sie eine E-Mail-Erinnerung für die angestrebten Besucher. Diese Funktion kann nicht zurückgesetzt dem Zeitpunkt der Eintragung des angestrebten Besucher und das Zeitlimit ist weiterhin gültig.
+<br>
+- Generieren Sie per E-Mail-Erinnerung <b>mit</b> erzeugt einen neuen Schlüssel. Warnung: Senden Sie eine E-Mail-Erinnerung für die angestrebten Besucher. Diese Funktion setzt auch den Zeitpunkt der Eintragung des angestrebten Besucher, die die Frist für die Validierung erweitern entspricht.
+<br>
+- Senden einer Registrierung erwartet Validierung von Hand, auch wenn das Ablaufdatum überschritten ist <b>(zwingen Validierung)</b>.
+<br><br>
+<b>Die Sortierung der Tabelle Function</b> : Sie können die Daten mit einem Klick auf die Spaltenüberschriften angezeigt. Halten Sie SHIFT-Taste, um Art bis zu 4 gleichzeitige maximale Spalten.';
+$lang['UAM_gtTitle_d'] = 'Als Ghost Tracker aktiviert ist und initialisiert wurde, finden Sie weiter unten die Liste der registrierten Besucher, die sich seit x Tagen zur&uuml;ckgegeben haben. &quot;x&quot; ist die Anzahl der Tage konfiguriert in der General-Setup. Dar&uuml;ber hinaus finden Sie eine Spalte angibt, ob eine E-Mail-Erinnerung hat, um die angestrebten Besucher gesendet wurde. So k&ouml;nnen Sie auf einen Blick sehen und zu behandeln Besucher, die nicht wegen der Erinnerung genommen haben.<br><br>In dieser Ansicht können Sie:
+<br><br>
+- Löschen Sie manuell Konten <b>(Handbuch Drain)</b>
+<br>
+- Generieren Sie per E-Mail-Erinnerung <b>mit dem Zurücksetzen der letzte Besuch date</b>. Dies erlaubt es, einen Platzhalter, um die angestrebten Besucher geben. Wenn der Besucher bereits eine Mahnung erhalten haben, durch nichts daran gehindert, eine neue Mail, die wieder zurückgesetzt werden, in der Tat übel, dem letzten Tag besuchen.
+<br><br>
+<b>Die Sortierung der Tabelle Function</b> : Sie können die Daten mit einem Klick auf die Spaltenüberschriften angezeigt. Halten Sie SHIFT-Taste, um Art bis zu 4 gleichzeitige maximale Spalten.';
+$lang['UAM_confirmmailTitle'] = 'Die Bestätigung der Anmeldung';
+/*TODO*/$lang['UAM_confirmmailTitle_d'] = 'This option allows a user to either confirm registration by clicking on a link received in an email sent upon registration or the administrator to manually activate the registration.<br><br>
+In first case, the e-mail is composed of a customizable part to introduce a little welcome note and a fixed part containing the activation link that is generated from a random key that can possibly regenerate through the &quot;Tracking validations&quot; tab.<br><br>
+<br><br>
+In second case, <b><u>there is no validation key send by email!</u></b>. Visitors have to wait until an administrator validate them himself in &quot;Validation tracking&quot; tab. It\s recommanded to activate the Piwigo\'s option &quot;Email admins when a new user registers&quot; (see in Piwigo\'s configuration options) and to use the &quot;Information email to user&quot; to warn new registers to wait on their account activation.
+<br>
+<b style=&quot;color: red;&quot;>NB: Options &quot;Deadline for registration validation limited&quot; and &quot;Remind unvalidated users  &quot; have to be set to off when admin\'s manual validation is enabled.</b>
+<br><br>
+Diese Option ist in der Regel mit der automatischen Zuordnung der Gruppe und / oder Satzung verwendet. Zum Beispiel, ein Benutzer, der nicht validiert ihre Eintragung in eine bestimmte Gruppe von Nutzern eingestellt werden (mit oder ohne Einschr&auml;nkungen auf der Galerie), w&auml;hrend ein Benutzer, der seine Registrierung best&auml;tigt wird in einem &quot;normalen&quot; Gruppe eingestellt werden.';
+$lang['UAM_RedirTitle'] = 'Umleitung auf &quot;Benutzerdaten&quot; Seite';
+// --------- End: New or revised $lang ---- from version 2.15.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.6
+$lang['UAM_RedirTitle_d'] = 'Diese Option automatisch umleiten ein registrierter Benutzer zum sein Benutzerdaten Seite nur bei seinem ersten Anschluss an die Galerie.<br><br>
+Bitte beachten Sie: Dieses Feature funktioniert nicht für alle registrierten Nutzer. Diejenigen mit &quot;admin&quot;, &quot;Webmaster&quot; oder &quot;Generic&quot; Status sind ausgeschlossen.';
+// --------- End: New or revised $lang ---- from version 2.15.6
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.7
+$lang['UAM_mailexcTitle_d'] = 'Standardmäßig akzeptiert Piwigo alle E-Mail-Adressen im Format xxx@yyy.zz. Durch die Aktivierung dieser Option können Sie auf bestimmte Domains im Format ausschließen: @[Domänenname].[Domain Extension].<br><br>
+Beispiele:<br>
+@hotmail.com -> Ausnahme-Adressen *@hotmail.com<br>
+@hotmail -> ohne alle Adressen *@hotmail *
+<br><br>
+<b style=&quot;color: red;&quot;>Die Beschlagnahme ist nur möglich nach Eintragung der Option in der aktivierten Position.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.7
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/de_DE/plugin.lang.php	(revision 7001)
@@ -0,0 +1,274 @@
+<?php
+
+global $lang,$conf;
+
+$conf_UAM = unserialize($conf['UserAdvManager']);
+
+
+/* UserManager Tab */
+$lang['Registration_Date'] = 'Anmeldedatum';
+
+
+/* Mailing */
+$lang['infos_mail %s'] = '%s, finden Sie hier Ihre Informationen um die Galerie Login:';
+$lang['User: %s'] = 'Benutzer : %s';
+$lang['Password: %s'] = 'Passwort: %s';
+$lang['Link: %s'] = 'Klicken Sie bitte auf diesen Link bestätigen Sie Ihre Anmeldung: %s';
+
+
+/* Email confirmation page */
+$lang['title_confirm_mail'] = 'Überprüfen Sie Ihre Registrierung';
+$lang['confirm_mail_page_title'] = 'Überprüfen Sie Ihre Registrierung';
+$lang['confirm_mail_ok'] = '<br><br><br>Wir danken Ihnen, Ihre E-Mail-Adresse bestätigt haben und Ihre Anmeldung auf der Galerie. Viel Spaß!<br><br><br><br>';
+
+
+/* Errors and Warnings */
+$lang['UAM_audit_ok'] = 'Audit OK';
+$lang['Err_audit_no_casse'] = '<b>Diese Konten sind identisch mit den Fall aufmerksam:</b> ';
+$lang['Err_audit_username_char'] = '<b>Dieses Konto verwendet eine oder mehrere der verbotenen Zeichen:</b> ';
+$lang['Err_audit_email_forbidden'] = '<b>Dieses Konto verwendet eine E-Mail-Anbieter sind untersagt:</b> ';
+$lang['Err_audit_advise'] = '<b>Sie müssen Korrekturen an mit neuen Regeln die Sie aktiviert haben, nachzukommen durchzuführen.<br>Verwenden Sie ein Datenbank-Management-Dienstprogramm, um Benutzer-Accounts direkt in der Tabelle richtig ###_USERS';
+$lang['UAM_Empty Author'] = 'Der Autor Feld müssen ausgefüllt werden um einen Kommentar zu schicken.';
+$lang['reg_err_login5'] = 'Benutzername bereits vorhanden, WARNUNG Name ist Groß-und Kleinschreibung.';
+$lang['reg_err_login6'] = 'Benutzername muss nicht die folgenden Zeichen übereinstimmen: ';
+$lang['reg_err_login7'] = 'Ihre E-Mail-Anbieter für die Registrierung ist verboten. Gebannten E-Mail-Anbieter sind: ';
+$lang['UAM_empty_pwd'] = '[leeren Passwort]';
+$lang['UAM_no_update_pwd'] = '[Profil aktualisiert ohne Passwort geändert]';
+$lang['invalid_pwd'] = 'Ungültiger Benutzername oder Passwort !';
+$lang['No_validation_for_Guest'] = 'Der &quot;Gast&quot;-Konto ist nicht Gegenstand der Validierung';
+$lang['No_validation_for_default_user'] = 'Der Standard-Konto ist nicht Gegenstand der Validierung';
+$lang['No_validation_for_Webmaster'] = 'Der &quot;Webmaster&quot;-Konto ist nicht Gegenstand der Validierung';
+$lang['No_validation_for_your_account'] = 'Ihre personnal admin-Konto ist nicht Gegenstand der Validierung';
+$lang['Database_Error'] = '<b><u>Warnung! Integrität kritischer Fehler in der Datenbank.</u></b><br><br>Bitte überprüfen Sie die Integrität der #_user_confirm_mail Tabelle.';
+
+
+/* Processing messages */
+$lang['%d_Mail_With_Key'] = '%d Nachricht mit wichtigen Erneuerung gesendet wurde';
+$lang['%d_Mails_With_Key'] = '%d Nachrichten mit den wichtigsten Erneuerung geschickt wurden';
+$lang['%d_Reminder_Sent'] = '%d Erinnerung Nachricht wurde gesendet';
+$lang['%d_Reminders_Sent'] = '%d Erinnerung Nachrichten wurden gesendet';
+$lang['%d_Validated_User'] = '%d Benutzer manuell validiert';
+$lang['%d_Validated_Users'] = '%d Benutzer manuell validiert';
+
+
+/* Action button names */
+$lang['Delete_selected'] = 'Löschen';
+$lang['Mail_without_key'] = 'Erinnerung ohne Schlüssel';
+$lang['Mail_with_key'] = 'Erinnerung mit Schlüssel';
+
+
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.0 and 2.12.1
+/* Global Configuration Tab */
+$lang['PasswordTest'] = 'Ergebnis Berechnung';
+/* Ghost Tracker Tab */
+$lang['Tab_GhostTracker'] = 'Geist Tracker';
+$lang['LastVisit_Date'] = 'Letzter Besuch';
+$lang['Reminder'] = 'E-Mail-Erinnerung';
+$lang['Reminder_Sent_OK'] = 'JA';
+$lang['Reminder_Sent_NOK'] = 'NEIN';
+/* Errors and Warnings */
+$lang['UAM_save_config'] ='Konfiguration gespeichert.';
+$lang['reg_err_login3'] = 'Sicherheit: Das Passwort ist obligatorisch !';
+$lang['reg_err_login4_%s'] = 'Sicherheit: Ein Steuer-System berechnet eine Partitur von der gewählten Passwörter Komplexität. Die Komplexität des Passworts zu niedrig ist (score = %s). Bitte wählen Sie ein neues Passwort zu mehr Sicherheit, indem Sie folgende Regeln:<br>
+- Verwenden Sie Buchstaben und Zahlen<br>
+- Verwenden Sie Groß-und Kleinschreibung<br>
+- Erhöhung ihrer Länge (Anzahl Zeichen)<br>
+Die minimale Passwörter der Gäste ist: ';
+$lang['No_reminder_for_Guest'] = 'Der &quot;Gast&quot;-Konto ist nicht zu empfangen Mahnungen Geist Tracker';
+$lang['No_reminder_for_default_user'] = 'Der Standard-Account ist nicht zu empfangen Mahnungen Geist Tracker';
+$lang['No_reminder_for_Webmaster'] = 'Der &quot;Webmaster&quot;-Konto ist nicht zu empfangen Mahnungen Geist Tracker';
+$lang['No_reminder_for_your_account'] = 'Sie personnal Admin-Konto ist nicht zu empfangen Mahnungen Geist Tracker';
+/* Action button names */
+$lang['audit'] = 'Audit-Einstellungen';
+$lang['submit'] = 'Einstellungen speichern';
+// --------- End: New or revised $lang ---- from version 2.12.0 and 2.12.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.2
+/* Errors and Warnings */
+$lang['GhostTracker_Init_OK'] = 'Geist Tracker neu gehstellt !';
+/* Action button names */
+$lang['GT_Reset'] = 'Geist Tracker neu stellen';
+// --------- End: New or revised $lang ---- from version 2.12.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.8
+/* Errors and Warnings */
+$lang['mail_exclusionlist_error'] = 'Warnung! Sie haben eine neue Zeile eingetragen (CR-LF) an den Anfang der E-Mail-Ausschluss-Liste (in rot siehe unten). Obwohl diese neue Linie nicht sichtbar ist, ist es noch vorhanden und kann zu Funktionsstörungen des Plugins verursachen. Bitte, re-Typ in Ihrem Ausschluss-Liste in einer Weise, die nicht durch einen Zeilenumbruch beginnen wird.';
+// --------- End: New or revised $lang ---- from version 2.12.8
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.0
+/* UserList Tab */
+$lang['UserList_Title'] = 'Monitoring registrierte Benutzer';
+$lang['Nb_Days'] = 'Anzahl der Tage seit<br>dem letzten Besuch';
+// --------- End: New or revised $lang ---- from version 2.13.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.4
+$lang['uam_no_unlink'] = '\'unlink\' Funktion ist nicht verfügbar';
+$lang['uam_unlink_errors'] = 'Fehler aufgetreten beim Löschen von Dateien';
+/* Global Configuration Tab */
+$lang['Title_Tab'] = 'UserAdvManager - Version : ';
+$lang['SubTitle1'] = 'Plugin-Konfiguration';
+$lang['Tab_Global'] = 'Konfiguration';
+$lang['UAM_Title1'] = 'Einstellen Einschränkungen für Registrierungen';
+$lang['UAM_Title2'] = 'Einstellen Bestätigungen und Validierungen der Registrierung';
+$lang['UAM_Title3'] = 'Einstellen der Registrierung durchgeführt und andere Optionen';
+$lang['UAM_Title4'] = 'Tipps und Beispiele für die Benutzung';
+$lang['UAM_No_Casse'] = 'Benutzernamen: Groß-und Kleinschreibung';
+$lang['UAM_No_Casse_true'] = ' Aktivieren';
+$lang['UAM_No_Casse_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_Username_Char'] = ' Benutzernamen: Ausschluss von Zeichen';
+$lang['UAM_Username_Char_true'] = ' Zeichen Verboten:<br>(Verwenden Sie ein Komma, um ein Zeichen getrennt)<br><br>';
+$lang['UAM_Username_Char_false'] = ' Erlauben Sie alle (Standard)';
+$lang['UAM_Password_Enforced'] = 'Stärkung des Sicherheitsniveaus von Kennwörtern';
+$lang['UAM_Password_Enforced_true'] = ' Aktivieren. Minimale Punktzahl: ';
+$lang['UAM_Password_Enforced_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_AdminPassword_Enforced'] = 'Die Anwendung für Administratoren';
+$lang['UAM_AdminPassword_Enforced_true'] = ' Aktivieren';
+$lang['UAM_AdminPassword_Enforced_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_PasswordTest'] = 'Passwort testen : ';
+$lang['UAM_ScoreTest'] = 'Ergebnis : ';
+$lang['UAM_MailExclusion'] = 'E-Mail-Domänen Ausgrenzung';
+$lang['UAM_MailExclusion_true'] = ' Schließen Sie die folgenden E-Mail-Domänen:<br>(Verwenden Sie ein Komma zu trennen jede Domain)';
+$lang['UAM_MailExclusion_false'] = ' Deaktivieren (Standard)';
+
+$lang['UAM_Mail_Info'] = 'Informationen E-Mail an Benutzer:';
+$lang['UAM_Mail_Info_true'] = ' Aktivieren';
+$lang['UAM_Mail_Info_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_MailInfo_Text'] = ' Anpassen der Informationen per E-Mail:';
+$lang['UAM_Confirm_Mail'] = 'Bestätigung der Anmeldung:';
+$lang['UAM_Confirm_Mail_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_ConfirmMail_Text'] = ' Anpassen der E-Mail-Bestätigung';
+$lang['UAM_Confirm_grpstat_notice'] = 'Achtung: Es ist ratsam, entweder die Gruppe oder die Validierung Satzung und nicht beide gleichzeitig.';
+$lang['UAM_Confirm_Group'] = 'Validation Gruppen<br>(verlassen ------- zum nicht zu beeinträchtigen Gruppe)';
+$lang['UAM_Confirm_Status'] = 'Validation Satzung<br>(verlassen ------- ein Versäumnis des Piwigo zu halten)';
+$lang['UAM_No_Confirm_Group'] = 'Gruppe für Benutzer, die nicht validiert ihrer Eintragung<br>';
+$lang['UAM_Validated_Group'] = 'Gruppe für Benutzer, die ihre Anmeldung bestätigt<br>';
+$lang['UAM_No_Confirm_Status'] = 'Status für Benutzer, die nicht validiert ihrer Eintragung<br>';
+$lang['UAM_Validated_Status'] = 'Status für Benutzer, die ihre Anmeldung bestätigt<br>';
+$lang['UAM_ValidationLimit_Info'] = 'Anmeldeschluss Validierung beschränkt';
+$lang['UAM_ConfirmMail_TimeOut_true'] = ' Aktivieren. Anzahl der Tage bis zum Ablauf: ';
+$lang['UAM_ConfirmMail_TimeOut_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_ConfirmMail_Remail'] = 'Erinnern Unvalidierte User';
+$lang['UAM_ConfirmMail_Remail_true'] = ' Aktivieren';
+$lang['UAM_ConfirmMail_Remail_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_ConfirmMail_ReMail_Txt1'] = 'Anpassen der Erinnerungs-Nachricht <b><u>mit</u></b> neue Regeneration der Schlüssel Validierung.';
+$lang['UAM_ConfirmMail_ReMail_Txt2'] = 'Anpassen der Erinnerungs-Nachricht <b><u>ohne</u></b> neue Regeneration der Schlüssel Validierung.';
+
+$lang['UAM_GhostTracker'] = 'Geist Besucher-Management (Geist Tracker)';
+$lang['UAM_GhostTracker_true'] = ' Aktivieren. Maximale Zeit in Tagen zwischen zwei Besuche: ';
+$lang['UAM_GhostTracker_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_GhostTracker_ReminderText'] = 'Anpassen der Geist Tracker Erinnerungs-Nachricht';
+$lang['UAM_LastVisit'] = ' Tracking registrierte Benutzer';
+$lang['UAM_LastVisit_true'] = ' Aktivieren';
+$lang['UAM_LastVisit_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_No_Comment_Anonymous'] = 'Nickname obligatorisch für Gäste Kommentare';
+$lang['UAM_No_Comment_Anonymous_true'] = ' Aktivieren';
+$lang['UAM_No_Comment_Anonymous_false'] = ' Deaktivieren (Standard)';
+
+$lang['Tab_UserManager'] = 'Tracking Validierungen';
+
+/* UserManager Tab */
+$lang['SubTitle3'] = 'Tracking Validierungen';
+$lang['UserManager_Title'] = 'Tracking Validierungen';
+/* Ghost Tracker Tab */
+$lang['SubTitle4'] = 'Geist Tracker';
+$lang['GT_Init'] = 'Initializing Ghost Tracker';
+$lang['GhostTracker_Title'] = 'Geist Besucher-Management';
+$lang['UAM_GhostTracker_Init'] = 'Wenn Sie diese Funktion zum ersten Mal oder haben Sie nach einem langen Zeitraum aus, in dem neue Besucher registriert sind, müssen Sie initialisieren, oder setzen Sie den Geist Tracker reaktiviert. Dieser Vorgang ist nur nach Aktivierung oder Reaktivierung von der Möglichkeit gemacht. Bitte klicken Sie <u>einmal</u> die Reset-Taste unten.';
+/* UserList Tab */
+$lang['SubTitle5'] = 'Tracking-Besucher';
+$lang['Tab_UserList'] = 'Tracking-Besucher';
+/* Mailing */
+$lang['Add of %s'] = 'Profil erstellt für %s';
+$lang['Update of %s'] = 'Profil aktualisieren %s';
+/* Email confirmation page */
+$lang['confirm_mail_bad'] = '<br><br><br>Ihre Aktivierungs-Schlüssel ist falsch oder abgelaufen oder Sie haben bereits validiert Ihrem Konto haben, wenden Sie sich bitte an den Webmaster, um dieses Problem zu beheben.<br><br><br><br>';
+/* Mailing */
+$lang['Ghost_reminder_of_%s'] = '%s, Dies ist eine Erinnerung per E-Mail';
+$lang['Reminder_with_key_of_%s'] = '%s, Ihre Validierungs-Zahl wurde erneuert';
+$lang['Reminder_without_key_of_%s'] = '%s, Ihre Validierung Schlüssel abläuft';
+/* Errors and Warnings */
+$lang['Err_GhostTracker_Settings'] = 'Diese Seite ist nur verfügbar, wenn &quot;Geist Tracker&quot; aktiv &quot;Einstellen der Registrierung durchgeführt und andere Optionen&quot;.';
+$lang['Err_Userlist_Settings'] = 'Diese Seite ist nur verfügbar, wenn &quot;Monitoring registrierte Benutzer&quot; ist aktiv in der &quot;Einstellung der Registrierung durchgeführt und andere Optionen&quot;';
+// --------- End: New or revised $lang ---- from version 2.13.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_AdminConfMail'] = 'Bestätigung der Anmeldung für Administratoren';
+$lang['UAM_Admin_ConfMail_true'] = ' Aktivieren';
+$lang['UAM_Admin_ConfMail_false'] = '  Deaktivieren (Standard)';
+$lang['UAM_Tips1'] = 'Anmeldungen mit E-Mail Validierung und Warnmeldung auf der Piwigo\'s Homepage';
+$lang['UAM_Tips1_txt'] = '
+          <ul>
+            <li>
+            Tore:<br>
+            - Bei seiner Ankunft in der Galerie: Unterrichtung der Besucher, dass er sich registrieren um Zugang private Fotos<br>
+            - Bei der Registrierung: Erzeugen Sie eine E-Mail Validierung mit direkter Verbindung, sie dem neuen Anwender seiner Nicht-Validierung und Integration von ihm mit der Gruppe "Warten"<br>
+            - Bei der Validierung: Switch automatisch zur Gruppe "Warten" der Gruppe "Validiert", die den Zugang zu privaten Gruppen bietet<br><br>
+            <b>Warnung: Im Standard-Betrieb, der "Gast" sieht nur den öffentlichen Kategorien, ohne Angaben Nachricht.</b>
+            </li><br><br>
+            <li>
+Voraussetzung:<br>
+- Eine Galerie mit allen oder einigen privaten Kategorien, sichtbar nur durch registrierte Benutzer<br>
+- Mindestens 2 der folgenden Piwigo Nutzergruppen: "Warten", ohne die Erlaubnis der privaten Gruppen und "Validiert" mit allen Berechtigungen für den privaten Kategorien<br>
+- UAM plugin<br>
+- PWG Stuffs plugin, für das Hinzufügen eines Moduls Art "Personal Block"<br>
+- Optional können Sie das Plugin Extended Description Multi-Sprachen<br>
+            </li><br><br>
+            <li>
+Etappen:<br><br>
+A. In plugin UAM:
+              <ol>
+                <li>Aktivieren Sie Anmeldebestätigung</li>
+                <li>Geben Sie den Text für weitere Erklärung, die angebracht werden, um Anmeldebestätigung mail sendet. Wenn das Plugin Extended Description aktiviert ist, können die Sprach-Tags verwendet werden</li>
+                <li>Wählen Sie das "Warten"-Gruppe unter "Für Anwender, die noch nicht validiert ihrer Eintragung"</li>
+                <li>Wählen Sie das "Validiert"-Gruppe unter "Für Anwender, die ihre Anmeldung bestätigt haben"</li>
+                <li>Speichern Sie das Plugin-Konfiguration</li>
+              </ol>
+<br>
+B. In plugin PWG Stuffs :
+              <ol>
+                <li>Fügen Sie ein neues Modul Typ "Personal-Block: Zeigt einen Block Personal (z. B. eine redaktionelle)"</li>
+                <li>Konfigurieren Sie das Modul unter Angabe der Titel (zB "Anmeldung bis Validierung") und seine Beschreibung, und aktivieren Sie nur "Warten" in der Liste der Gruppen erlaubt</li>
+                <li>Kompletten Inhalt des Moduls mit der Meldung Informationen, die den Benutzern angezeigt werden nicht validiert. Als UAM kann Markup-Sprachen verwendet werden, wenn das Plugin Extended Description aktiviert ist</li>
+                <li>Check "Display das Modul auf der Homepage der Website"</li>
+                <li>Überprüfen Sie die Konfiguration des Moduls</li>
+              </ol>
+            </li>
+          </ul>';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom_Txt1'] = 'Text der Bestätigungs-Seite - Bestätigung akzeptiert';
+$lang['UAM_confirmmail_custom_Txt2'] = 'Text der Bestätigungs-Seite - Bestätigung abgelehnt';
+$lang['LastVisit_Date'] = 'Letzter Besuch';
+$lang['Nb_Days'] = 'Differenz in Tagen';
+$lang['Err_UserManager_Settings'] = 'Diese Seite ist nur verfügbar, wenn "Bestätigung der Anmeldung" aktiv ist und wenn eine Gruppe von nicht validierte Besuchern wird in "Einstellen Bestätigungen und Validierungen der Registrierung" konfiguriert.';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.1
+$lang['reg_err_mail_address_dbl'] = 'Diese E-Mail-Adresse wird bereits verwendet.';
+$lang['UAM_Support_txt'] = 'Die offizielle Unterstützung für dieses Plugin ist nur auf diesem Diskussionsforum von Piwigo:<br>
+<a href="http://fr.piwigo.org/forum/viewtopic.php?id=12775" onclick="window.open(this.href);return false;">Französisch-Forum - http://fr.piwigo.org/forum/viewtopic.php?id=12775</a>
+<br>oder<br>
+<a href="http://piwigo.org/forum/viewtopic.php?id=15015" onclick="window.open(this.href);return false;">Englisch-Forum - http://piwigo.org/forum/viewtopic.php?id=15015</a><br><br>
+Ebenfalls erhältlich, das Projekt Bugtracker: <a href="http://piwigo.org/bugs/" onclick="window.open(this.href);return false;">http://piwigo.org/bugs/</a>';
+// --------- End: New or revised $lang ---- from version 2.15.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['Force_Validation'] = 'Handbuch Validierung';
+$lang['UAM_Confirm_Mail_true'] = ' Aktivieren - Validation von Benutzer';
+$lang['UAM_Confirm_Mail_local'] = ' Aktivieren - Validation von admin (keine Validierung Key gesendet)';
+$lang['UAM_RedirToProfile'] = 'Umleitung auf "Benutzerdaten" Seite';
+$lang['UAM_RedirToProfile_false'] = ' Deaktivieren (Standard)';
+$lang['UAM_RedirToProfile_true'] = ' Aktivieren';
+// --------- End: New or revised $lang ---- from version 2.15.4
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/description.txt
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/description.txt	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/description.txt	(revision 7001)
@@ -0,0 +1,1 @@
+Strengthens the possibilities of user management
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/help/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/help/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/help/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/help/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/help/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/help/plugin.lang.php	(revision 7001)
@@ -0,0 +1,190 @@
+<?php
+global $lang;
+
+$lang['UAM_restricTitle'] = 'Restrictions for registrations';
+$lang['UAM_confirmTitle'] = 'Confirmations and validations of registration';
+$lang['UAM_confirmTitle_d'] = '
+- Information email generation<br>
+- Register validation email generation<br>
+- Groups or status auto joining<br>
+- Deadline for registration validation<br>
+- Reminder email generation<br>
+...
+';
+$lang['UAM_miscTitle'] = 'Registration followed and other options';
+$lang['UAM_miscTitle_d'] = '
+- Ghost users management<br>
+- Followed registered users<br>
+- Nickname mandatory for guests comments<br>
+...
+';
+$lang['UAM_casenTitle'] = 'Usernames: Case sensitivity';
+$lang['UAM_carexcTitle'] = 'Usernames: Exclusion of characters';
+$lang['UAM_carexcTitle_d'] = 'It may be interesting to prohibit certain characters in usernames (example: refuse logins containing &quot;@&quot;). This option allows to exclude characters or sequence of characters, events.<br>
+NB: The option can also exclude whole words.
+<br><br>
+<b style=&quot;color: red;&quot;>Warning: This option has no effect on the user names created prior to its activation.</b>';
+$lang['UAM_passwTitle'] = 'Strengthening the security level of passwords';
+$lang['UAM_passwTitle_d'] = 'Enabling this option makes mandatory the seizure of a password upon registration, and requires the password chosen by the visitor to meet a minimum level of complexity. If the threshold is not reached, the score achieved and the minimum score to be achieved are displayed, along with recommendations to increase the value of this score.<br><br>
+There is field test to measure the complexity of a password, and can afford to get an idea of the score to define complex custom.<br><br>
+Note: The score of a password is calculated based on several parameters: length, type of characters used (letters, digits, uppercase, lowercase, special characters). A score below 100 is considered low, from 100 to 500, the complexity is average; beyond 500, the security is excellent.';
+$lang['UAM_passwtestTitle'] = 'Testing the complexity of a password';
+$lang['UAM_passwtestTitle_d'] = 'Enter the password to test and then click on &quot;Score calculation&quot; to see the result.';
+$lang['UAM_passwadmTitle'] = 'Applying to administrators';
+$lang['UAM_passwadmTitle_d'] = 'An administrator can create a user account with or without application of the rule of computing complexity.<br><br>
+Note: If the user account created wants to change password and strengthening passwords for users is active, it will be subject to the rule set.';
+$lang['UAM_mailexcTitle'] = 'Exclusion of mail domains';
+$lang['UAM_infomailTitle'] = 'Information email to user';
+$lang['UAM_infomailTitle_d'] = 'This option allows to automate sending an information email to a user when registering or when changes his password or email address in their profile.<br><br>
+The content of the message sent is composed of a customizable part to introduce a little welcome note and a fixed part indicating the login, password and email address of the user.';
+$lang['UAM_infotxtTitle'] = 'Customizing the information email';
+$lang['UAM_infotxtTitle_d'] = 'Enter the introductory text that you want to appear in the information email.<br><br>
+To use multiple languages, you can use the Extended description plugin\'s tags if it is active.<br><br>
+<b style=&quot;color: red;&quot;>Text modifying is available only if the &quot;Information email&quot; is enabled.</b>';
+$lang['UAM_confirmtxtTitle'] = 'Customizing the confirmation email';
+$lang['UAM_confirmtxtTitle_d'] = 'Enter the introductory text that you want to appear in the email confirmation of registration.<br><br>
+To use multiple languages, you can use the Extended description plugin\'s tags if it is active.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if the &quot;Confirmation of registration&quot; is enabled.</b>';
+$lang['UAM_confirmgrpTitle'] = 'Validation Groups';
+$lang['UAM_confirmgrpTitle_d'] = '<b style=&quot;color: red;&quot;>WARNING : Using validation groups requires that you have created at least one users group and is defined &quot;by default&quot; in Piwigo\'s user groups management.</b><br><br>
+The groups are validated for use in conjunction with the &quot;Confirmation of registration&quot;';
+$lang['UAM_confirmstatTitle'] = 'Validation Statutes';
+$lang['UAM_confirmstatTitle_d'] = '<b style=&quot;color: red;&quot;>WARNING : The use of status validation requires that you have kept the &quot;Guest&quot; user with default setting (as user template) for new registered. Note you can set any other user as a template for new registered. Please refer to the Piwigo\'s documentation for more details.</b><br><br>
+The Statutes are validated for use in conjunction with the &quot;Confirmation of registration&quot;';
+$lang['UAM_validationlimitTitle'] = 'Deadline for registration validation limited';
+$lang['UAM_validationlimitTitle_d'] = 'This option allows to limit the validity of key validation email sent to new registrants. Visitors who register will have x days of time to validate their registration. After this period the validation link will expire.<br><br>
+This option is used in conjunction with the &quot;Confirmation of registration&quot;';
+$lang['UAM_remailTitle'] = 'Remind unvalidated users';
+$lang['UAM_remailTitle_d'] = 'This option allows you to send a reminder email to users registered but have not validated their registration on time. It therefore works in conjunction with the &quot;Confirmation of registration&quot;<br><br>
+2 types of emails can be sent: With or without regeneration of the validation key. As appropriate, the content of emails can be customized.<br><br>
+Refer to the &quot;Tracking validations&quot; tab.';
+$lang['UAM_remailtxt1Title'] = 'Reminder email with new key generated';
+$lang['UAM_remailtxt1Title_d'] = 'Enter the introductory text that you want to appear in the reminder email, in addition to the validation key regenerated.<br><br>
+If left blank, the mail reminder will include only the validation link. It is therefore strongly advised to take a little explanatory text. (NB: The text pre-filled with the installation of the plugin is provided as an example)<br><br>
+To use multiple languages, you can use the Extended description plugin\'s tags if it is active.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if &quot;Remind unvalidated users&quot; is enabled.</b>';
+$lang['UAM_remailtxt2Title'] = 'Reminder email without new key generated';
+$lang['UAM_remailtxt2Title_d'] = 'Enter the introductory text that you want to appear in the reminder email without a validation key regenerated.<br><br>
+If left blank, the mail reminder will be empty. It is therefore strongly advised to take a little explanatory text. (NB: The text pre-filled with the installation of the plugin is provided as an example)<br><br>
+To use multiple languages, you can use the Extended description plugin\'s tags if it is active.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if &quot;Remind unvalidated users&quot; is enabled.</b>';
+$lang['UAM_ghosttrackerTitle'] = 'Ghost visitors management';
+$lang['UAM_ghosttrackerTitle_d'] = 'Also called &quot;Ghost Tracker&quot;, when this function is activated, you can manage your visitors depending on the frequency of their visits. When the time between 2 visits is reaches, the visitor in question appears in the &quot;Ghost Tracker&quot; table where you will be able to remind visitors via email.<br><br>
+<b style=&quot;color: red;&quot;>If you enable this feature for the first time or you have reactivated after a long period off during which new visitors are registered, you must initialize or reset the Ghost Tracker.</b>';
+$lang['UAM_gttextTitle'] = 'Ghost Tracker\'s reminder message';
+$lang['UAM_gttextTitle_d'] = 'Enter the text you want to appear in the email reminder to prompt the user to return to visit your gallery (NB: The text pre-filled with the installation of the plugin is provided as an example).<br><br>
+To use multiple languages, you can use the Extended description plugin\'s tags if it is active.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if &quot;Ghost visitors management&quot; is enabled.</b>';
+$lang['UAM_lastvisitTitle'] = 'Tracking registered users';
+$lang['UAM_lastvisitTitle_d'] = 'This activates a table in the &quot;Tracking users&quot; tab which are registered users listed on the gallery and the date of their last visit and time spent (in days) since their last visit. Monitoring is purely informative for the administrator of the gallery.';
+$lang['UAM_commentTitle'] = 'Nickname mandatory for guests comments';
+$lang['UAM_commentTitle_d'] = 'If &quot;Comments for All&quot; is active (authority to unregistered visitors to post comments), this option allows to force the non-registered visitor to enter a nickname that the comment is accepted.';
+$lang['UAM_tipsTitle'] = 'Tips and Examples';
+$lang['UAM_tipsTitle_d'] = 'Tips and various examples of use';
+$lang['UAM_userlistTitle'] = 'Tracking users';
+$lang['UAM_usermanTitle'] = 'Tracking validations';
+$lang['UAM_gtTitle'] = 'Ghost visitors management';
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_adminconfmailTitle'] = 'Confirmation of registration for admins';
+$lang['UAM_adminconfmailTitle_d'] = 'You can disable this validation only for user accounts created by the administrator via Piwigo\'s users management interface.<br><br>
+By activating this option, email validation for registration will be sent to each user created by admin.<br><br>
+By disabling this option (default), only the email information is sent (if &quot;Information email to user&quot; is enabled).';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom1'] = 'Text of the confirmation page - Confirmation accepted';
+$lang['UAM_confirmmail_custom1_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>acceptance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+$lang['UAM_confirmmail_custom2'] = 'Text of the confirmation page - Confirmation rejected';
+$lang['UAM_confirmmail_custom2_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>rejectance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.2
+$lang['UAM_casenTitle_d'] = 'By default, Piwigo is case sensitive: Uppercase and lowercase letters are considered different letters in the names chosen by users at registration. Thus, &quot;Foo&quot;, &quot;foo&quot; and &quot;FOO&quot; may be 3 different users.<br><br>
+Enabling this option allows to consider all options in case of &quot;foo&quot; as one user. If &quot;foo&quot; already exists, creating a new user &quot;Foo&quot; will be refused.<br><br>
+<b style=&quot;color: red;&quot;>Warning: This option has no effect on the user names created prior to its activation.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.2
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['UAM_restricTitle_d'] = '
+- Characters exclusion<br>
+- Password enforcement<br>
+- Email domains exclusion<br>
+...
+';
+$lang['UAM_userlistTitle_d'] = 'This page is for information to the administrator. It displays a list of all users registered on the gallery showing the date and number of days since their last visit. The list is sorted in ascending order of number of days.
+<br><br>
+<b><u>Only when the Ghost Tracker is active</u></b>, the number of days without a visit appears as the following color code, according to the maximum set in the Ghost Tracker options:
+<br>
+- <b style=&quot;color: lime;&quot;>Green</b> : When the user has visited the gallery <b style=&quot;color: lime;&quot;><u>less than 50%</u></b> of the maximum indicated in the Ghost Tracker.<br>
+- <b style=&quot;color: orange;&quot;>Orange</b> : When the user has visited the gallery <b style=&quot;color: orange;&quot;><u> between 50% and 99% </u></b> of the maximum indicated in the Ghost Tracker.<br>
+- <b style=&quot;color: red;&quot;>Red</b> : When the user has visited the gallery <b style=&quot;color: red;&quot;><u>for more than 100%</u></b> of the maximum indicated in the Ghost Tracker. <b><u>In this case, the user must also appear in the Ghost Tracker table.</u></b><br>
+<br>
+Example :
+<br>
+The maximum period of Ghost Tracker is configured to 100 days.
+<br>
+A user will appear in green if he visited the gallery for less than 50 days, in orange if his last visit took place between 50 and 99 days and red for 100 days and above.
+<br><br>
+<b>NOTE</b>: The list does not display who have not validated their registration (if the option of validating the registration is activated). These users are then managed in a special way in the &quot;Tracking validations&quot; tab.
+<br><br>
+<b>Table Sorting Function</b>: You can sort the data displayed by clicking on the column headers. Hold the SHIFT key to sort up to 4 simultaneous columns.';
+$lang['UAM_usermanTitle_d'] = 'When limiting the deadline for registration is enabled, you will find below the list of users whose validation registration is expected, <b style=&quot;text-decoration: underline;&quot;>whether or not</b> they are in time to validate.<br><br>
+The registration date is displayed in green when the user concerned is below the time limit to validate his registration. In this case, the validation key is still valid and we can send an email with or without a new validation key.<br><br>
+When the registration date appears in red, the validation period has expired. In this case, you must send an email with regeneration of validation key if you want to enable the user to validate their registration.<br><br>
+In all cases, it is possible to manually force the validation.<br><br>
+In this view, you can:
+<br><br>
+- Manually delete accounts <b>(manual drain)</b>
+<br>
+- Generate email reminder <b>without</b> generating a new key. Warning: Send an email reminder to targeted visitors. This function does not reset the date of registration of targeted visitors and the timeout is still valid.
+<br>
+- Generate email reminder <b>with</b> generating a new key. Warning : Send an email reminder to targeted visitors. This function also resets the date of registration of targeted visitors which equates to extend the deadline for validation.
+<br>
+- Submit a registration awaiting validation manually even if the expiry date has passed <b>(forcing validation)</b>.
+<br><br>
+<b>Table Sorting Function</b>: You can sort the data displayed by clicking on the column headers. Hold the SHIFT key to sort up to 4 simultaneous columns.';
+$lang['UAM_gtTitle_d'] = 'When Ghost Tracker is enabled and initialized, you will find below the list of registered visitors who have not returned since x days. &quot;x&quot; is the number of days configured in the General Setup tab. In addition, you will find a column indicating whether an email reminder has been sent to targeted visitors. So, you can see at a glance and treat visitors who have not taken account of the reminder.<br><br>In this view, you can:
+<br><br>
+- Manually delete accounts <b>(manual drain)</b>
+<br>
+- Generate email reminder <b>with resetting the last visit date</b>. This allows to give a wildcard to targeted visitors. If the visitor has already received a reminder, nothing prevents to resent a new mail which will reset again, in fact, the last visit date.
+<br><br>
+<b>Table Sorting Function</b>: You can sort the data displayed by clicking on the column headers. Hold the SHIFT key to sort up to 4 simultaneous columns.';
+$lang['UAM_confirmmailTitle'] = 'Confirmation of registration';
+$lang['UAM_confirmmailTitle_d'] = 'This option allows a user to either confirm registration by clicking on a link received in an email sent upon registration or the administrator to manually activate the registration.<br><br>
+In first case, the e-mail is composed of a customizable part to introduce a little welcome note and a fixed part containing the activation link that is generated from a random key that can possibly regenerate through the &quot;Tracking validations&quot; tab.<br><br>
+Dans le premier cas, le message envoyé comprend une partie fixe, avec le lien d\'activation généré à partir d\'une clef aléatoire (cette clé peut éventuellement être régénérée via l\'onglet &quot;Suivi des validations&quot;), et une partie personnalisable par un texte d\'accueil.
+<br><br>
+In second case, <b><u>there is no validation key send by email!</u></b>. Visitors have to wait until an administrator validate them himself in &quot;Validation tracking&quot; tab. It\s recommanded to activate the Piwigo\'s option &quot;Email admins when a new user registers&quot; (see in Piwigo\'s configuration options) and to use the &quot;Information email to user&quot; to warn new registers to wait on their account activation.
+<br>
+<b style=&quot;color: red;&quot;>NB: Options &quot;Deadline for registration validation limited&quot; and &quot;Remind unvalidated users  &quot; have to be set to off when admin\'s manual validation is enabled.</b>
+<br><br>
+This option is generally used with the automatic assignment of group and/or statutes. For example, a user who has not validated their registration will be set in a specific group of users (with or without restrictions on the gallery) while a user who validated his registration shall be set in a &quot;normal&quot; group.';
+$lang['UAM_RedirTitle'] = 'Redirect to &quot;Customization&quot; page';
+// --------- End: New or revised $lang ---- from version 2.15.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.6
+$lang['UAM_RedirTitle_d'] = 'This option automatically redirect a registered user to his customization page only at his first connection to the gallery.<br><br>
+Please note: This feature does not apply to all registered users. Those with &quot;admin&quot;, &quot;webmaster&quot; or &quot;generic&quot; status are excluded.';
+// --------- End: New or revised $lang ---- from version 2.15.6
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.7
+$lang['UAM_mailexcTitle_d'] = 'By default, Piwigo accepts all email addresses in the format xxx@yyy.zz. Enabling this option allows you to exclude certain domains in the format: @ [domain_name].[domain_extension].<br><br>
+Examples :<br>
+@hotmail.com -> excluding addresses *@hotmail.com<br>
+@hotmail -> excluding all addresses *@hotmail*
+<br><br>
+<b style=&quot;color: red;&quot;>The seizure is only possible after registration of the option in the activated position.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.7
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/en_UK/plugin.lang.php	(revision 7001)
@@ -0,0 +1,271 @@
+<?php
+
+global $lang,$conf;
+
+$conf_UAM = unserialize($conf['UserAdvManager']);
+
+
+/* UserManager Tab */
+$lang['Registration_Date'] = 'Registration date';
+
+
+/* Mailing */
+$lang['infos_mail %s'] = '%s, please find here your information to login the gallery :';
+$lang['User: %s'] = 'User : %s';
+$lang['Password: %s'] = 'Password: %s';
+$lang['Link: %s'] = 'Please, click on this link to confirm your registration : %s';
+
+
+/* Email confirmation page */
+$lang['title_confirm_mail'] = 'Validate your registration';
+$lang['confirm_mail_page_title'] = 'Validate your registration';
+
+
+/* Errors and Warnings */
+$lang['UAM_audit_ok'] = 'Audit OK';
+$lang['Err_audit_no_casse'] = '<b>These accounts are identical to the case closely :</b> ';
+$lang['Err_audit_username_char'] = '<b>This account uses one or more forbidden characters :</b> ';
+$lang['Err_audit_email_forbidden'] = '<b>This account uses a forbidden email provider :</b> ';
+$lang['Err_audit_advise'] = '<b>you have to perform corrections to comply with new rules that you have activated.<br>Use a database management utility to correct user accounts directly in the table ###_USERS';
+$lang['UAM_Empty Author'] = 'The author field have to be filled to send a comment.';
+$lang['reg_err_login5'] = 'Username already exist, WARNING name is case insensitive (Shift = Tiny).';
+$lang['reg_err_login6'] = 'Username does not have to match the following characters: ';
+$lang['reg_err_login7'] = 'Your email provider is banned for registration. Banned email providers are: ';
+$lang['UAM_empty_pwd'] = '[empty password]';
+$lang['UAM_no_update_pwd'] = '[profile updated without password changed]';
+$lang['invalid_pwd'] = 'Invalid username or password !';
+$lang['No_validation_for_Guest'] = 'The "Guest" account is not subject to validation';
+$lang['No_validation_for_default_user'] = 'The default account is not subject to validation';
+$lang['No_validation_for_Webmaster'] = 'The "Webmaster" account is not subject to validation';
+$lang['No_validation_for_your_account'] = 'Your personnal admin account is not subject to validation';
+$lang['Database_Error'] = '<b><u>Warning! Critical integrity error in your database.</u></b><br><br>Please check the integrity of the #_user_confirm_mail table.';
+
+
+/* Processing messages */
+$lang['%d_Mail_With_Key'] = '%d message with key renewal was sent';
+$lang['%d_Mails_With_Key'] = '%d messages with key renewal were sent';
+$lang['%d_Reminder_Sent'] = '%d reminder message was sent';
+$lang['%d_Reminders_Sent'] = '%d reminder messages were sent';
+$lang['%d_Validated_User'] = '%d User validated manually';
+$lang['%d_Validated_Users'] = '%d Users validated manually';
+
+
+/* Action button names */
+$lang['Delete_selected'] = 'Delete';
+$lang['Mail_without_key'] = 'Reminder without key';
+$lang['Mail_with_key'] = 'Reminder with key';
+
+
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.0 and 2.12.1
+/* Global Configuration Tab */
+$lang['PasswordTest'] = 'Score calculation';
+/* Ghost Tracker Tab */
+$lang['Tab_GhostTracker'] = 'Ghost Tracker';
+$lang['Reminder'] = 'Email reminder';
+$lang['Reminder_Sent_OK'] = 'YES';
+$lang['Reminder_Sent_NOK'] = 'NO';
+/* Errors and Warnings */
+$lang['UAM_save_config'] ='Configuration saved.';
+$lang['reg_err_login3'] = 'Security : Password is mandatory !';
+$lang['reg_err_login4_%s'] = 'Security : A control system calculates a score on the chosen passwords complexity. The complexity of your password is too low (score = %s). Please, choose a new password more secure by following these rules:<br>
+- Use letters and numbers<br>
+- Use lowercase and uppercase<br>
+- Increase its length (number of characters)<br>
+The minimum passwords score required by the administrator is: ';
+$lang['No_reminder_for_Guest'] = 'The "Guest" account is not subject to receive reminders from GhostTracker';
+$lang['No_reminder_for_default_user'] = 'The default account is not subject to receive reminders from GhostTracker';
+$lang['No_reminder_for_Webmaster'] = 'The "Webmaster" account is not subject to receive reminders from GhostTracker';
+$lang['No_reminder_for_your_account'] = 'You personnal admin account is not subject to receive reminders from GhostTracker';
+/* Action button names */
+$lang['audit'] = 'Audit settings';
+$lang['submit'] = 'Save settings';
+// --------- End: New or revised $lang ---- from version 2.12.0 and 2.12.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.2
+/* Errors and Warnings */
+$lang['GhostTracker_Init_OK'] = 'Ghost Tracker reset done !';
+/* Action button names */
+$lang['GT_Reset'] = 'Reset Ghost Tracker';
+// --------- End: New or revised $lang ---- from version 2.12.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.8
+/* Errors and Warnings */
+$lang['mail_exclusionlist_error'] = 'Warning! You have entered a new line (CR-LF) at the begining of email exclusion list (shown in red below). Although this new line is not visible, it is still present and may cause malfunction of the plugin. Please re-type in your exclusion list in a manner that does not begin with a newline.';
+// --------- End: New or revised $lang ---- from version 2.12.8
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.0
+/* UserList Tab */
+$lang['UserList_Title'] = 'Monitoring registered users';
+// --------- End: New or revised $lang ---- from version 2.13.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.4
+$lang['uam_no_unlink'] = '\'unlink\' function is not available';
+$lang['uam_unlink_errors'] = 'Errors occurred when deleting files';
+/* Global Configuration Tab */
+$lang['Title_Tab'] = 'UserAdvManager - Version : ';
+$lang['SubTitle1'] = 'Plugin configuration';
+$lang['Tab_Global'] = 'Configuration';
+$lang['UAM_Title1'] = 'Setting restrictions for registrations';
+$lang['UAM_Title2'] = 'Setting confirmations and validations of registration';
+$lang['UAM_Title3'] = 'Setting the followed registrations and other options';
+$lang['UAM_Title4'] = 'Tips and examples of use';
+$lang['UAM_No_Casse'] = 'Usernames: Case sensitivity';
+$lang['UAM_No_Casse_true'] = ' Enable';
+$lang['UAM_No_Casse_false'] = ' Disable (default)';
+$lang['UAM_Username_Char'] = 'Usernames: Exclusion of characters';
+$lang['UAM_Username_Char_true'] = ' Banning characters:<br>(Use a comma to separate each character)<br><br>';
+$lang['UAM_Username_Char_false'] = ' Permit all (default)';
+$lang['UAM_Password_Enforced'] = 'Strengthening the security level of passwords';
+$lang['UAM_Password_Enforced_true'] = ' Enable. Minimum Score: ';
+$lang['UAM_Password_Enforced_false'] = ' Disable (default)';
+$lang['UAM_AdminPassword_Enforced'] = 'Applying to administrators';
+$lang['UAM_AdminPassword_Enforced_true'] = ' Enable';
+$lang['UAM_AdminPassword_Enforced_false'] = ' Disable (default)';
+$lang['UAM_PasswordTest'] = 'Password test: ';
+$lang['UAM_ScoreTest'] = 'Result: ';
+$lang['UAM_MailExclusion'] = 'Email domains exclusion';
+$lang['UAM_MailExclusion_true'] = ' Exclude the following domains:<br>(Use a comma to separate each domain)';
+$lang['UAM_MailExclusion_false'] = ' Disable (default)';
+
+$lang['UAM_Mail_Info'] = 'Information email to user:';
+$lang['UAM_Mail_Info_true'] = ' Enable';
+$lang['UAM_Mail_Info_false'] = ' Disable (default)';
+$lang['UAM_MailInfo_Text'] = ' Customizing the information email:';
+$lang['UAM_Confirm_Mail'] = 'Confirmation of registration:';
+$lang['UAM_Confirm_Mail_false'] = ' Disable (default)';
+$lang['UAM_ConfirmMail_Text'] = ' Customizing the confirmation email:';
+$lang['UAM_Confirm_grpstat_notice'] = 'Caution: It is advisable to use either the group or the validation statutes and not both simultaneously.';
+$lang['UAM_Confirm_Group'] = 'Validation Groups<br>(leave ------- to not affect group)';
+$lang['UAM_Confirm_Status'] = 'Validation Statutes<br>(leave ------- to keep the Piwigo\'s default)';
+$lang['UAM_No_Confirm_Group'] = 'Group for users who have not validated their registration<br>';
+$lang['UAM_Validated_Group'] = 'Group for users who have validated their registration<br>';
+$lang['UAM_No_Confirm_Status'] = 'Status for users who have not validated their registration<br>';
+$lang['UAM_Validated_Status'] = 'Status for users who have validated their registration<br>';
+$lang['UAM_ValidationLimit_Info'] = 'Deadline for registration validation limited';
+$lang['UAM_ConfirmMail_TimeOut_true'] = ' Enable. Number of days until expiration: ';
+$lang['UAM_ConfirmMail_TimeOut_false'] = ' Disable (default)';
+$lang['UAM_ConfirmMail_Remail'] = 'Remind unvalidated users';
+$lang['UAM_ConfirmMail_Remail_true'] = ' Enable';
+$lang['UAM_ConfirmMail_Remail_false'] = ' Disable (default)';
+$lang['UAM_ConfirmMail_ReMail_Txt1'] = 'Customizing the reminder message <b><u>with</u></b> new regeneration of key validation.';
+$lang['UAM_ConfirmMail_ReMail_Txt2'] = 'Customizing the reminder message <b><u>without</u></b> regeneration of key validation.';
+
+$lang['UAM_GhostTracker'] = 'Ghost visitors management (Ghost Tracker)';
+$lang['UAM_GhostTracker_true'] = ' Enable. Maximum period in days between two visits: ';
+$lang['UAM_GhostTracker_false'] = ' Disable (default)';
+$lang['UAM_GhostTracker_ReminderText'] = 'Customizing Ghost Tracker\'s reminder message';
+$lang['UAM_LastVisit'] = ' Tracking registered users';
+$lang['UAM_LastVisit_true'] = ' Enable';
+$lang['UAM_LastVisit_false'] = ' Disable (default)';
+$lang['UAM_No_Comment_Anonymous'] = 'Nickname mandatory for guests comments';
+$lang['UAM_No_Comment_Anonymous_true'] = ' Enable';
+$lang['UAM_No_Comment_Anonymous_false'] = ' Disable (default)';
+
+$lang['UAM_Tips1'] = 'Registrations with email validation and warning message on the Piwigo\'s homepage';
+
+$lang['Tab_UserManager'] = 'Tracking validations';
+
+/* UserManager Tab */
+$lang['SubTitle3'] = 'Tracking validations';
+$lang['UserManager_Title'] = 'Tracking validations';
+/* Ghost Tracker Tab */
+$lang['SubTitle4'] = 'Ghost Tracker';
+$lang['GT_Init'] = 'Initializing Ghost Tracker';
+$lang['GhostTracker_Title'] = 'Ghost visitors management';
+$lang['UAM_GhostTracker_Init'] = 'If you enable this feature for the first time or you have reactivated after a long period off during which new visitors are registered, you must initialize or reset the Ghost Tracker. This action is done only after activation or reactivation of the option. Please click <u>once</u> the reset button below.';
+/* UserList Tab */
+$lang['SubTitle5'] = 'Tracking users';
+$lang['Tab_UserList'] = 'Tracking users';
+/* Mailing */
+$lang['Add of %s'] = 'Profile created for %s';
+$lang['Update of %s'] = 'Profile %s updated';
+
+/* Mailing */
+$lang['Ghost_reminder_of_%s'] = '%s, this is a reminder email';
+$lang['Reminder_with_key_of_%s'] = '%s, your validation key has been renewed';
+$lang['Reminder_without_key_of_%s'] = '%s, your validation key will expire';
+/* Errors and Warnings */
+$lang['Err_GhostTracker_Settings'] = 'This page is available only if "Ghost Tracker" is active in "Setting the registrations followed and other options".';
+$lang['Err_Userlist_Settings'] = 'This page is available only if "Monitoring registered users" is active in the "Setting the registrations followed and other options".';
+// --------- End: New or revised $lang ---- from version 2.13.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_AdminConfMail'] = 'Confirmation of registration for admins';
+$lang['UAM_Admin_ConfMail_true'] = ' Enable';
+$lang['UAM_Admin_ConfMail_false'] = ' Disable (default)';
+$lang['UAM_Tips1_txt'] = '
+          <ul>
+            <li>
+            Goals:<br>
+            - On his arrival at the gallery: To inform the visitor that he has to register to access private photos<br>
+            - At registration: Generate an email validation with direct link, inform the new user of its non-validation and integrate him to the group "Waiting"<br>
+            - At validation: Switch automatically group "Waiting" to group "Validated", which provides access to private categories<br><br>
+            <b>Recall: In standard operation, the "Guest" only sees the public categories, without information message.</b>
+            </li><br><br>
+            <li>
+Prerequisite:<br>
+- A gallery with all or some private categories, visible only by registered users<br>
+- At least 2 following Piwigo\'s users groups: "Waiting," without permission on private categories, and "Validated" with all the permissions on the private categories<br>
+- UAM plugin<br>
+- PWG Stuffs plugin, for adding a module type "Personal Block"<br>
+- Optionally, the plugin Extended Description to support multi-languages<br>
+            </li><br><br>
+            <li>
+Stages:<br><br>
+A. In plugin UAM:
+              <ol>
+                <li>Enable registration confirmation</li>
+                <li>Enter text for additional explanation which will be attached to mail registration confirmation. If the plugin Extended Description is activated, the language tags can be used</li>
+                <li>Select the "Waiting" group under "For users who have not validated their registration"</li>
+                <li>Select the "Validated" group under "For users who have validated their registration"</li>
+                <li>Save the plugin configuration</li>
+              </ol>
+<br>
+B. In plugin PWG Stuffs :
+              <ol>
+                <li>Add a new module type "Personal block: Shows a block staff (eg an editorial)"</li>
+                <li>Configure the module, indicating the title (eg "Registration pending validation") and its description, and only check "Waiting" in the list of groups allowed</li>
+                <li>Complete content of the module with the message information to be displayed to users not validated. As UAM, languages markup may be used if the plugin is enabled Extended Description</li>
+                <li>Check "Display the module on the homepage of the site"</li>
+                <li>Validate the configuration of the module</li>
+              </ol>
+            </li>
+          </ul>';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom_Txt1'] = 'Text of the confirmation page - Confirmation accepted';
+$lang['UAM_confirmmail_custom_Txt2'] = 'Text of the confirmation page - Confirmation rejected';
+$lang['LastVisit_Date'] = 'Last visit';
+$lang['Nb_Days'] = 'Difference in days';
+$lang['Err_UserManager_Settings'] = 'This page is available only if "Confirmation of registration" is active and if a group of visitors not validated is configured in "Setting confirmations and validations of registration".';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.1
+$lang['reg_err_mail_address_dbl'] = 'This email address is already used.';
+$lang['UAM_Support_txt'] = 'The official support on this plugin is only on these Piwigo forum topic:<br>
+<a href="http://fr.piwigo.org/forum/viewtopic.php?id=12775" onclick="window.open(this.href);return false;">French forum - http://fr.piwigo.org/forum/viewtopic.php?id=12775</a>
+<br>or<br>
+<a href="http://piwigo.org/forum/viewtopic.php?id=15015" onclick="window.open(this.href);return false;">English forum - http://piwigo.org/forum/viewtopic.php?id=15015</a><br><br>
+Also available, the project\'s bugtracker: <a href="http://piwigo.org/bugs/" onclick="window.open(this.href);return false;">http://piwigo.org/bugs/</a>';
+// --------- End: New or revised $lang ---- from version 2.15.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['Force_Validation'] = 'Manual validation';
+$lang['UAM_Confirm_Mail_true'] = ' Enable - Validation by user';
+$lang['UAM_Confirm_Mail_local'] = ' Enable - Validation by admin (no validation key sent)';
+$lang['UAM_RedirToProfile'] = 'Redirect to "Customization" page';
+$lang['UAM_RedirToProfile_false'] = ' Disable (default)';
+$lang['UAM_RedirToProfile_true'] = ' Enable';
+// --------- End: New or revised $lang ---- from version 2.15.4
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/description.txt
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/description.txt	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/description.txt	(revision 7001)
@@ -0,0 +1,1 @@
+Refuerza las posibilidades de gestión de usuarios
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/help/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/help/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/help/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/help/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/help/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/help/plugin.lang.php	(revision 7001)
@@ -0,0 +1,191 @@
+<?php
+global $lang;
+
+$lang['UAM_restricTitle'] = 'Restricciones para el registro';
+$lang['UAM_confirmTitle'] = 'Confirmaciones y validaciones de registro';
+$lang['UAM_confirmTitle_d'] = '
+- Información por correo electrónico para el usuario<br>
+- Confirmación de registro<br>
+- Grupos o estatutos de validación<br>
+- Plazo para la validación de registro<br>
+- Recuerde a los usuarios no validados<br>
+...
+';
+$lang['UAM_miscTitle'] = 'Registros seguido y otras opciones';
+$lang['UAM_miscTitle_d'] = '
+- Gestión de visitantes fantasmas<br>
+- Seguimiento de usuarios registrados<br>
+- Nickname obligatorio para los comentarios<br>
+...
+';
+$lang['UAM_casenTitle'] = 'Nombres de usuario: mayúsculas y minúsculas';
+$lang['UAM_carexcTitle'] = 'Nombres de usuario: Excluyendo los caracteres';
+$lang['UAM_carexcTitle_d'] = 'Puede ser interesante para prohibir ciertos caracteres en nombres de usuario (por ejemplo, se niegan los inicios de sesi&oacute;n que contiene &quot;@&quot;). Esta opci&oacute;n permite excluir caracteres o secuencia de caracteres, los acontecimientos.<br>
+Nota: La opción también puede excluir palabras completas.
+<br><br>
+<b style=&quot;color: red;&quot;>Advertencia: Esta opción no tiene efecto sobre los nombres de usuario creados antes de su activación.</b>';
+$lang['UAM_passwTitle'] = 'Fortalecimiento del nivel de seguridad de las contraseñas';
+$lang['UAM_passwTitle_d'] = 'Al habilitar esta opción hace obligatoria la creación de una contraseña en el registro, y requiere la contraseña elegida por el usuario para cumplir un nivel mínimo de complejidad. Si el umbral no se alcanza, la puntuación obtenida y la puntuación mínima que deben alcanzarse se muestran, junto con recomendaciones para aumentar el valor de esta puntuación.<br><br>
+Un campo de prueba permite medir la complejidad de la contraseña, y puede hacerse una idea de la puntuación necesaria para alcanzar una contraseña valida .<br><br>
+Nota: La puntuación de una contraseña se calcula en función de varios parámetros: longitud, tipo de caracteres utilizados (letras, números, mayúsculas, minúsculas, caracteres especiales). Una puntuación por debajo de 100 se considera bajo, de 100 a 500, la complejidad es mediana, más allá de 500, la seguridad es excelente.';
+$lang['UAM_passwtestTitle'] = 'Prueba de la complejidad de la contraseña';
+$lang['UAM_passwtestTitle_d'] = 'Introduzca la contrase&ntilde;a para pruebar y luego haga clic en &quot;c&aacute;lcular complejidad&quot; para ver el resultado.';
+$lang['UAM_passwadmTitle'] = 'Aplicando a los administradores';
+$lang['UAM_passwadmTitle_d'] = 'Un administrador puede crear una cuenta de usuario, con o sin aplicación de la regla de la complejidad informática.<br><br>
+Nota: Si el  usuario de la cuenta  creada quiere cambiar la contraseña, y el fortalecimiento de las contraseñas de los usuarios está activo, la misma estará sujeta a la norma establecida.';
+$lang['UAM_mailexcTitle'] = 'Exclusión de dominios de correo electrónico';
+$lang['UAM_infomailTitle'] = 'Información por correo electrónico para el usuario';
+$lang['UAM_infomailTitle_d'] = 'Esta opción permite automatizar el envío de un correo electrónico y la información a un usuario cuando se registra o cuando cambie su contraseña o dirección de correo electrónico en su perfil.<br><br>
+El contenido del mensaje enviado se compone de una parte personalizable para introducir una nota de bienvenida, y una parte fija que indica el inicio de sesión, contraseña y dirección de correo electrónico del usuario.';
+$lang['UAM_infotxtTitle'] = 'Personalización del correo electrónico de información';
+$lang['UAM_infotxtTitle_d'] = 'Introduzca el texto de introducción que desea ver en el correo electrónico de la información.<br><br>
+Para utilizar varios idiomas, puede utilizar las etiquetas para el plugin Extended description si está activo.<br><br>
+<b style=&quot;color: red;&quot;>Texto de la modificaci&oacute;n s&oacute;lo est&aacute; disponible si est&aacute; activado el &quot;correo electr&oacute;nico de la informaci&oacute;n&quot;.</b>';
+$lang['UAM_confirmtxtTitle'] = 'Personalización del mensaje recordatorio';
+$lang['UAM_confirmtxtTitle_d'] = 'Introduzca el texto de introducción que desea que aparezca en el correo electrónico de confirmación de registro.<br><br>
+Para utilizar varios idiomas, puede utilizar las etiquetas para el plugin Extended description si está activo.<br><br>
+<b style=&quot;color: red;&quot;>La modificación de texto s&oacute;lo est&aacute; disponible si est&aacute; habilitada la &quot;Confirmaci&oacute;n de registro&quot;.</b>';
+$lang['UAM_confirmgrpTitle'] = 'Grupos de validación';
+$lang['UAM_confirmgrpTitle_d'] = '<b style=&quot;color: red;&quot;>ADVERTENCIA: El uso de grupos de validación requiere que se haya creado al menos un grupo de usuarios y se define &quot;por defecto&quot; en la gestión de Piwigo de grupos de usuarios.</b><br><br>
+Los grupos est&aacute;n validados para su uso en relaci&oacute;n con la &quot;confirmaci&oacute;n de registro&quot;';
+$lang['UAM_confirmstatTitle'] = 'Estatutos de validación';
+$lang['UAM_confirmstatTitle_d'] = '<b style=&quot;color: red;&quot;>ADVERTENCIA: El uso de la validaci&oacute;n de estado requiere que se haya mantenido el &quot;Invitado&quot; del usuario con la configuraci&oacute;n predeterminada (como usuario de plantilla) para los nuevos registrados. Nota Puede establecer cualquier otro usuario como una plantilla para nuevos registrados. Por favor, consulte la documentaci&oacute;n de Piwigo para obtener m&aacute;s detalles.</b><br><br>
+Los estatutos son validados para su uso en relaci&oacute;n con la &quot;confirmaci&oacute;n de registro&quot;';
+$lang['UAM_validationlimitTitle'] = 'Plazo para la validación de registro limitado';
+$lang['UAM_validationlimitTitle_d'] = 'Esta opción permite limitar la validez de la validación de claves de correo electrónico enviado a los solicitantes de registro nuevo. Los visitantes que se registren tendrán x días de tiempo para validar su inscripción. Después de este período el enlace de validación expira.<br><br>
+Esta opci&oacute;n se utiliza en conjunci&oacute;n con la &quot;confirmaci&oacute;n de registro&quot;';
+$lang['UAM_remailTitle'] = 'Recordarle a los usuarios no validados';
+$lang['UAM_remailTitle_d'] = 'Esta opci&oacute;n le permite enviar un recordatorio por correo electr&oacute;nico a los usuarios registrados, que no han validado su inscripci&oacute;n a tiempo. Por lo tanto, trabaja en conjunto con la &quot;confirmaci&oacute;n de registro&quot;<br><br>
+2 tipos de mensajes de correo electrónico se pueden enviar: Con o sin regeneración de la clave de validación. Según proceda, el contenido de los mensajes de correo electrónico se pueden personalizar.<br><br>
+Consulte la ficha &quot;Seguimiento de las Validaciones&quot;.';
+$lang['UAM_remailtxt1Title'] = 'Recordatorio por correo electrónico con la llave generada';
+$lang['UAM_remailtxt1Title_d'] = 'Introduzca el texto de introducción que desea que aparezca en el recordatorio por correo electrónico, además de la clave de validación regenerada.<br><br>
+Si se deja en blanco, el aviso de correo electrónico sólo incluirá el enlace de validación. Por tanto, es muy recomendable tomar un pequeño texto explicativo. (Nota: El texto pre-llenado con la instalación del plugin se proporciona como un ejemplo)<br><br>
+Para utilizar varios idiomas, puede utilizar las etiquetas para el plugin Extended description si está activo.<br><br>
+<b style=&quot;color: red;&quot;>La modificaci&oacute;n de texto s&oacute;lo est&aacute; disponible si &quot;Recordar a los usuarios no validados&quot; est&aacute; activado.</b>';
+$lang['UAM_remailtxt2Title'] = 'Recordatorio por correo electrónico sin la llave generada';
+$lang['UAM_remailtxt2Title_d'] = 'Introduzca el texto de introducción que desea que aparezca en el recordatorio por correo electrónico sin una clave de validación regenerada.<br><br>
+Si se deja en blanco, el aviso de correo electrónico estará vacío. Por lo tanto, es muy recomendable poner un pequeño texto explicativo. (Nota: El texto pre-llenado con la instalación del plugin se proporciona como un ejemplo)<br><br>
+Para utilizar varios idiomas, puede utilizar las etiquetas para el plugin Extended description si está activo.<br><br>
+<b style=&quot;color: red;&quot;>La modificaci&oacute;n de texto s&oacute;lo est&aacute; disponible si &quot;Recordar a los usuarios no validados&quot; est&aacute; activado.</b>';
+$lang['UAM_ghosttrackerTitle'] = 'Gestión de usuarios fantasmas';
+$lang['UAM_ghosttrackerTitle_d'] = 'Tambi&eacute;n se llama &quot;Ghost Tracker&quot;, cuando se activa esta funci&oacute;n, usted puede manejar sus visitantes en funci&oacute;n de la frecuencia de sus visitas. Cuando el tiempo entre 2 visitas a llegado, el visitante en cuesti&oacute;n aparecera en el &quot;Ghost Tracker&quot; tabla donde usted ser&aacute; capaz de recordar a los visitantes a trav&eacute;s de correo electr&oacute;nico.<br><br>
+<b style=&quot;color: red;&quot;>Si habilita esta función por primera vez o ha reactivado después de un largo período durante el cual los nuevos visitantes se han registrado, usted debera inicializar o restablecer el Rastreador de Ghost.</b>';
+$lang['UAM_gttextTitle'] = 'Mensaje recordatorio de Ghost Tracker';
+$lang['UAM_gttextTitle_d'] = 'Introduzca el texto que desea que aparezca en el recordatorio por correo electrónico para pedir al usuario volver a visitar su galería (Nota: El texto pre-llenado con la instalación del plugin se presenta como un ejemplo).<br><br>
+Para utilizar varios idiomas, puede utilizar las etiquetas para el plugin Extended description si está activo.<br><br>
+<b style=&quot;color: red;&quot;>La modificaci&oacute;n de texto s&oacute;lo est&aacute; disponible si est&aacute; habilitada &quot;Gesti&oacute;n de Esp&iacute;ritu visitantes&quot;.</b>';
+$lang['UAM_lastvisitTitle'] = 'Seguimiento de usuarios registrados';
+$lang['UAM_lastvisitTitle_d'] = 'Esto activa una tabla de &quot;Seguimiento de los usuarios&quot; ficha de matriculaci&oacute;n de los usuarios que aparecen en la galer&iacute;a y la fecha de su &uacute;ltima visita y el tiempo (en d&iacute;as) desde su &uacute;ltima visita. El seguimiento es meramente informativo para el administrador de la galer&iacute;a.';
+$lang['UAM_commentTitle'] = 'Nickname obligatorio para los comentarios de los huéspedes';
+$lang['UAM_commentTitle_d'] = 'Si &quot;Comentarios para Todos&quot; est&aacute; activo (a los visitantes no registrados para enviar comentarios), esta opci&oacute;n permite forzar el visitante no registrado para ingresar un apodo para que se acepta el comentario.';
+$lang['UAM_tipsTitle'] = 'Consejos y ejemplos';
+$lang['UAM_tipsTitle_d'] = 'Consejos y diversos ejemplos de uso de';
+$lang['UAM_userlistTitle'] = 'Seguimiento de los usuarios';
+$lang['UAM_usermanTitle'] = 'Seguimiento de las Validaciones';
+$lang['UAM_gtTitle'] = 'Gestión de los usuarios fantasmas';
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_adminconfmailTitle'] = 'Confirmaci&oacute;n de registro por los administradores';
+$lang['UAM_adminconfmailTitle_d'] = 'Puede desactivar esta validaci&oacute;n s&oacute;lo para las cuentas de usuario creadas por el administrador de Piwigo a trav&eacute;s de la interfaz de gesti&oacute;n de los usuarios.<br><br>
+Al activar esta opci&oacute;n, la validaci&oacute;n del email de registro ser&aacute; enviado a cada usuario creado por el administrador.<br><br>
+Al deshabilitar esta opci&oacute;n (por defecto), s&oacute;lo el coreo de informaci&oacute;n  se env&iacute;a (si &quot;Informaci&oacute;n por correo electr&oacute;nico para el usuario&quot; est&aacute; activado).';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+/*TODO*/$lang['UAM_confirmmail_custom1'] = 'Text of the confirmation page - Confirmation accepted';
+/*TODO*/$lang['UAM_confirmmail_custom1_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>acceptance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+/*TODO*/$lang['UAM_confirmmail_custom2'] = 'Text of the confirmation page - Confirmation rejected';
+/*TODO*/$lang['UAM_confirmmail_custom2_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>rejectance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.2
+/*TODO*/$lang['UAM_casenTitle_d'] = 'By default, Piwigo is case sensitive: Uppercase and lowercase letters are considered different letters in the names chosen by users at registration. Thus, &quot;Foo&quot;, &quot;foo&quot; and &quot;FOO&quot; may be 3 different users.<br><br>
+Enabling this option allows to consider all options in case of &quot;foo&quot; as one user. If &quot;foo&quot; already exists, creating a new user &quot;Foo&quot; will be refused.<br><br>
+<b style=&quot;color: red;&quot;>Warning: This option has no effect on the user names created prior to its activation.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['UAM_restricTitle_d'] = '
+- Excluyendo los caracteres<br>
+- Ejecución Contraseña<br>
+- Exclusión de dominios de correo electrónico<br>
+...
+';
+$lang['UAM_userlistTitle_d'] = 'Esta p&aacute;gina es para informaci&oacute;n al administrador. Se muestra una lista de todos los usuarios registrados en la galer&iacute;a que indique la fecha y el n&uacute;mero de d&iacute;as transcurridos desde su &uacute;ltima visita. La lista est&aacute; ordenada por orden ascendente del n&uacute;mero de d&iacute;as.
+<br><br>
+<b><u>S&oacute;lo cuando el Ghost Tracker est&aacute; activo</u></b>, el n&uacute;mero de d&iacute;as sin visita aparece con el c&oacute;digo de color siguientes, seg&uacute;n el plazo m&aacute;ximo establecido en las opciones de Ghost Tracker:
+<br>
+- <b style=&quot;color: lime;&quot;>Verde</b> : Cuando el usuario ha visitado la galer&iacute;a de <b style=&quot;color: lime;&quot;><u>menos del 50%</u></b> del plazo m&aacute;ximo indicado en el Ghost Tracker.<br>
+- <b style=&quot;color: orange;&quot;>Naranja</b> : Cuando el usuario ha visitado la galer&iacute;a de <b style=&quot;color: orange;&quot;><u>entre 50% y 99%</u></b> del plazo m&aacute;ximo indicado en el Ghost Tracker.<br>
+- <b style=&quot;color: red;&quot;>Rojo</b> : Cuando el usuario ha visitado la galer&iacute;a de <b style=&quot;color: red;&quot;><u>por más de 100%</u></b> del plazo m&aacute;ximo indicado en el Ghost Tracker. <b><u>En este caso, el usuario tambi&eacute;n debe aparecer en el cuadro Ghost Tracker.</u></b><br>
+<br>
+Ejemplo :
+<br>
+El per&iacute;odo m&aacute;ximo de Ghost Tracker est&aacute; configurado para 100 d&iacute;as.
+<br>
+Un usuario aparecer&aacute; en verde si visit&oacute; la galer&iacute;a hace menos de 50 d&iacute;as, en naranja si su &uacute;ltima visita tuvo lugar entre el 50 y 99 d&iacute;as y el rojo durante 100 d&iacute;as o m&aacute;s.
+<br><br>
+<b>NOTA</b>: La lista no muestra que no han validado su registro (si la opci&oacute;n de validar el registro est&aacute; activado). Estos usuarios estan administrados despu&eacute;s de una manera particular en la pestaña &quot;Seguimiento de las Validaciones&quot;.
+<br><br>
+<b>Funciones Clasificación de la tabla</b>: Puede ordenar los datos mostrados, haga clic en los encabezados de columna. Sostenga la tecla SHIFT para ordenar hasta 4 columnas máxima simultánea.';
+$lang['UAM_usermanTitle_d'] = 'Cuando el limite de plazo de inscripción está habilitado, podrá encontrar más adelante la lista de usuarios cuya validación de registro esta en espera, <b style=&quot;text-decoration: underline;&quot;>si o no</b> que están en el tiempo para validar.<br><br>
+La fecha de registro se muestra en verde cuando el usuario en cuestión está por debajo del límite de tiempo para validar su inscripción. En este caso, la clave de validación es todavía válida y que puede enviar un correo electrónico con o sin una clave de validación nueva.<br><br>
+Cuando la fecha de registro aparece en rojo, el período de validación ha caducado. En este caso, debe enviar un correo electrónico con la regeneración de la clave de validación si desea que el usuario pueda validar su inscripción.<br><br>
+En todos los casos, es posible forzar manualmente la validación.<br><br>
+En esta vista, puede:
+<br><br>
+- Eliminar manualmente las cuentas de <b>(drenaje manual)</b>
+<br>
+- Generar recordatorio por correo electrónico <b>sin</b> generar una nueva clave. Advertencia: Enviar un recordatorio por correo electrónico dirigido a los visitantes. Esta función no restaura la fecha de registro de visitantes apuntado y el tiempo de espera sigue siendo válido.
+<br>- Generar recordatorio por correo electrónico <b>con</b> generar una nueva clave. Advertencia: Enviar un recordatorio por correo electrónico dirigido a los visitantes. Esta función también restablece la fecha de registro de visitantes y específicos, que equivale a prorrogar el plazo para la validación.
+<br>
+- Presentar una solicitud de registro en espera de validación manual, aunque la fecha de caducidad ha pasado <b>(forzando la validación)</b>.
+<br><br>
+<b>Funciones Clasificación de la tabla</b>: Puede ordenar los datos mostrados, haga clic en los encabezados de columna. Sostenga la tecla SHIFT para ordenar hasta 4 columnas máxima simultánea.';
+$lang['UAM_gtTitle_d'] = 'Cuando el Tracker Ghost est&aacute; habilitado y se inicializa, se encuentra por debajo de la lista de visitantes registrados que no han regresado desde los x d&iacute;as. &quot;x&quot; es el n&uacute;mero de d&iacute;as configurado en la pesta&ntilde;a Configuraci&oacute;n general. Adem&aacute;s, usted encontrar&aacute; una columna que indica si un recordatorio por correo electr&oacute;nico ha sido enviado a los visitantes espec&iacute;ficos. As&iacute;, se puede ver a simple vista y tratar a los visitantes que no han tenido en cuenta el recordatorio.<br><br>
+En esta vista, puede:
+<br><br>
+- Elimine manualmente las cuentas de <b>(drenaje manual)</b>
+<br>
+- Generar recordatorio por correo electrónico <b>con el cambio de la fecha de última visita</b>. Esto permite dar un comodín a los visitantes específicos. Si el visitante ya ha recibido un recordatorio, nada impide a enviar un nuevo correo que se restablecerá la fecha de la última visita.
+<br><br>
+<b>Funciones Clasificación de la tabla</b>: Puede ordenar los datos mostrados, haga clic en los encabezados de columna. Sostenga la tecla SHIFT para ordenar hasta 4 columnas máxima simultánea.';
+$lang['UAM_confirmmailTitle'] = 'Confirmación de registro';
+/*TODO*/$lang['UAM_confirmmailTitle_d'] = 'This option allows a user to either confirm registration by clicking on a link received in an email sent upon registration or the administrator to manually activate the registration.<br><br>
+In first case, the e-mail is composed of a customizable part to introduce a little welcome note and a fixed part containing the activation link that is generated from a random key that can possibly regenerate through the &quot;Tracking validations&quot; tab.<br><br>
+Dans le premier cas, le message envoyé comprend une partie fixe, avec le lien d\'activation généré à partir d\'une clef aléatoire (cette clé peut éventuellement être régénérée via l\'onglet &quot;Suivi des validations&quot;), et une partie personnalisable par un texte d\'accueil.
+<br><br>
+In second case, <b><u>there is no validation key send by email!</u></b>. Visitors have to wait until an administrator validate them himself in &quot;Validation tracking&quot; tab. It\s recommanded to activate the Piwigo\'s option &quot;Email admins when a new user registers&quot; (see in Piwigo\'s configuration options) and to use the &quot;Information email to user&quot; to warn new registers to wait on their account activation.
+<br>
+<b style=&quot;color: red;&quot;>NB: Options &quot;Deadline for registration validation limited&quot; and &quot;Remind unvalidated users  &quot; have to be set to off when admin\'s manual validation is enabled.</b>
+<br><br>
+Esta opci&oacute;n se utiliza generalmente con la asignaci&oacute;n autom&aacute;tica de grupo y / o estatutos. Por ejemplo, un usuario que no ha validado su registro se encuentra en un grupo espec&iacute;fico de usuarios (con o sin restricciones a la galer&iacute;a) mientras que un usuario que haya validado su registro se encuentra en un &quot;normal&quot; del grupo.';
+$lang['UAM_RedirTitle'] = 'Redirigir a la página de &quot;personalizaci&oacute;n&quot;';
+// --------- End: New or revised $lang ---- from version 2.15.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.6
+$lang['UAM_RedirTitle_d'] = 'Esta opción se redireccionan automáticamente un usuario registrado para su página de personalización sólo en su primera conexión a la galería.<br><br>
+Atención: Esta característica no se aplica a todos los usuarios registrados. Las personas con estados &quot;admin&quot;, &quot;webmaster&quot; o &quot;generic&quot; están excluidos.';
+// --------- End: New or revised $lang ---- from version 2.15.6
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.7
+$lang['UAM_mailexcTitle_d'] = 'De forma predeterminada, Piwigo acepta todas las direcciones de correo electrónico en el  formato xxx@yyy.zz. Al habilitar esta opción le permite excluir ciertos dominios en el formato: @[nombreDeDominio].[Domain_extension].<br><br>
+Ejemplos :<br>
+@hotmail.com -> con exclusión de direcciones *@hotmail.com<br>
+@hotmail -> con exclusión de todas las direcciones de *@hotmail*
+<br><br>
+<b style=&quot;color: red;&quot;>La convulsión sólo es posible tras el registro de la opción en la posición activada.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.7
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/es_ES/plugin.lang.php	(revision 7001)
@@ -0,0 +1,273 @@
+<?php
+
+global $lang,$conf;
+
+$conf_UAM = unserialize($conf['UserAdvManager']);
+
+
+/* UserManager Tab */
+$lang['Registration_Date'] = 'Fecha de registro';
+
+
+/* Mailing */
+$lang['infos_mail %s'] = '%s, Aquí encontrará su información para entrar en la galería:';
+$lang['User: %s'] = 'Usuario : %s';
+$lang['Password: %s'] = 'Contraseña: %s';
+$lang['Link: %s'] = 'Por favor, haga clic en este enlace para confirmar su registro: %s';
+
+
+/* Email confirmation page */
+$lang['title_confirm_mail'] = 'Validar su inscripción';
+$lang['confirm_mail_page_title'] = 'Validar su inscripción';
+$lang['confirm_mail_ok'] = '<br><br><br>Gracias por haber confirmado su dirección de correo electrónico y su registro en la galería. ¡Que disfrute!<br><br><br><br>';
+
+
+/* Errors and Warnings */
+$lang['UAM_audit_ok'] = 'Auditoría OK';
+$lang['Err_audit_no_casse'] = '<b>Estas cuentas estan idénticas y sensibles a mayusculas:</b> ';
+$lang['Err_audit_username_char'] = '<b>Esta cuenta utiliza uno o más caracteres prohibidos:</b> ';
+$lang['Err_audit_email_forbidden'] = '<b>Esta cuenta utiliza un proveedor de correo electrónico  prohibido:</b> ';
+$lang['Err_audit_advise'] = '<b>Usted tiene que realizar correcciones para cumplir con las nuevas normas que ha activado.<br>Use una herramienta de gestión de base de datos para corregir las cuentas de usuario directamente en la tabla ###_USERS';
+$lang['UAM_Empty Author'] = 'El campo de autor tienen que ser llenados para enviar un comentario.';
+$lang['reg_err_login5'] = 'Este nombre de usuario ya existe,  ADVERTENCIA se distinguen las mayúsculas (Shift = pequeño).';
+$lang['reg_err_login6'] = 'El nombre de usuario no puede coincidir con los siguientes caracteres: ';
+$lang['reg_err_login7'] = 'Su proveedor de correo electrónico está prohibido para el registro. Proveedores de correo electrónico en veda son: ';
+$lang['UAM_empty_pwd'] = '[contraseña vacía]';
+$lang['UAM_no_update_pwd'] = '[Perfil actualizado sin cambiar contraseña]';
+$lang['invalid_pwd'] = '¡Nombre de usuario o contraseña no válidos!';
+$lang['No_validation_for_Guest'] = 'La cuenta "Invitado"  no está sujeta a la validación';
+$lang['No_validation_for_default_user'] = 'La cuenta predeterminada no está sujeta a la validación';
+$lang['No_validation_for_Webmaster'] = 'La cuenta "webmaster" no está sujeta a la validación';
+$lang['No_validation_for_your_account'] = 'Tu cuenta de administrador personnal no está sujeta a la validación';
+$lang['Database_Error'] = '<b><u>¡Advertencia! Error de integridad críticas en su base de datos.</u></b><br><br>Por favor, compruebe la integridad de la tabla de #_user_confirm_mail.';
+
+
+/* Processing messages */
+$lang['%d_Mail_With_Key'] = '%d mensaje con la clave de renovación fue enviado';
+$lang['%d_Mails_With_Key'] = '%d Mensajes con la clave de renovación fueron enviados';
+$lang['%d_Reminder_Sent'] = '%d mensaje recordatorio fue enviado';
+$lang['%d_Reminders_Sent'] = '%d mensajes recordatorios fueron enviados ';
+$lang['%d_Validated_User'] = '%d usuario validado manualmente';
+$lang['%d_Validated_Users'] = '%d usuarios validados manualmente';
+
+
+/* Action button names */
+$lang['Delete_selected'] = 'Suprimir';
+$lang['Mail_without_key'] = 'Aviso sin clave';
+$lang['Mail_with_key'] = 'Aviso con clave';
+
+
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.0 and 2.12.1
+/* Global Configuration Tab */
+$lang['PasswordTest'] = 'Cálculo de la puntuación';
+/* Ghost Tracker Tab */
+$lang['Tab_GhostTracker'] = 'Ghost Tracker';
+$lang['Reminder'] = 'Recordatorio por email';
+$lang['Reminder_Sent_OK'] = 'SI';
+$lang['Reminder_Sent_NOK'] = 'NO';
+/* Errors and Warnings */
+$lang['UAM_save_config'] ='Configuración guardada.';
+$lang['reg_err_login3'] = '¡Seguridad: Contraseña obligatoria!';
+$lang['reg_err_login4_%s'] = 'Seguridad: Un sistema de control calcula la puntuación de la complejidad de la contraseñas. La complejidad de la contraseña es demasiado baja (puntuación = %s). Por favor, elija una nueva contraseña más segura siguiendo estas reglas:<br>
+- Usar letras y números<br>
+- Utilice minúsculas y mayúsculas<br>
+- Aumentar su longitud (número de caracteres)<br>
+La puntuación mínima de las contraseñas   exigida por el administrador es la siguiente: ';
+$lang['No_reminder_for_Guest'] = 'La cuenta "Invitado" no está sujeta a recibir recordatorios de Ghost Tracker';
+$lang['No_reminder_for_default_user'] = 'La cuenta predeterminada no está sujeto a recibir recordatorios de Ghost Tracker';
+$lang['No_reminder_for_Webmaster'] = 'La cuenta "webmaster" no está sujeta a recibir recordatorios de Ghost Tracker';
+$lang['No_reminder_for_your_account'] = 'Su cuenta de administrador personnal no está sujeta a recibir recordatorios de Ghost Tracker';
+/* Action button names */
+$lang['audit'] = 'Auditar la configuración';
+$lang['submit'] = 'Guardar configuración';
+// --------- End: New or revised $lang ---- from version 2.12.0 and 2.12.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.2
+/* Errors and Warnings */
+$lang['GhostTracker_Init_OK'] = '¡Ghost Tracker inicializado!';
+/* Action button names */
+$lang['GT_Reset'] = 'Inicializar Ghost Tracker';
+// --------- End: New or revised $lang ---- from version 2.12.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.8
+/* Errors and Warnings */
+$lang['mail_exclusionlist_error'] = '¡Advertencia! Ha introducido una nueva línea (CR-LF) al principio de la lista de exclusión de correo electrónico (en rojo abajo). Aunque esta nueva línea no es visible, todavía está presente y puede causar un mal funcionamiento del plugin. Por favor, vuelva a escribir en su lista de exclusión de una manera que no comienza con una nueva línea.';
+// --------- End: New or revised $lang ---- from version 2.12.8
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.0
+/* UserList Tab */
+$lang['UserList_Title'] = 'Seguimiento de los usuarios registrados';
+// --------- End: New or revised $lang ---- from version 2.13.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.4
+$lang['uam_no_unlink'] = 'La función \'unlink\' no esta disponible';
+$lang['uam_unlink_errors'] = 'Se ha producido un error al suprimir datos';
+/* Global Configuration Tab */
+$lang['Title_Tab'] = 'UserAdvManager - Versión: ';
+$lang['SubTitle1'] = 'Configuración del plugin';
+$lang['Tab_Global'] = 'Configuración';
+$lang['UAM_Title1'] = 'Configuración de las restricciones de registro';
+$lang['UAM_Title2'] = 'Configuración de las confirmaciones y validaciones de registro';
+$lang['UAM_Title3'] = 'Configuración de los registros seguidos y otras opciones';
+$lang['UAM_Title4'] = 'Consejos y ejemplos de uso';
+$lang['UAM_No_Casse'] = 'Nombres de usuarios: mayúsculas y minúsculas';
+$lang['UAM_No_Casse_true'] = ' Activar';
+$lang['UAM_No_Casse_false'] = ' Desactivar (por defecto)';
+$lang['UAM_Username_Char'] = 'Nombres de usuarios: Excluyendo los caracteres';
+$lang['UAM_Username_Char_true'] = ' Prohibición de caracteres:<br>(Utilice una coma para separar cada caracteres)<br><br>';
+$lang['UAM_Username_Char_false'] = ' Permiso de todos (por defecto)';
+$lang['UAM_Password_Enforced'] = 'Fortalecimiento del nivel de seguridad de las contraseñas';
+$lang['UAM_Password_Enforced_true'] = ' Activar. Puntuación mínima:';
+$lang['UAM_Password_Enforced_false'] = ' Desactivar (por defecto)';
+$lang['UAM_AdminPassword_Enforced'] = 'Aplicar a los administradores';
+$lang['UAM_AdminPassword_Enforced_true'] = ' Activar';
+$lang['UAM_AdminPassword_Enforced_false'] = ' Desactivar (por defecto)';
+$lang['UAM_PasswordTest'] = 'Test de Contraseña: ';
+$lang['UAM_ScoreTest'] = 'Resultado: ';
+$lang['UAM_MailExclusion'] = 'Exclusión de dominios de correo electrónico';
+$lang['UAM_MailExclusion_true'] = ' Excluir los siguientes dominios: <br>(Utilice una coma para separar cada dominio)';
+$lang['UAM_MailExclusion_false'] = ' Desactivar (por defecto)';
+
+$lang['UAM_Mail_Info'] = 'Información por correo electrónico para el usuario:';
+$lang['UAM_Mail_Info_true'] = ' Activar';
+$lang['UAM_Mail_Info_false'] = ' Desactivar (por defecto)';
+$lang['UAM_MailInfo_Text'] = ' Personalización del correo electrónico de información:';
+$lang['UAM_Confirm_Mail'] = 'Confirmación de registro:';
+$lang['UAM_Confirm_Mail_false'] = ' Desactivar (por defecto)';
+$lang['UAM_ConfirmMail_Text'] = ' Personalización del correo electrónico de confirmación:';
+$lang['UAM_Confirm_grpstat_notice'] = 'Precaución: Es recomendable utilizar el grupo o los estatutos de validación y no ambos simultáneamente.';
+$lang['UAM_Confirm_Group'] = 'Grupos de validación<br>(Dejar ------- para no afectar grupo)';
+$lang['UAM_Confirm_Status'] = 'Estatutos de validación<br>(Dejar ------- para mantener el valor predeterminado de Piwigo)';
+$lang['UAM_No_Confirm_Group'] = 'Grupo para los usuarios que no han validado su registro<br>';
+$lang['UAM_Validated_Group'] = 'Grupo para los usuarios que han validado su registro<br>';
+$lang['UAM_No_Confirm_Status'] = 'Situación de los usuarios que no han validado su registro<br>';
+$lang['UAM_Validated_Status'] = 'Situación de los usuarios que han validado su registro<br>';
+$lang['UAM_ValidationLimit_Info'] = 'Plazo para la validación de registro limitado';
+$lang['UAM_ConfirmMail_TimeOut_true'] = ' Activar. Número de días hasta el vencimiento: ';
+$lang['UAM_ConfirmMail_TimeOut_false'] = ' Desactivar (por defecto)';
+$lang['UAM_ConfirmMail_Remail'] = 'Recuerde a los usuarios no validados';
+$lang['UAM_ConfirmMail_Remail_true'] = ' Activar';
+$lang['UAM_ConfirmMail_Remail_false'] = ' Desactivar (por defecto)';
+$lang['UAM_ConfirmMail_ReMail_Txt1'] = 'Personalización del mensaje recordatorio <b><u>con</u></b> la regeneración de validación de claves.';
+$lang['UAM_ConfirmMail_ReMail_Txt2'] = 'Personalización del mensaje recordatorio <b><u>sin</u></b> la regeneración de la validación de claves.';
+
+$lang['UAM_GhostTracker'] = 'Gestión de Espíritu visitantes (Tracker Ghost)';
+$lang['UAM_GhostTracker_true'] = ' Activar. Período máximo de días entre dos visitas: ';
+$lang['UAM_GhostTracker_false'] = ' Desactivar (por defecto)';
+$lang['UAM_GhostTracker_ReminderText'] = 'Personalización del mensaje recordatorio de Ghost Tracker';
+$lang['UAM_LastVisit'] = ' Seguimiento de usuarios registrados';
+$lang['UAM_LastVisit_true'] = ' Activar';
+$lang['UAM_LastVisit_false'] = ' Desactivar (por defecto)';
+$lang['UAM_No_Comment_Anonymous'] = 'Nickname obligatorio para los comentarios de los huéspedes';
+$lang['UAM_No_Comment_Anonymous_true'] = ' Activar';
+$lang['UAM_No_Comment_Anonymous_false'] = ' Desactivar (por defecto)';
+
+$lang['UAM_Tips1'] = 'Con la validación de los registros de correo electrónico y mensaje de advertencia en la página principal de Piwigo';
+
+$lang['Tab_UserManager'] = 'Seguimiento de las validaciones';
+
+/* UserManager Tab */
+$lang['SubTitle3'] = 'Seguimiento de las validaciones';
+$lang['UserManager_Title'] = 'Seguimiento de las validaciones';
+/* Ghost Tracker Tab */
+$lang['SubTitle4'] = 'Ghost Tracker';
+$lang['GT_Init'] = 'Inicialización de Ghost Tracker';
+$lang['GhostTracker_Title'] = 'Gestión de los espíritu visitantes';
+$lang['UAM_GhostTracker_Init'] = 'Si habilita esta función por primera vez o ha reactivado después de un largo período durante el cual los visitantes se han registrado de nuevo, usted debe inicializar o restablecer el Rastreador de Ghost. Esta acción se realiza sólo después de la activación o reactivación de la opción. Por favor, haga clic <u>una vez</u>en el botón de reset de abajo.';
+/* UserList Tab */
+$lang['SubTitle5'] = 'Seguimiento de los usuarios';
+$lang['Tab_UserList'] = 'Seguimiento de los usuarios';
+/* Mailing */
+$lang['Add of %s'] = 'Perfil creado para %s';
+$lang['Update of %s'] = '%s Perfil actualizado';
+/* Email confirmation page */
+$lang['confirm_mail_bad'] = '<br><br><br>Su clave de activación es incorrecta o está vencida o ya ha validado su cuenta, por favor, póngase en contacto con el webmaster para solucionar este problema.<br><br><br><br>';
+/* Mailing */
+$lang['Ghost_reminder_of_%s'] = '%s, este es un recordatorio por correo electrónico';
+$lang['Reminder_with_key_of_%s'] = '%s, su clave de validación se ha renovado';
+$lang['Reminder_without_key_of_%s'] = '%s, su clave de validación expirará';
+/* Errors and Warnings */
+$lang['Err_GhostTracker_Settings'] = 'Esta página está disponible sólo si "Ghost Tracker" está activo en "Configuración de los registros seguido y otras opciones".';
+$lang['Err_Userlist_Settings'] = 'Esta página está disponible sólo si "Seguimiento de los usuarios registrados" está activo en la "Configuración de los registros seguidos y otras opciones".';
+// --------- End: New or revised $lang ---- from version 2.13.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_AdminConfMail'] = 'Confirmación de registro por los administradores';
+$lang['UAM_Admin_ConfMail_true'] = ' Activar';
+$lang['UAM_Admin_ConfMail_false'] = ' Desactivar (por defecto)';
+$lang['UAM_Tips1_txt'] = '
+          <ul>
+            <li>
+            Objectivos:<br>
+            - A su llegada a la galería: Avisar al visitante de que tiene que registrarse para acceder a fotos privadas<br>
+            - En el registro: Generar una validación de correo electrónico con enlace directo, informar al nuevo usuario de su falta de validación y integrarlo al grupo "Espera"<br>
+            - En la validación: cambiar automáticamente de grupo "Espera" al grupo "Validado", que proporciona acceso a categorías particulares<br><br>
+            <b>Recuerde: En funcionamiento normal, el "Invitado" sólo ve las categorías de público, sin mensaje de información.</b>
+            </li><br><br>
+            <li>
+Requisito previo:<br>
+- Una galería con todas o algunas categorías privadas, visible sólo por los usuarios registrados<br>
+- Al menos los 2 grupos de usuarios siguientes de Piwigo : "Espera," sin permiso en las categorías de privados, y "Validado" con todos los permisos en las categorías de privados<br>
+- UAM plugin<br>
+- PWG Stuffs plugin, para agregar un tipo de módulo "Personal Block"<br>
+- Opcionalmente, la Extended Description plugin para soportar múltiples idiomas<br>
+            </li><br><br>
+            <li>
+Etapas:<br><br>
+A. En el plugin UAM:
+              <ol>
+                <li>Activar la confirmación de registro</li>
+                <li>Introduzca el texto para la explicación adicional, que se adjunta al correo de confirmación de registro. Si se activa el plugin Extended Description, las etiquetas de idioma se pueden utilizar</li>
+                <li>Seleccione la opción "Espera" del grupo en "Para los usuarios que no han validado su registro"</li>
+                <li>Seleccione la opción "Validado" en grupo "Para los usuarios que han validado su registro"</li>
+                <li>Guardar la configuración del plug-in</li>
+              </ol>
+<br>
+B. En plugin PWG Stuffs :
+              <ol>
+                <li>Añadir un tipo de módulo nuevo "bloque Personal: Muestra una plantilla de bloque (por ejemplo, un editorial)"</li>
+                <li>Configurar el módulo, lo que indica el título (por ejemplo, "en espera de la validación de Registro") y su descripción, y solamente "Espera" en la lista de grupos permitido</li>
+                <li>El contenido completo del módulo con la información del mensaje que se mostrará a los usuarios no validados. Como UAM, las balisas de  lenguajes pueden ser utilizadas si el plugin Extended Description está activado</li>
+                <li>Active la casilla "Mostrar el módulo en la página principal del sitio"</li>
+                <li>Validar la configuración del módulo</li>
+              </ol>
+            </li>
+          </ul>';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom_Txt1'] = 'Texto de la página de confirmación - Confirmación aceptada';
+$lang['UAM_confirmmail_custom_Txt2'] = 'Texto de la página de confirmación - Confirmación rechazada';
+$lang['LastVisit_Date'] = 'Su última visita';
+$lang['Nb_Days'] = 'Diferencia en días';
+$lang['Err_UserManager_Settings'] = 'Esta página está disponible sólo si "Confirmación de registro" está activo y si un grupo de visitantes no ha sido validada está configurado en "Configuración de las confirmaciones y validaciones de registro".';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.1
+$lang['reg_err_mail_address_dbl'] = 'Esta dirección de correo electrónico ya se utiliza.';
+$lang['UAM_Support_txt'] = 'El apoyo oficial sobre este plugin se encuentra solo en el foro de Piwigo:<br>
+<a href="http://fr.piwigo.org/forum/viewtopic.php?id=12775" onclick="window.open(this.href);return false;">Foro Francés - http://fr.piwigo.org/forum/viewtopic.php?id=12775</a>
+<br>o<br>
+<a href="http://piwigo.org/forum/viewtopic.php?id=15015" onclick="window.open(this.href);return false;">Foro Inglés - http://piwigo.org/forum/viewtopic.php?id=15015</a><br><br>
+También está disponible, el bugtracker del proyecto: <a href="http://piwigo.org/bugs/" onclick="window.open(this.href);return false;">http://piwigo.org/bugs/</a>';
+// --------- End: New or revised $lang ---- from version 2.15.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['Force_Validation'] = 'Validación manual';
+$lang['UAM_Confirm_Mail_true'] = ' Activar - La validación por el usuario';
+$lang['UAM_Confirm_Mail_local'] = ' Activar - La validación por el administrador (sin clave de validación enviado)';
+$lang['UAM_RedirToProfile'] = 'Redirigir a la página de "personalización"';
+$lang['UAM_RedirToProfile_false'] = ' Desactivar (por defecto)';
+$lang['UAM_RedirToProfile_true'] = ' Activar';
+// --------- End: New or revised $lang ---- from version 2.15.4
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/description.txt
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/description.txt	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/description.txt	(revision 7001)
@@ -0,0 +1,1 @@
+Permet de renforcer les possibilités de gestion des utilisateurs
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/help/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/help/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/help/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/help/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/help/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/help/plugin.lang.php	(revision 7001)
@@ -0,0 +1,188 @@
+<?php
+global $lang;
+
+$lang['UAM_restricTitle'] = 'Restriction des inscriptions';
+$lang['UAM_confirmTitle'] = 'Confirmation et validation des inscriptions';
+$lang['UAM_confirmTitle_d'] = '
+- Génération d\'email d\'information<br>
+- Génération d\'email de confirmation d\'inscription<br>
+- Affectation automatique de groupe ou statut<br>
+- Limitation du délai de validation<br>
+- Génération d\'email de rappel<br>
+...
+';
+$lang['UAM_miscTitle'] = 'Suivi des inscrits et fonctions diverses';
+$lang['UAM_miscTitle_d'] = '
+- Gestion des visiteurs fantômes<br>
+- Suivi des visiteurs inscrits<br>
+- Pseudo obligatoire sur commentaire pour les visiteurs<br>
+...
+';
+$lang['UAM_casenTitle'] = 'Noms d\'utilisateurs : Sensibilité à la casse';
+$lang['UAM_carexcTitle'] = 'Noms d\'utilisateurs : Exclusion de certains caractères';
+$lang['UAM_carexcTitle_d'] = 'Il peut être intéressant d\'interdire certains caractères dans les noms d\'utilisateurs (exemple : refuser les logins contenant un &quot;@&quot;). Cette option permet d\'exclure les caractères, ou suite de caractères, indésirables.<br>NB: l\'option permet également d\'exclure des mots complets.
+<br><br>
+<b style=&quot;color: red;&quot;>Attention : Cette option est sans effet sur les noms d\'utilisateurs créés préalablement à son activation.</b>';
+$lang['UAM_passwTitle'] = 'Renforcement de la sécurité des mots de passe';
+$lang['UAM_passwTitle_d'] = 'L\'activation de cette option rend obligatoire la saisie d\'un mot de passe  à l\'inscription, et oblige le mot de passe choisi par le visiteur à répondre à un niveau minimum de complexité. Si ce seuil n\'est pas atteint, le score réalisé et le score minimum à atteindre sont affichés, ainsi que des recommandations pour augmenter la valeur de ce score.<br><br>
+Un champ de test permet de mesurer la complexité d\'un mot de passe, et peut permettre de se faire une idée du score à définir pour une complexité personnalisée.<br><br>
+NB: Le score d\'un mot de passe est calculé en fonction de plusieurs paramètres : longueur, types de caractères utilisés (lettres, chiffres, majuscules, minuscules, caractères spéciaux). Un score inférieur à 100 est considéré comme faible; de 100 à 500, la complexité est dans la moyenne; au-delà de 500, la sécurité est excellente.';
+$lang['UAM_passwtestTitle'] = 'Tester la complexité d\'un mot de passe';
+$lang['UAM_passwtestTitle_d'] = 'Saisir le mot de passe à tester puis cliquer sur le bouton &quot;Calcul du score&quot; pour afficher le résultat.';
+$lang['UAM_passwadmTitle'] = 'Renforcement des mots de passe pour les admins';
+$lang['UAM_passwadmTitle_d'] = 'Un administrateur peut créer un compte d\'utilisateur avec ou sans application de la règle de calcul de complexité.<br><br>
+A noter : Si l\'utilisateur du compte ainsi créé désire changer de mot de passe et que le renforcement des mots de passe pour les utilisateurs est actif, il sera soumis à la règle configurée.';
+$lang['UAM_mailexcTitle'] = 'Exclusion des domaines de messagerie';
+$lang['UAM_infomailTitle'] = 'Email d\'information';
+$lang['UAM_infomailTitle_d'] = 'Cette option permet d\'automatiser l\'envoi d\'un email d\'information à un utilisateur lorsqu\'il s\'inscrit ou modifie son mot de passe ou son adresse de messagerie dans son profil.<br><br>
+Le message envoyé comprend une partie fixe (login, mot de passe et adresse email de l\'utilisateur) et une partie personnalisable par un texte d\'accueil.';
+$lang['UAM_infotxtTitle'] = 'Personnalisation de l\'email d\'information';
+$lang['UAM_infotxtTitle_d'] = 'Saisissez ici le texte d\'introduction personnalisé qui apparaîtra dans l\'email d\'information.<br><br>
+Pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Email d\'information&quot; est activée.</b>';
+$lang['UAM_confirmtxtTitle'] = 'Personnalisation de l\'email de confirmation';
+$lang['UAM_confirmtxtTitle_d'] = 'Saisissez ici le texte d\'introduction qui apparaîtra dans l\'email de confirmation d\'inscription.<br><br>
+Pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Confirmation d\'inscription&quot; est activée.</b>';
+$lang['UAM_confirmgrpTitle'] = 'Groupes de validation';
+$lang['UAM_confirmgrpTitle_d'] = '<b style=&quot;color: red;&quot;>ATTENTION : L\'utilisation des groupes de validation nécessite que vous ayez créé au moins un groupe d\'utilisateurs et qu\'il soit défini &quot;par défaut&quot; dans la gestion des groupes d\'utilisateurs de Piwigo.</b><br><br>
+Les groupes de validation sont à utiliser conjointement avec l\'option &quot;Confirmation d\'inscription&quot;';
+$lang['UAM_confirmstatTitle'] = 'Statuts de validation';
+$lang['UAM_confirmstatTitle_d'] = '<b style=&quot;color: red;&quot;>ATTENTION : L\'utilisation des statuts de validation nécessite que vous ayez conservé l\'utilisateur &quot;Guest&quot; pour le paramétrage par défaut (modèle) pour les nouveaux inscrits. A noter : Vous pouvez définir n\'importe quel autre utilisateur comme modèle pour les nouveaux inscrits. Reportez-vous à la documentation de Piwigo pour plus de détails.</b><br><br>
+Les statuts de validation sont à utiliser conjointement avec l\'option &quot;Confirmation d\'inscription&quot;';
+$lang['UAM_validationlimitTitle'] = 'Limitation du délai de validation d\'inscription';
+$lang['UAM_validationlimitTitle_d'] = 'Cette option permet de limiter le nombre de jours pendant lequel un nouvel utilisateur peut valider son inscription. Une fois ce délai expiré, le lien de validation sera invalide, et ne pourra plus être employé.
+<br><br>
+Cette option n\'est utilisable qu\'une fois l\'option &quot;Confirmation d\'inscription&quot; activée';
+$lang['UAM_remailTitle'] = 'Mail de rappel aux inscrits non validés';
+$lang['UAM_remailTitle_d'] = 'Cette option permet d\'envoyer un email de rappel aux utilisateurs n\'ayant pas validé leur inscription dans les temps. Elle n\'a d\'effet qu\'une fois l\'option &quot;Confirmation d\'inscription&quot; activée.<br><br>
+2 types d\'email peuvent être envoyés : Avec ou sans régénération de la clef de validation. En fonction du cas, le contenu  des emails peut être personnalisé.<br><br>
+Reportez-vous à l\'onglet &quot;Suivi des validations&quot;.';
+$lang['UAM_remailtxt1Title'] = 'Message de rappel avec regénération de clé';
+$lang['UAM_remailtxt1Title_d'] = 'Saisissez ici le texte d\'introduction qui apparaîtra dans l\'email de rappel, accompagné d\'une nouvelle clef de validation.<br><br>
+Il est vivement conseillé de saisir un texte explicatif; à défaut, le mail de rappel ne comportera que le lien de validation. (NB : Le texte pré-renseigné à l\'installation du plugin n\'est donné qu\'à titre d\'exemple)<br><br>
+Pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Mail de rappel aux inscrits non validés&quot; est activée.</b>';
+$lang['UAM_remailtxt2Title'] = 'Message de rappel sans regénération de clé';
+$lang['UAM_remailtxt2Title_d'] = 'Saisissez ici le texte d\'introduction qui apparaîtra dans l\'email de rappel, sans nouvelle clef de validation .<br><br>
+Il est vivement conseillé de saisir un texte explicatif, afin que l\'email ne soit pas vide. (NB : Le texte pré-renseigné à l\'installation du plugin n\'est donné qu\'à titre d\'exemple)<br><br>
+Pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Mail de rappel aux inscrits non validés&quot; est activée.</b>';
+$lang['UAM_ghosttrackerTitle'] = 'Gestion des visiteurs fantômes (aussi appelée Ghost Tracker)';
+$lang['UAM_ghosttrackerTitle_d'] = 'L\'activation de cette fonction permet la gestion des visiteurs inscrits en fonction de la fréquence de leurs visites. Une fois atteint le délai entre 2 visites successives, le visiteur apparaît dans le tableau de l\'onglet &quot;Ghost Tracker&quot; d\'où il est possible de le relancer par email.<br><br>
+<b style=&quot;color: red;&quot;>IMPORTANT : A première activation de cette fonction, ou à sa réactivation après une longue période pendant laquelle de nouveaux visiteurs se sont inscrits, il convient d\'initialiser le Ghost Tracker (voir les instructions correspondantes sur l\'onglet &quot;Ghost Tracker&quot;).</b>';
+$lang['UAM_gttextTitle'] = 'Message de rappel Ghost Tracker';
+$lang['UAM_gttextTitle_d'] = 'Saisissez ici le texte qui apparaîtra dans l\'email de rappel pour inciter l\'utilisateur à revenir visiter votre galerie (NB: Le texte pré-renseigné à l\'installation du plugin est donné à titre d\'exemple).<br><br>
+Pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Gestion des visiteurs fantômes&quot; est activée.</b>';
+$lang['UAM_lastvisitTitle'] = 'Suivi des utilisateurs inscrits';
+$lang['UAM_lastvisitTitle_d'] = 'Cette option active, dans l\'onglet &quot;Suivi des utilisateurs&quot;, un tableau recensant les utilisateurs inscrits, la date de leur dernière visite et le nombre de jours écoulés depuis leur dernière visite. Il s\'agit d\'un suivi purement informatif pour l\'administrateur de la galerie.';
+$lang['UAM_commentTitle'] = 'Commentaires : pseudo obligatoire pour les non-inscrits.';
+$lang['UAM_commentTitle_d'] = 'Lorsque les visiteurs non inscrits sont autorisés à poster des commentaires (&quot;Commentaires pour tous&quot; actif), cette option oblige le visiteur non inscrit à saisir un pseudo pour que le commentaire soit accepté.';
+$lang['UAM_tipsTitle'] = 'Astuces et exemples';
+$lang['UAM_tipsTitle_d'] = 'Astuces et exemples divers d\'utilisation';
+$lang['UAM_userlistTitle'] = 'Suivi des utilisateurs inscrits';
+$lang['UAM_usermanTitle'] = 'Suivi des validations';
+$lang['UAM_gtTitle'] = 'Gestion des visiteurs fantômes';
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_adminconfmailTitle'] = 'Validation d\'inscription pour les admins';
+$lang['UAM_adminconfmailTitle_d'] = 'On peut ici désactiver la validation des inscriptions uniquement pour les comptes d\'utilisateurs créés par l\'administrateur via l\'interface de gestion des utilisateurs de Piwigo.<br><br>
+En activant cette option, l\'email de validation d\'inscription sera envoyé à chaque utilisateur créé par l\'admin.<br><br>
+En désactivant cette option (mode par défaut), seul l\'email d\'information est envoyé (si la fonction &quot;Email d\'information &agrave; l\'utilisateur&quot; est activée).';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom1'] = 'Texte de la page de confirmation - Confirmation acceptée';
+$lang['UAM_confirmmail_custom1_d'] = 'Lorsque l\'option &quot;Confirmation d\'inscription&quot; est active, ce champ permet de personnaliser <b><u>le texte d\'acceptation</u></b> de la confirmation d\'inscription sur la page affichée lorsqu\'un utilisateur clique sur le lien de confirmation qu\'il a reçu par email.<br><br>
+A l\'installation du plugin, un texte standard est donnée en exemple.<br><br>
+Ce champ est compatible avec l\'extension FCK Editor et, pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Confirmation d\'inscription&quot; est activée.</b>';
+$lang['UAM_confirmmail_custom2'] = 'Texte de la page de confirmation - Confirmation rejetée';
+$lang['UAM_confirmmail_custom2_d'] = 'Lorsque l\'option &quot;Confirmation d\'inscription&quot; est active, ce champ permet de personnaliser <b><u>le texte de rejet</u></b> de la confirmation d\'inscription sur la page affichée lorsqu\'un utilisateur clique sur le lien de confirmation qu\'il a reçu par email.<br><br>
+A l\'installation du plugin, un texte standard est donnée en exemple.<br><br>
+Ce champ est compatible avec l\'extension FCK Editor et, pour une utilisation multi-langues, vous pouvez utiliser les balises [lang] du plugin Extended Description si celui-ci est actif.<br><br>
+<b style=&quot;color: red;&quot;>La modification du texte n\'est possible QUE si l\'option &quot;Confirmation d\'inscription&quot; est activée.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.2
+$lang['UAM_casenTitle_d'] = 'Par défaut, Piwigo est sensible à la casse : majuscules et minuscules sont considérées comme des lettres différentes dans les noms choisis par les utilisateurs à l\'inscription. Ainsi, &quot;Toto&quot;,  &quot;toto&quot; et &quot;TOTO&quot; peuvent être 3 utilisateurs différents.<br><br>
+L\'activation de cette option permet de considérer toutes les versions de casse de &quot;toto&quot; comme un seul utilisateur. Si &quot;toto&quot; existe déjà, la création d\'un nouvel utilisateur &quot;ToTo&quot; sera refusée.<br><br>
+<b style=&quot;color: red;&quot;>Attention : Cette option est sans effet sur les noms d\'utilisateurs créés préalablement à son activation.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['UAM_restricTitle_d'] = '
+- Exclusion de caractères dans les noms d\'utilisateurs<br>
+- Renforcement des mots de passe<br>
+- Exclusion des domaines de messagerie<br>
+...
+';
+$lang['UAM_userlistTitle_d'] = 'Cette page est à titre d\'information pour l\'administrateur. Elle affiche la liste de tous les utilisateurs inscrits sur la galerie en faisant apparaitre la date et le nombre de jours depuis leur dernière visite. La liste est triée dans l\'ordre croissant du nombre de jours.
+<br><br>
+<b><u>Uniquement lorsque le Ghost Tracker est actif</u></b>, le nombre de jours sans visite s\'affiche selon le code couleur suivant, en fonction du délai maximum paramétré dans les options du Ghost Tracker :
+<br>
+- <b style=&quot;color: lime;&quot;>En vert</b> : Lorsque l\'utilisateur a visité la galerie <b style=&quot;color: lime;&quot;><u>depuis moins de 50%</u></b> du délai maximum renseigné dans le Ghost Tracker.<br>
+- <b style=&quot;color: orange;&quot;>En orange</b> : Lorsque l\'utilisateur a visité la galerie <b style=&quot;color: orange;&quot;><u>entre 50% et 99%</u></b> du délai maximum renseigné dans le Ghost Tracker.<br>
+- <b style=&quot;color: red;&quot;>En rouge</b> : Lorsque l\'utilisateur a visité la galerie <b style=&quot;color: red;&quot;><u>depuis 100% et plus</u></b> du délai maximum renseigné dans le Ghost Tracker. <b><u>Dans ce cas, l\'utilisateur doit également apparaitre dans le tableau du Ghost Tracker.</u></b><br>
+<br>
+Exemple:
+<br>
+Le délai maximum du Ghost Tracker est configuré à 100 jours.
+<br>
+Un utilisateur apparaitra en vert s\'il a visité la galerie depuis moins de 50 jours, en orange si sa dernière visite s\'est déroulée entre 50 et 99 jours et en rouge à 100 jours et au-delà.
+<br><br>
+<b>A NOTER</b>: La liste n\'affiche pas les inscrits qui n\'auraient pas validé leur inscription (si l\'option de validation de l\'inscription est activée). Ces utilisateurs sont alors gérés de manière particulière dans l\'onglet &quot;Suivi des validations&quot;.
+<br><br>
+<b>Fonction de tri du tableau</b>: Vous pouvez trier les données affichées en cliquant sur les entêtes de colonnes. L\'utilisation de la touche MAJ ou SHIFT permet de trier sur 1 à 4 colonnes simultanées maximum.';
+$lang['UAM_usermanTitle_d'] = 'Lorsque la limitation du délai d\'inscription est activée, vous trouverez ci-dessous la liste des utilisateurs en attente de validation d\'inscription <b style=&quot;text-decoration: underline;&quot;>qu\'ils soient ou pas</b> dans les délais pour la valider.<br><br>La date d\'enregistrement s\'affiche en vert lorsque l\'utilisateur concerné est en dessous du temps limite pour valider son inscription. Dans ce cas, la clé de validation est toujours valide et on pourra envoyer un email avec ou sans régénération de clé.<br><br>Lorsque la date d\'enregistrement s\'affiche en rouge, le délai de validation est expiré. Dans ce cas, on enverra obligatoirement un email avec régénération de clé si on veut permettre à cet utilisateur de pouvoir valider son inscription.<br><br>Dans tous les cas, il est possible de forcer manuellement la validation.<br><br>Dans cette vue, vous pouvez :
+<br><br>
+- Supprimer manuellement les comptes <b>(purge manuelle)</b>
+<br>
+- Générer l\'email de rappel <b>sans génération</b> d\'une nouvelle clef. Rappel : Cette fonction ne réinitialise pas la date d\'inscription du visiteur ciblé et le délai d\'expiration est toujours d\'actualité.
+<br>
+- Générer l\'email de rappel <b>avec génération</b> d\'une nouvelle clef. Rappel : Cette fonction réinitialise également la date d\'inscription du visiteur ciblé ce qui équivaut à prolonger le délai de validation.
+<br>
+- Valider manuellement une inscription en attente de validation même si la date d\'expiration est révolue <b>(forçage de la validation)</b>.
+<br><br>
+<b>Fonction de tri du tableau</b>: Vous pouvez trier les données affichées en cliquant sur les entêtes de colonnes. L\'utilisation de la touche MAJ ou SHIFT permet de trier sur 1 à 4 colonnes simultanées maximum.';
+$lang['UAM_gtTitle_d'] = 'Lorsque la gestion des visiteurs fantômes est activée et initialisée, vous trouverez ci-dessous la liste des visiteurs inscrits sur votre galerie et qui ne sont pas revenus depuis x jours. &quot;x&quot; étant le nombre de jours paramétrés dans l\'onglet de configuration générale. De plus, vous trouverez une colonne précisant si un mail de rappel a déjà été envoyé aux visiteurs ciblés, vous permettant de visualiser d\'un coup d\'oeil et traiter les visiteurs qui n\'auraient pas tenu compte du rappel.<br><br>Dans cette vue, vous pouvez :
+<br><br>
+- Supprimer manuellement les comptes <b>(purge manuelle)</b>
+<br>
+- Générer l\'email de rappel <b>avec réinitialisation de la date de dernière visite</b>. Ce qui permet de donner un &quot;joker&quot; au visiteur ciblé. Si le visiteur a déjà bénéficié d\'un mail de rappel, rien n\'empêche de renvoyer un nouveau mail qui réinitialisera, de fait, la date de dernière visite.
+<br><br>
+<b>Fonction de tri du tableau</b>: Vous pouvez trier les données affichées en cliquant sur les entêtes de colonnes. L\'utilisation de la touche MAJ ou SHIFT permet de trier sur 1 à 4 colonnes simultanées maximum.';
+$lang['UAM_confirmmailTitle'] = 'Confirmation d\'inscription';
+$lang['UAM_confirmmailTitle_d'] = 'Cette option permet soit à un utilisateur de valider son inscription en cliquant sur un lien reçu dans un email envoyé dès son enregistrement sur la galerie soit à l\'administrateur d\'activer manuellement les inscriptions.<br><br>
+Dans le premier cas, le message envoyé comprend une partie fixe, avec le lien d\'activation généré à partir d\'une clef aléatoire (cette clé peut éventuellement être régénérée via l\'onglet &quot;Suivi des validations&quot;), et une partie personnalisable par un texte d\'accueil.
+<br><br>
+Dans le second cas, <b><u>il n\'y a pas d\'envoi de clé de validation par email</u></b>. Les visiteurs doivent patienter que l\'administrateur valide lui même leur inscription via l\'onglet &quot;Suivi des validations&quot;. Il est conseillé d\'activer la notification des administrateurs lors des inscriptions (voir la configuration des options de Piwigo) et d\'utiliser la fonction &quot;Email d\'information à l\'utilisateur&quot; pour avertir les nouveaux inscrits de la nécessité de patienter avant activation de leur compte.
+<br>
+<b style=&quot;color: red;&quot;>NB: Les options &quot;Limitation du délai de validation d\'inscription&quot; et &quot;Mail de rappel aux inscrits non validés&quot; doivent être désactivées lorsque la validation manuelle est active.</b>
+<br><br>
+Cette option est généralement utilisée avec  l\'attribution automatique de groupe et/ou de statut. Selon qu\'il a validé ou non son inscription, il est en effet possible d\'affecter à l\'utilisateur un groupe différent, avec plus ou moins de restrictions d\'accès à la galerie.';
+$lang['UAM_RedirTitle'] = 'Redirection vers la page &quot;Personnalisation&quot;';
+$lang['UAM_RedirTitle_d'] = 'Cette option permet de rediriger automatiquement un utilisateur inscrit vers sa page de personnalisation uniquement lors de sa première connexion à la galerie.<br><br>
+A savoir: Cette fonction s\'applique également à tous les utilisateurs déjà inscrits, y compris ceux disposant du status &quot;admin&quot;, &quot;webmaster&quot; ou &quot;generique&quot;.';
+// --------- End: New or revised $lang ---- from version 2.15.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.6
+$lang['UAM_RedirTitle_d'] = 'Cette option permet de rediriger automatiquement un utilisateur inscrit vers sa page de personnalisation uniquement lors de sa première connexion à la galerie.<br><br>
+A savoir: Cette fonction ne s\'applique pas à tous les utilisateurs déjà inscrits. Ceux disposant du status &quot;admin&quot;, &quot;webmaster&quot; ou &quot;generique&quot; sont exclus de la règle.';
+// --------- End: New or revised $lang ---- from version 2.15.6
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.7
+$lang['UAM_mailexcTitle_d'] = 'Par défaut, Piwigo accepte toutes les adresses de messagerie au format xxx@yyy.zz. L\'activation de cette option permet d\'exclure certains domaines selon le format : @[nom_du_domaine].[extension_du_domaine].<br><br>
+Exemples :<br>
+@hotmail.com -> exclusion des adresses *@hotmail.com<br>
+@hotmail -> exclusion de toutes les adresses *@hotmail*
+<br><br>
+<b style=&quot;color: red;&quot;>La saisie n\'est possible qu\'après enregistrement de l\'option en position activée.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.7
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/fr_FR/plugin.lang.php	(revision 7001)
@@ -0,0 +1,270 @@
+<?php
+
+global $lang,$conf;
+
+$conf_UAM = unserialize($conf['UserAdvManager']);
+
+
+/* UserManager Tab */
+$lang['Registration_Date'] = 'Date d\'enregistrement';
+
+
+/* Mailing */
+$lang['infos_mail %s'] = '%s, voici vos informations pour vous identifier sur la galerie :';
+$lang['User: %s'] = 'Utilisateur : %s';
+$lang['Password: %s'] = 'Mot de passe: %s';
+$lang['Link: %s'] = 'Cliquez sur le lien suivant pour confirmer votre inscription : %s';
+
+
+/* Email confirmation page */
+$lang['title_confirm_mail'] = 'Confirmation de votre inscription';
+$lang['confirm_mail_page_title'] = 'Confirmation d\'inscription';
+
+
+/* Errors and Warnings */
+$lang['UAM_audit_ok'] = 'Audit OK';
+$lang['Err_audit_no_casse'] = '<b>Ces comptes sont identiques à la casse près :</b> ';
+$lang['Err_audit_username_char'] = '<b>Ce compte contient un ou des caractères interdits :</b> ';
+$lang['Err_audit_email_forbidden'] = '<b>Ce compte contient des domaines de messagerie interdit :</b> ';
+$lang['Err_audit_advise'] = '<b>Vous avez des corrections a faire pour respecter les nouvelles règles que vous avez activées.<br>Utilisez un utilitaire de gestion de base de données pour corriger les comptes utilisateurs directement dans la table ###_USERS si nécessaire.</b><br><br>';
+$lang['UAM_Empty Author'] = 'Le champs auteur doit être rempli pour enregistrer un commentaire.';
+$lang['reg_err_login5'] = 'ce nom utilisateur est déjà pris, ATTENTION le nom est insensible à la casse (Majuscule = Minuscule).';
+$lang['reg_err_login6'] = 'le nom utilisateur ne doit pas contenir les caractère suivants : ';
+$lang['reg_err_login7'] = 'L\'adresse email est issue d\'un prestataire interdit. Les prestataires d\'adresses email interdits à l\'inscription sont : ';
+$lang['UAM_empty_pwd'] = '[mot de passe vide]';
+$lang['UAM_no_update_pwd'] = '[mise à jour du profil sans changement du mot de passe]';
+$lang['invalid_pwd'] = 'Nom utilisateur ou Mot de passe invalide !';
+$lang['No_validation_for_Guest'] = 'Le compte Guest n\'est pas soumis à validation';
+$lang['No_validation_for_default_user'] = 'Le compte par défaut n\'est pas soumis à validation';
+$lang['No_validation_for_Webmaster'] = 'Le compte du Webmaster n\'est pas soumis à validation';
+$lang['No_validation_for_your_account'] = 'Votre compte d\'admin n\'est pas soumis à validation';
+$lang['Database_Error'] = '<b><u>Attention ! Erreur critique d\'intégrité dans votre base de données.</u></b><br><br>Veuillez contrôler l\'intégrité de la table #_user_confirm_mail.';
+
+
+/* Processing messages */
+$lang['%d_Mail_With_Key'] = '%d message avec renouvellement de clé a été envoyé';
+$lang['%d_Mails_With_Key'] = '%d messages avec renouvellement de clé ont été envoyés';
+$lang['%d_Reminder_Sent'] = '%d message de rappel a été envoyé';
+$lang['%d_Reminders_Sent'] = '%d messages de rappel ont été envoyés';
+$lang['%d_Validated_User'] = '%d Utilisateur validé manuellement';
+$lang['%d_Validated_Users'] = '%d Utilisateurs validés manuellement';
+
+
+/* Action button names */
+$lang['Delete_selected'] = 'Supprimer';
+$lang['Mail_without_key'] = 'Rappel sans clé';
+$lang['Mail_with_key'] = 'Rappel avec clé';
+
+
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.0 and 2.12.1
+/* Global Configuration Tab */
+$lang['PasswordTest'] = 'Calcul du score';
+/* Ghost Tracker Tab */
+$lang['Tab_GhostTracker'] = 'Ghost Tracker';
+$lang['Reminder'] = 'Email de rappel';
+$lang['Reminder_Sent_OK'] = 'OUI';
+$lang['Reminder_Sent_NOK'] = 'NON';
+/* Errors and Warnings */
+$lang['UAM_save_config'] ='Configuration enregistrée.';
+$lang['reg_err_login3'] = 'Sécurité : Le mot de passe est obligatoire !';
+$lang['reg_err_login4_%s'] = 'Sécurité : Un système de contrôle calcule un score de complexité sur les mots de passe choisis. La complexité de votre mot de passe est trop faible (score = %s). Veuillez choisir un nouveau mot de passe plus sûre en respectant les règles suivantes :<br>
+- Utiliser des lettres et des chiffres<br>
+- Utiliser des minuscules et des majuscules<br>
+- Augmenter sa longueur (nombre de caractères)<br>
+Le score minimal des mots de passe imposé par l\'administrateur est de : ';
+$lang['No_reminder_for_Guest'] = 'Le compte Guest n\'est pas soumis à recevoir des rappels du GhostTracker';
+$lang['No_reminder_for_default_user'] = 'Le compte par défaut n\'est pas soumis à recevoir des rappels du GhostTracker';
+$lang['No_reminder_for_Webmaster'] = 'Le compte du Webmaster n\'est pas soumis à recevoir des rappels du GhostTracker';
+$lang['No_reminder_for_your_account'] = 'Votre compte d\'admin n\'est pas soumis à recevoir des rappels du GhostTracker';
+/* Action button names */
+$lang['audit'] = 'Auditer les paramètres';
+$lang['submit'] = 'Sauvegarder les paramètres';
+// --------- End: New or revised $lang ---- from version 2.12.0 and 2.12.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.2
+/* Errors and Warnings */
+$lang['GhostTracker_Init_OK'] = 'Initialisation Ghost Tracker effectuée !';
+/* Action button names */
+$lang['GT_Reset'] = 'Initialisation Ghost Tracker';
+// --------- End: New or revised $lang ---- from version 2.12.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.8
+/* Errors and Warnings */
+$lang['mail_exclusionlist_error'] = 'Attention ! Vous avez saisi un retour à la ligne en début de liste d\'exclusion des domaines de messagerie (affichée en rouge ci-dessous). Bien que ce retour à la ligne ne soit pas visible, il est tout de même présent et est susceptible de provoquer des dysfonctionnements du plugin. Veuillez resaisir votre liste d\'exclusion en veillant à ne pas commencer par un retour à la ligne.';
+// --------- End: New or revised $lang ---- from version 2.12.8
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.0
+/* UserList Tab */
+$lang['UserList_Title'] = 'Suivi des utilisateurs inscrits';
+$lang['Tab_UserList'] = 'Suivi des utilisateurs';
+// --------- End: New or revised $lang ---- from version 2.13.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.4
+$lang['uam_no_unlink'] = 'La fonction \'unlink\' n\'est pas disponible';
+$lang['uam_unlink_errors'] = 'Des erreurs ont eu lieu lors de la suppression des fichiers';
+/* Global Configuration Tab */
+$lang['Title_Tab'] = 'UserAdvManager - Version: ';
+$lang['SubTitle1'] = 'Configuration du plugin';
+$lang['Tab_Global'] = 'Configuration';
+$lang['UAM_Title1'] = 'Paramétrage des restrictions d\'inscriptions';
+$lang['UAM_Title2'] = 'Paramétrage des confirmations et validations d\'inscriptions';
+$lang['UAM_Title3'] = 'Paramétrage des suivis des inscrits et autres options';
+$lang['UAM_Title4'] = 'Astuces et exemples d\'utilisation';
+$lang['UAM_No_Casse'] = 'Noms d\'utilisateurs : Sensibilité à la casse';
+$lang['UAM_No_Casse_true'] = ' Activer';
+$lang['UAM_No_Casse_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_Username_Char'] = 'Noms d\'utilisateurs : Exclusion de certains caractères';
+$lang['UAM_Username_Char_true'] = ' Interdire les caractères:<br>(utiliser une virgule pour séparer chaque caractère du suivant)<br><br>';
+$lang['UAM_Username_Char_false'] = ' Tout autoriser (valeur par défaut)';
+$lang['UAM_Password_Enforced'] = 'Renforcement de la sécurité des mots de passe';
+$lang['UAM_Password_Enforced_true'] = ' Activer. Score minimum: ';
+$lang['UAM_Password_Enforced_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_AdminPassword_Enforced'] = 'Application aux administrateurs';
+$lang['UAM_AdminPassword_Enforced_true'] = ' Activer';
+$lang['UAM_AdminPassword_Enforced_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_PasswordTest'] = 'Mot de passe test: ';
+$lang['UAM_ScoreTest'] = 'Résultat: ';
+$lang['UAM_MailExclusion'] = 'Exclusion des domaines de messagerie';
+$lang['UAM_MailExclusion_true'] = ' Exclure les domaines suivants:<br>(utiliser une virgule pour séparer chaque domaine du suivant)';
+$lang['UAM_MailExclusion_false'] = ' Désactiver (valeur par défaut)';
+
+$lang['UAM_Mail_Info'] = 'Email d\'information à l\'utilisateur:';
+$lang['UAM_Mail_Info_true'] = ' Activer';
+$lang['UAM_Mail_Info_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_MailInfo_Text'] = ' Texte d\'accueil personnalisé:';
+$lang['UAM_Confirm_Mail'] = 'Confirmation d\'inscription:';
+$lang['UAM_Confirm_Mail_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_ConfirmMail_Text'] = ' Texte d\'accueil personnalisé:';
+$lang['UAM_Confirm_Group'] = 'Groupes de validation<br>(------- pour ne pas affecter de groupe)';
+$lang['UAM_Confirm_Status'] = 'Statuts de validation<br>(------- pour conserver la valeur par défaut de Piwigo)';
+$lang['UAM_Confirm_grpstat_notice'] = 'Attention : Il est conseillé d\'utiliser soit les groupes, soit les statuts de validation et pas les deux simultanément.';
+$lang['UAM_No_Confirm_Group'] = 'Pour les utilisateurs n\'ayant pas validé leur inscription<br>';
+$lang['UAM_Validated_Group'] = 'Pour les utilisateurs ayant validé leur inscription<br>';
+$lang['UAM_No_Confirm_Status'] = 'Pour les utilisateurs n\'ayant pas validé leur inscription<br>';
+$lang['UAM_Validated_Status'] = 'Pour les utilisateurs ayant validé leur inscription.<br>';
+$lang['UAM_ValidationLimit_Info'] = 'Limitation du délai de validation d\'inscription';
+$lang['UAM_ConfirmMail_TimeOut_true'] = ' Activer. Nombre de jours de délai: ';
+$lang['UAM_ConfirmMail_TimeOut_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_ConfirmMail_Remail'] = 'Mail de rappel aux inscrits non validés';
+$lang['UAM_ConfirmMail_Remail_true'] = ' Activer';
+$lang['UAM_ConfirmMail_Remail_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_ConfirmMail_ReMail_Txt1'] = 'Texte du message de rappel <b><u>avec</u></b> génération d\'une nouvelle clé de validation.';
+$lang['UAM_ConfirmMail_ReMail_Txt2'] = 'Texte du message de rappel <b><u>sans</u></b> génération d\'une nouvelle clé de validation.';
+
+$lang['UAM_GhostTracker'] = 'Gestion des visiteurs fantômes (Ghost Tracker)';
+$lang['UAM_GhostTracker_true'] = ' Activer. Nombre de jours maximum entre deux visites: ';
+$lang['UAM_GhostTracker_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_GhostTracker_ReminderText'] = 'Texte de rappel personnalisé';
+$lang['UAM_LastVisit'] = ' Suivi des utilisateurs inscrits';
+$lang['UAM_LastVisit_true'] = ' Activer';
+$lang['UAM_LastVisit_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_No_Comment_Anonymous'] = 'Commentaires : pseudo obligatoire pour les non-inscrits';
+$lang['UAM_No_Comment_Anonymous_true'] = ' Activer';
+$lang['UAM_No_Comment_Anonymous_false'] = ' Désactiver (valeur par défaut)';
+
+$lang['UAM_Tips1'] = 'Inscriptions avec validation par email et message d\'avertissement sur la page d\'accueil de Piwigo';
+
+$lang['Tab_UserManager'] = 'Suivi des validations';
+
+/* UserManager Tab */
+$lang['SubTitle3'] = 'Suivi des validations';
+$lang['UserManager_Title'] = 'Suivi des validations';
+/* Ghost Tracker Tab */
+$lang['SubTitle4'] = 'Ghost Tracker';
+$lang['GT_Init'] = 'Initialisation du Ghost Tracker';
+$lang['GhostTracker_Title'] = 'Gestion des visiteurs fantômes';
+$lang['UAM_GhostTracker_Init'] = 'A première activation de cette fonction, ou à sa réactivation après une longue période pendant laquelle de nouveaux visiteurs se sont inscrits, il convient d\'initialiser ou de réinitialiser le Ghost Tracker. Cette action n\'est à faire qu\'une seule fois après activation ou réactivation de l\'option; à cet effet, cliquez <u>une seule fois</u> sur le bouton d\'initialisation ci-dessous.</b>';
+/* UserList Tab */
+$lang['SubTitle5'] = 'Informations sur les utilisateurs';
+/* Mailing */
+$lang['Add of %s'] = 'Profil créé pour %s';
+$lang['Update of %s'] = 'Mise à jour du profil de %s';
+/* Mailing */
+$lang['Ghost_reminder_of_%s'] = '%s, ceci est un email de rappel.';
+$lang['Reminder_with_key_of_%s'] = '%s, votre clef de validation a expiré';
+$lang['Reminder_without_key_of_%s'] = '%s, votre clef de validation va expirer';
+/* Errors and Warnings */
+$lang['Err_GhostTracker_Settings'] = 'Cette page n\'est accessible que si "Gestion des visiteurs fantômes" est actif dans "Paramétrage des suivis des inscrits et autres options".';
+$lang['Err_Userlist_Settings'] = 'Cette page n\'est accessible que si le "Suivi des utilisateurs inscrits" est actif dans "Paramétrage des suivis des inscrits et autres options".';
+// --------- End: New or revised $lang ---- from version 2.13.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_AdminConfMail'] = 'Validation d\'inscription pour les admins';
+$lang['UAM_Admin_ConfMail_true'] = ' Activer';
+$lang['UAM_Admin_ConfMail_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_Tips1_txt'] = '
+          <ul>
+            <li>
+            Objectifs:<br>
+            - A son arrivée sur la galerie : Informer le visiteur qu\'il peut s\'inscrire pour accéder aux photos privées<br>
+            - A l\'inscription : Générer un email avec lien direct de validation, informer le nouvel utilisateur de sa non-validation et le rattacher au groupe "Attente"<br>
+            - A la validation : Le passer automatiquement du groupe "Attente" au groupe "Validés", qui lui permet d\'accéder normalement aux catégories privées<br><br>
+            <b>Rappel: En fonctionnement standard, le "Guest" ne voit que les catégories publiques, sans message d\'information.</b>
+            </li><br><br>
+            <li>
+Pré-requis:<br>
+- Une galerie avec tout ou partie des catégories privées, visibles par les seuls utilisateurs inscrits<br>
+- Au moins les 2 groupes d\'utilisateurs Piwigo suivants : "Attente", sans aucune permission sur les catégories privées, et "Validés", avec toutes les permissions sur les catégories privées<br>
+- Le plugin UAM<br>
+- Le plugin PWG Stuffs, pour l\'ajout d\'un module de type "Bloc personnel"<br>
+- En option, le plugin Extended Description, pour le support multi-langues<br>
+            </li><br><br>
+            <li>
+Réalisation:<br><br>
+A. Dans le plugin UAM:<br>
+              <ol>
+                <li>Activer la confirmation d\'inscription</li>
+                <li>Saisir un "texte d\'accueil personnalisé" qui sera joint au mail de confirmation d\'inscription. Si le plugin Extended Description est activé, les balises de langues peuvent être utilisées</li>
+                <li>Sélectionner le groupe "Attente" à la rubrique "Pour les utilisateurs n\'ayant pas validé leur inscription"</li>
+                <li>Sélectionner le groupe "Validés" à la rubrique "Pour les utilisateurs ayant validé leur inscription"</li>
+                <li>Enregistrer la configuration du plugin</li>
+              </ol>
+<br>
+B. Dans le plugin PWG Stuffs:<br>
+              <ol>
+                <li>Ajouter un nouveau module de type "Bloc personnel : Affiche un bloc personnel (un édito par exemple)"</li>
+                <li>Configurer le module, en indiquant son titre (ex : "Inscription en attente de validation") et sa description, et cocher uniquement "Attente" dans la liste des groupes autorisés</li>
+                <li>Compléter le contenu du module avec le texte du message d\'information qui sera affiché aux utilisateurs non validés. Comme dans UAM, les balises de langues peuvent être utilisées si le plugin Extended Description est activé</li>
+                <li>Cocher "Afficher le module sur la page d\'accueil du site"</li>
+                <li>Valider la configuration du module</li>
+              </ol>
+            </li>
+          </ul>';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom_Txt1'] = 'Texte de la page de confirmation - Confirmation acceptée';
+$lang['UAM_confirmmail_custom_Txt2'] = 'Texte de la page de confirmation - Confirmation rejetée';
+$lang['LastVisit_Date'] = 'Dernière visite le';
+$lang['Nb_Days'] = 'Ecart en jours';
+$lang['Err_UserManager_Settings'] = 'Cette page n\'est accessible que si "Confirmation d\'inscription" est actif et si un groupe de visiteurs non validés est configuré dans le "Paramétrage des confirmations et validations d\'inscriptions".';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.1
+$lang['reg_err_mail_address_dbl'] = 'Cette adresse email est déjà utilisée.';
+$lang['UAM_Support_txt'] = 'Le support officiel sur ce plugin se fait exclusivement sur ces fils du forum Piwigo:<br>
+<a href="http://fr.piwigo.org/forum/viewtopic.php?id=12775" onclick="window.open(this.href);return false;">Forum français - http://fr.piwigo.org/forum/viewtopic.php?id=12775</a>
+<br>ou<br>
+<a href="http://piwigo.org/forum/viewtopic.php?id=15015" onclick="window.open(this.href);return false;">Forum anglais - http://piwigo.org/forum/viewtopic.php?id=15015</a><br><br>
+Egalement disponible, le bugtracker du projet: <a href="http://piwigo.org/bugs/" onclick="window.open(this.href);return false;">http://piwigo.org/bugs/</a>';
+// --------- End: New or revised $lang ---- from version 2.15.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['Force_Validation'] = 'Validation manuelle';
+$lang['UAM_Confirm_Mail_true'] = ' Activer - Validation par le visiteur';
+$lang['UAM_Confirm_Mail_local'] = ' Activer - Validation par l\'administrateur (pas d\'envoi de clé de validation)';
+$lang['UAM_RedirToProfile'] = 'Redirection vers la page "Personnalisation"';
+$lang['UAM_RedirToProfile_false'] = ' Désactiver (valeur par défaut)';
+$lang['UAM_RedirToProfile_true'] = ' Activer';
+// --------- End: New or revised $lang ---- from version 2.15.4
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/description.txt
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/description.txt	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/description.txt	(revision 7001)
@@ -0,0 +1,1 @@
+Aumenta le possibilità di gestione degli utenti
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/help/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/help/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/help/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/help/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/help/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/help/plugin.lang.php	(revision 7001)
@@ -0,0 +1,187 @@
+<?php
+global $lang;
+
+$lang['UAM_restricTitle'] = 'Restrizioni per le iscrizzioni';
+$lang['UAM_confirmTitle'] = 'Confirmazzione e validazione delle iscrizzioni';
+$lang['UAM_confirmTitle_d'] = '
+- Generazzione di un\'Email d\'informazione<br>
+- Generazzione di un\'Email di conferma d\'iscrizzione<br>
+- Inserimento in automatico dei gruppi / statuti<br>
+- Limitazzione del termine di convalida dell\'iscrizzione<br>
+- Generazzione di un\'Email di rilancio per gli utenti non convalidati<br>
+...
+';
+$lang['UAM_miscTitle'] = 'Monitoraggio degli utenti registrati e altre opzioni';
+$lang['UAM_miscTitle_d'] = '
+- Gestione degli ospiti fantasmi<br>
+- Monitoraggio degli utenti registrati<br>
+- Pseudo obbligatorio per i commenti degli ospiti<br>
+...
+';
+$lang['UAM_casenTitle'] = 'Pseudo: Sensibilità maiuscole/minuscole';
+$lang['UAM_carexcTitle'] = 'Pseudo: Esclusione di caratteri';
+$lang['UAM_carexcTitle_d'] = 'Può essere interessante vietare certi caratteri per i pseudo (ad esempio: negare login contenente &quot;@&quot;). Questa opzione permette di escludere i caratteri o sequenza di caratteri, eventi.<br>
+NB: L\'opzione può anche escludere parole intere.
+<br><br>
+<b style=&quot;color: red;&quot;>Attenzione: questa opzione non ha alcun effetto sui pseudo creati prima della sua attivazione.</b>';
+$lang['UAM_passwTitle'] = 'Rafforzare il livello di sicurezza delle password';
+$lang['UAM_passwTitle_d'] = 'L\'attivazione di questa opzione rende obbligatorio l\'inserimento di una password al momento della registrazione, e richiede la password scelta dal visitatore di incontrare un livello minimo di complessità. Se la soglia non viene raggiunta, il punteggio conseguito e il punteggio minimo da raggiungere sono visualizzate, insieme con raccomandazioni per aumentare il valore di questa partitura.<br><br>
+Non vi è prova in campo per misurare la complessità di una password, e può permettersi di avere un\'idea del punteggio per definire personalizzati complessi.<br><br>
+Nota: Il punteggio di una password è calcolato sulla base di diversi parametri: la lunghezza, il tipo di caratteri utilizzati (lettere, numeri, lettere maiuscole, minuscole, caratteri speciali). Un punteggio inferiore a 100 è considerata bassa, da 100 a 500, la complessità è nella media, oltre 500, la sicurezza è eccellente.';
+$lang['UAM_passwtestTitle'] = 'Prova la complessità di una password';
+$lang['UAM_passwtestTitle_d'] = 'Inserisci la password per testare e quindi fare clic su &quot;calcolo del punteggio&quot;, per vedere il risultato.';
+$lang['UAM_passwadmTitle'] = 'Applicando agli amministratori';
+$lang['UAM_passwadmTitle_d'] = 'Un amministratore può creare un\'pseudo con o senza l\'applicazione della regola della complessità di calcolo.<br><br>
+Nota: Se l\'account utente creato vuole cambiare la password e il rafforzamento password per gli utenti è attivo, sarà soggetta alla regola.';
+$lang['UAM_mailexcTitle'] = 'L\'esclusione Email domini';
+$lang['UAM_infomailTitle'] = 'E-mail informazioni per l\'utente';
+$lang['UAM_infomailTitle_d'] = 'Questa opzione consente di automatizzare l\'invio di una e-mail le informazioni a un utente al momento della registrazione o quando cambia la sua password o indirizzo e-mail nel loro profilo.<br><br>
+Il contenuto del messaggio inviato è composto da una parte personalizzabile di introdurre una piccola nota di benvenuto e una parte fissa che indica il login, password e indirizzo di posta elettronica dell\'utente.';
+$lang['UAM_infotxtTitle'] = 'Personalizzazione e-mail informazioni';
+$lang['UAM_infotxtTitle_d'] = 'Inserisci il testo introduttivo che si desidera visualizzare nella e-mail informazioni.<br><br>
+Per utilizzare più lingue, è possibile utilizzare i tag del plugin Extended Description, se esso è attivo.<br><br>
+<b style=&quot;color: red;&quot;>Modifica del testo &egrave; disponibile solo se &quot;E-mail informazioni per l\'utente&quot; &egrave; attivata.</b>';
+/* TODO */$lang['UAM_confirmtxtTitle'] = 'Customizing the confirmation email';
+/* TODO */$lang['UAM_confirmtxtTitle_d'] = 'Enter the introductory text that you want to appear in the email confirmation of registration.<br><br>
+Per utilizzare più lingue, è possibile utilizzare i tag del plugin Extended Description, se esso è attivo.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if the &quot;Confirmation of registration&quot; is enabled.</b>';
+/* TODO */$lang['UAM_confirmgrpTitle'] = 'Validation Groups';
+/* TODO */$lang['UAM_confirmgrpTitle_d'] = '<b style=&quot;color: red;&quot;>WARNING : Using validation groups requires that you have created at least one users group and is defined &quot;by default&quot; in Piwigo\'s user groups management.</b><br><br>
+The groups are validated for use in conjunction with the &quot;Confirmation of registration&quot;';
+/* TODO */$lang['UAM_confirmstatTitle'] = 'Validation Statutes';
+/* TODO */$lang['UAM_confirmstatTitle_d'] = '<b style=&quot;color: red;&quot;>WARNING : The use of status validation requires that you have kept the &quot;Guest&quot; user with default setting (as user template) for new registered. Note you can set any other user as a template for new registered. Please refer to the Piwigo\'s documentation for more details.</b><br><br>
+The groups are validated for use in conjunction with the &quot;Confirmation of registration&quot;';
+/* TODO */$lang['UAM_validationlimitTitle'] = 'Deadline for registration validation limited';
+/* TODO */$lang['UAM_validationlimitTitle_d'] = 'This option allows to limit the validity of key validation email sent to new registrants. Visitors who register will have x days of time to validate their registration. After this period the validation link will expire.<br><br>
+This option is used in conjunction with the &quot;Confirmation of registration&quot;';
+/* TODO */$lang['UAM_remailTitle'] = 'Remind unvalidated users';
+/* TODO */$lang['UAM_remailTitle_d'] = 'This option allows you to send a reminder email to users registered but have not validated their registration on time. It therefore works in conjunction with the &quot;Confirmation of registration&quot;<br><br>
+2 types of emails can be sent: With or without regeneration of the validation key. As appropriate, the content of emails can be customized.<br><br>
+Refer to the &quot;Tracking validations&quot; tab.';
+/* TODO */$lang['UAM_remailtxt1Title'] = 'Reminder email with new key generated';
+/* TODO */$lang['UAM_remailtxt1Title_d'] = 'Enter the introductory text that you want to appear in the reminder email, in addition to the validation key regenerated.<br><br>
+If left blank, the mail reminder will include only the validation link. It is therefore strongly advised to take a little explanatory text. (NB: The text pre-filled with the installation of the plugin is provided as an example)<br><br>
+Per utilizzare più lingue, è possibile utilizzare i tag del plugin Extended Description, se esso è attivo.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if &quot;Remind unvalidated users&quot; is enabled.</b>';
+/* TODO */$lang['UAM_remailtxt2Title'] = 'Reminder email without new key generated';
+/* TODO */$lang['UAM_remailtxt2Title_d'] = 'Enter the introductory text that you want to appear in the reminder email without a validation key regenerated.<br><br>
+If left blank, the mail reminder will be empty. It is therefore strongly advised to take a little explanatory text. (NB: The text pre-filled with the installation of the plugin is provided as an example)<br><br>
+Per utilizzare più lingue, è possibile utilizzare i tag del plugin Extended Description, se esso è attivo.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if &quot;Remind unvalidated users&quot; is enabled.</b>';
+/* TODO */$lang['UAM_ghosttrackerTitle'] = 'Ghost visitors management';
+/* TODO */$lang['UAM_ghosttrackerTitle_d'] = 'Also called &quot;Ghost Tracker&quot;, when this function is activated, you can manage your visitors depending on the frequency of their visits. When the time between 2 visits is reaches, the visitor in question appears in the &quot;Ghost Tracker&quot; table where you will be able to remind visitors via email.<br><br>
+<b style=&quot;color: red;&quot;>If you enable this feature for the first time or you have reactivated after a long period off during which new visitors are registered, you must initialize or reset the Ghost Tracker.</b>';
+/* TODO */$lang['UAM_gttextTitle'] = 'Ghost Tracker\'s reminder message';
+/* TODO */$lang['UAM_gttextTitle_d'] = 'Enter the text you want to appear in the email reminder to prompt the user to return to visit your gallery (NB: The text pre-filled with the installation of the plugin is provided as an example).<br><br>
+Per utilizzare più lingue, è possibile utilizzare i tag del plugin Extended Description, se esso è attivo.<br><br>
+<b style=&quot;color: red;&quot;>The text modifiying is available only if &quot;Ghost visitors management&quot; is enabled.</b>';
+/* TODO */$lang['UAM_lastvisitTitle'] = 'Tracking registered users';
+/* TODO */$lang['UAM_lastvisitTitle_d'] = 'This activates a table in the &quot;Tracking users&quot; tab which are registered users listed on the gallery and the date of their last visit and time spent (in days) since their last visit. Monitoring is purely informative for the administrator of the gallery.';
+/* TODO */$lang['UAM_commentTitle'] = 'Nickname mandatory for guests comments';
+/* TODO */$lang['UAM_commentTitle_d'] = 'If &quot;Comments for All&quot; is active (authority to unregistered visitors to post comments), this option allows to force the non-registered visitor to enter a nickname that the comment is accepted.';
+/* TODO */$lang['UAM_tipsTitle'] = 'Tips and Examples';
+/* TODO */$lang['UAM_tipsTitle_d'] = 'Tips and various examples of use';
+/* TODO */$lang['UAM_userlistTitle'] = 'Tracking users';
+/* TODO */$lang['UAM_usermanTitle'] = 'Tracking validations';
+/* TODO */$lang['UAM_gtTitle'] = 'Ghost visitors management';
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_adminconfmailTitle'] = 'Conferma della registrazione per gli amministratori';
+$lang['UAM_adminconfmailTitle_d'] = '&Egrave; possibile disattivare la convalida solo per gli account utente creato dall\'amministratore Piwigo tramite l\'interfaccia di gestione di utenti.<br><br>
+Attivando questa opzione, la convalida e-mail di registrazione verr&agrave; inviato ad ogni utente creato da admin.<br><br>
+Disabilitando questa opzione ((predefinito)), solo le informazioni e-mail viene inviata (se &quot;E-mail informazioni per l\'utente&quot; &egrave; abilitato).';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+/*TODO*/$lang['UAM_confirmmail_custom1'] = 'Text of the confirmation page - Confirmation accepted';
+/*TODO*/$lang['UAM_confirmmail_custom1_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>acceptance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+/*TODO*/$lang['UAM_confirmmail_custom2'] = 'Text of the confirmation page - Confirmation rejected';
+/*TODO*/$lang['UAM_confirmmail_custom2_d'] = 'When the option &quot;Confirmation of registration&quot; is active, this field allows you to customize the <b><u>rejectance text</u></b> on the registration confirmation page displayed when user clicks the confirmation link that was received by email.<br>
+After installing the plugin, a standard text is set as an example.<br>
+This field is compatible with the FCK Editor and, for multi-languages, you can use the tags [lang] of the plugin Extended description if it\'s active.<br>
+<b style=&quot;color:red;&quot;>Changing the text is possible ONLY if &quot;Confirmation of registration&quot; is activated.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.2
+$lang['UAM_casenTitle_d'] = 'Di default, Piwigo è sensibile alle minuscole e maiuscole e vengono considerate come diverse lettere nei pseudo scelti dagli utenti al momento dell\'iscrizzione. E dunque &quot;Pippo&quot;, &quot;pippo&quot; e &quot;PIPPO&quot; possono essere 3 diversi utenti.<br><br>
+L\'attivazione di questa opzione permette di considerare &quot;Pippo&quot;, &quot;pippo&quot;, &quot;PIPPO&quot;, ... come un\'solo utente. Se &quot;pippo&quot; esiste già, creare un nuovo pseudo &quot;Pippo&quot; risulterà impossibile.<br><br>
+<b style=&quot;color: red&quot;>Attenzione: questa opzione non ha alcun effetto sui pseudo creati prima della sua attivazione.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+$lang['UAM_restricTitle_d'] = '
+- Caratteri vietati nei nomi degli utenti<br>
+- Rafforzare il livello di sicurezza delle password<br>
+- Esclusione dei domini d\'Email<br>
+...
+';
+/* TODO */$lang['UAM_userlistTitle_d'] = 'This page is for information to the administrator. It displays a list of all users registered on the gallery showing the date and number of days since their last visit. The list is sorted in ascending order of number of days.
+<br><br>
+<b><u>Only when the Ghost Tracker is active</u></b>, the number of days without a visit appears as the following color code, according to the maximum set in the Ghost Tracker options:
+<br>
+- <b style=&quot;color: lime;&quot;>Green</b> : When the user has visited the gallery <b style=&quot;color: lime;&quot;><u>less than 50%</u></b> of the maximum indicated in the Ghost Tracker.<br>
+- <b style=&quot;color: orange;&quot;>Orange</b> : When the user has visited the gallery <b style=&quot;color: orange;&quot;><u> between 50% and 99% </u></b> of the maximum indicated in the Ghost Tracker.<br>
+- <b style=&quot;color: red;&quot;>Red</b> : When the user has visited the gallery <b style=&quot;color: red;&quot;><u>for more than 100%</u></b> of the maximum indicated in the Ghost Tracker. <b><u>In this case, the user must also appear in the Ghost Tracker table.</u></b><br>
+<br>
+Example :
+<br>
+The maximum period of Ghost Tracker is configured to 100 days.
+<br>
+A user will appear in green if he visited the gallery for less than 50 days, in orange if his last visit took place between 50 and 99 days and red for 100 days and above.
+<br><br>
+<b>NOTE</b>: The list does not display who have not validated their registration (if the option of validating the registration is activated). These users are then managed in a special way in the &quot;Tracking validations&quot; tab.
+<br><br>
+<b>Table Sorting Function</b>: You can sort the data displayed by clicking on the column headers. Hold the SHIFT key to sort up to 4 simultaneous columns.';
+/* TODO */$lang['UAM_usermanTitle_d'] = 'When limiting the deadline for registration is enabled, you will find below the list of users whose validation registration is expected, <b style=&quot;text-decoration: underline;&quot;>whether or not</b> they are in time to validate.<br><br>
+The registration date is displayed in green when the user concerned is below the time limit to validate his registration. In this case, the validation key is still valid and we can send an email with or without a new validation key.<br><br>
+When the registration date appears in red, the validation period has expired. In this case, you must send an email with regeneration of validation key if you want to enable the user to validate their registration.<br><br>
+In all cases, it is possible to manually force the validation.<br><br>
+In this view, you can:
+<br><br>
+- Manually delete accounts <b>(manual drain)</b>
+<br>
+- Generate email reminder <b>without</b> generating a new key. Warning: Send an email reminder to targeted visitors. This function does not reset the date of registration of targeted visitors and the timeout is still valid.
+<br>
+- Generate email reminder <b>with</b> generating a new key. Warning : Send an email reminder to targeted visitors. This function also resets the date of registration of targeted visitors which equates to extend the deadline for validation.
+<br>
+- Submit a registration awaiting validation manually even if the expiry date has passed <b>(forcing validation)</b>.
+<br><br>
+<b>Table Sorting Function</b>: You can sort the data displayed by clicking on the column headers. Hold the SHIFT key to sort up to 4 simultaneous columns.';
+/* TODO */$lang['UAM_gtTitle_d'] = 'When Ghost Tracker is enabled and initialized, you will find below the list of registered visitors who have not returned since x days. &quot;x&quot; is the number of days configured in the General Setup tab. In addition, you will find a column indicating whether an email reminder has been sent to targeted visitors. So, you can see at a glance and treat visitors who have not taken account of the reminder.<br><br>In this view, you can:
+<br><br>
+- Manually delete accounts <b>(manual drain)</b>
+<br>
+- Generate email reminder <b>with resetting the last visit date</b>. This allows to give a wildcard to targeted visitors. If the visitor has already received a reminder, nothing prevents to resent a new mail which will reset again, in fact, the last visit date.
+<br><br>
+<b>Table Sorting Function</b>: You can sort the data displayed by clicking on the column headers. Hold the SHIFT key to sort up to 4 simultaneous columns.';
+$lang['UAM_confirmmailTitle'] = 'Conferma della registrazione';
+/*TODO*/$lang['UAM_confirmmailTitle_d'] = 'This option allows a user to either confirm registration by clicking on a link received in an email sent upon registration or the administrator to manually activate the registration.<br><br>
+In first case, the e-mail is composed of a customizable part to introduce a little welcome note and a fixed part containing the activation link that is generated from a random key that can possibly regenerate through the &quot;Tracking validations&quot; tab.<br><br>
+Dans le premier cas, le message envoyé comprend une partie fixe, avec le lien d\'activation généré à partir d\'une clef aléatoire (cette clé peut éventuellement être régénérée via l\'onglet &quot;Suivi des validations&quot;), et une partie personnalisable par un texte d\'accueil.
+<br><br>
+Questa opzione &egrave; generalmente utilizzato con l\'assegnazione automatica di gruppo e / o statuto. Ad esempio, un utente che non ha convalidato la loro registrazione sar&agrave; ambientato in un gruppo specifico di utenti (con o senza le restrizioni alla galleria), mentre un utente che ha convalidato la sua registrazione &egrave; fissato in un &quot;normale&quot; del gruppo.';
+/*TODO*/$lang['UAM_RedirTitle'] = 'Redirect to &quot;Customization&quot; page';
+// --------- End: New or revised $lang ---- from version 2.15.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.6
+/*TODO*/$lang['UAM_RedirTitle_d'] = 'This option automatically redirect a registered user to his customization page only at his first connection to the gallery.<br><br>
+Please note: This feature does not apply to all registered users. Those with &quot;admin&quot;, &quot;webmaster&quot; or &quot;generic&quot; status are excluded.';
+// --------- End: New or revised $lang ---- from version 2.15.6
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.7
+$lang['UAM_mailexcTitle_d'] = 'Per impostazione predefinita, PhpWebGallery accetta tutti gli indirizzi di posta elettronica nel xxx@yyy.zz formato. L\'attivazione di questa opzione consente di escludere determinati domini nel formato: @[nome_dominio].[Domain_extension].<br><br>
+Esempi :<br>
+@hotmail.com -> esclusi gli indirizzi *@hotmail.com<br>
+@hotmail -> escludendo tutti gli indirizzi *@hotmail*
+<br><br>
+<b style=&quot;color: red;&quot;>Il sequestro è possibile solo dopo la registrazione della facoltà in posizione attiva.</b>';
+// --------- End: New or revised $lang ---- from version 2.15.7
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/plugin.lang.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/plugin.lang.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/language/it_IT/plugin.lang.php	(revision 7001)
@@ -0,0 +1,273 @@
+<?php
+
+global $lang,$conf;
+
+$conf_UAM = unserialize($conf['UserAdvManager']);
+
+
+/* UserManager Tab */
+$lang['Registration_Date'] = 'Data d\'iscrizione';
+
+
+/* Mailing */
+$lang['infos_mail %s'] = '%s, di seguito i vostri dati per accedere alla galleria:';
+$lang['User: %s'] = 'Utente: %s';
+$lang['Password: %s'] = 'Password: %s';
+$lang['Link: %s'] = 'Cliccare su questo link per confermare la vostra iscrizzione: %s';
+
+
+/* Email confirmation page */
+$lang['title_confirm_mail'] = 'Confermare la vostra iscrizzione';
+$lang['confirm_mail_page_title'] = 'Confermare l\'iscrizzione';
+$lang['confirm_mail_ok'] = '<br><br><br>Grazie per aver confermato il vostro indirizzo Email e per l\'iscrizione sulla galleria. Buona visione!<br><br><br><br>';
+
+
+/* Errors and Warnings */
+$lang['UAM_audit_ok'] = 'Audit OK';
+$lang['Err_audit_no_casse'] = '<b>Questi conti sono identici (escluso maiuscola/minuscola):</b> ';
+$lang['Err_audit_username_char'] = '<b>Questo conto utente utilizza uno o più caratteri vietati:</b> ';
+$lang['Err_audit_email_forbidden'] = '<b>Questo conto utente usa un dominio d\'Email proibito:</b> ';
+$lang['Err_audit_advise'] = '<b>Dovete eseguire delle correzioni per rispettare le nuove impostazzioni che avete attivato.<br> Utilizzare un programma per la gestione della base dati per correggere i conti utente direttamente nella tabella ###_USERS';
+$lang['UAM_Empty Author'] = 'Il campo autore deve essere riempito per potere inviare un commento.';
+$lang['reg_err_login5'] = 'Nome utente esiste già. Attenzione : il campo è insensibile alle maiuscole/minuscole.';
+$lang['reg_err_login6'] = 'Nome utente non deve contenere in caratteri seguenti: ';
+$lang['reg_err_login7'] = 'Il tuo provider di posta usa dominio d\'Email proibito. I domini preibiti sono i seguenti: ';
+$lang['UAM_empty_pwd'] = '[password vuota]';
+$lang['UAM_no_update_pwd'] = '[profilo aggiornato senza modifica della password]';
+$lang['invalid_pwd'] = 'Nome utente o password non validi!';
+$lang['No_validation_for_Guest'] = 'Il conto "Guest" non è soggetto a convalida';
+$lang['No_validation_for_default_user'] = 'Il conto di default non è soggetto a convalida';
+$lang['No_validation_for_Webmaster'] = 'Il conto del "Webmaster" non è soggetto a convalida';
+$lang['No_validation_for_your_account'] = 'Il tuo conto amminstratore non è soggetto a convalida';
+$lang['Database_Error'] = '<b><u>Attenzione! Errore di integrità critico nella base dati.</u></b><br><br>Si prega di verificare l\'integrità della tabella #_user_confirm_mail.';
+
+
+/* Processing messages */
+$lang['%d_Mail_With_Key'] = '%d messaggio con il rinnovo della chiave è stato inviato';
+$lang['%d_Mails_With_Key'] = '%d messaggi con il rinnovo della chiave sono stati inviati';
+$lang['%d_Reminder_Sent'] = '%d Email di rilancio è stato inviato';
+$lang['%d_Reminders_Sent'] = '%d Email di rilancio sono stati inviati';
+$lang['%d_Validated_User'] = '%d utente convalidato manualmente';
+$lang['%d_Validated_Users'] = '%d utenti convalidati manualmente';
+
+
+/* Action button names */
+$lang['Delete_selected'] = 'Cancellare';
+$lang['Mail_without_key'] = 'Email di rilancio senza chiave';
+$lang['Mail_with_key'] = 'Email di rilancio con chiave';
+
+
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.0 and 2.12.1
+/* Global Configuration Tab */
+$lang['PasswordTest'] = 'Calcolo del punteggio';
+/* Ghost Tracker Tab */
+$lang['Tab_GhostTracker'] = 'GhostTracker';
+$lang['Reminder'] = 'Email di rilancio';
+$lang['Reminder_Sent_OK'] = 'SI';
+$lang['Reminder_Sent_NOK'] = 'NO';
+/* Errors and Warnings */
+$lang['UAM_save_config'] ='Configurazione salvata.';
+$lang['reg_err_login3'] = 'Sicurezza: La password è obbligatoria!';
+$lang['reg_err_login4_%s'] = 'Sicurezza: un sistema di controllo calcola un punteggio basandosi sulla complessità della password scelta. La complessità della password è troppo bassa (punteggio = %s). Si prega di scegliere una nuova password più sicura seguendo queste regole:<br>
+- Utilizzare delle lettere e dei numeri<br>
+- Usare delle maiuscole e delle minuscole<br>
+- Aumentare la lunghezza (numero di caratteri)<br>
+Il punteggio minimo richiesto dall\'amministratore per la password è di : ';
+$lang['No_reminder_for_Guest'] = 'Il conto utente "Guest" non è soggetto a ricevere dei promemoria dal GhostTracker';
+$lang['No_reminder_for_default_user'] = 'Il conto utente di default non è soggetto a ricevere dei promemoria dal GhostTracker';
+$lang['No_reminder_for_Webmaster'] = 'Il conto utente "Webmaster" non è soggetto a ricevere dei promemoria dal GhostTracker';
+$lang['No_reminder_for_your_account'] = 'Il tuo conto amministratore non è soggetto a ricevere dei promemoria dal GhostTracker';
+/* Action button names */
+$lang['audit'] = 'Audit delle impostazioni';
+$lang['submit'] = 'Salvare le impostazioni';
+// --------- End: New or revised $lang ---- from version 2.12.0 and 2.12.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.2
+/* Errors and Warnings */
+$lang['GhostTracker_Init_OK'] = 'Inizzializzazione GhostTracker eseguita!';
+/* Action button names */
+$lang['GT_Reset'] = 'Reset del GhostTracker';
+// --------- End: New or revised $lang ---- from version 2.12.2
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.12.8
+/* Errors and Warnings */
+$lang['mail_exclusionlist_error'] = 'Attenzione! Avete inserito una nuova riga all\'inizio dell\'elenco d\'esclusione Email (indicato in rosso qui sotto). Anche se questa nuova riga non è visibile, con la sua presenza potrebbe causare delle disfunzioni del plugin. Si prega di cancellare la riga vuota.';
+// --------- End: New or revised $lang ---- from version 2.12.8
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.0
+/* UserList Tab */
+$lang['UserList_Title'] = 'Monitoraggio degli utenti registrati';
+// --------- End: New or revised $lang ---- from version 2.13.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.13.4
+$lang['uam_no_unlink'] = 'La funzione \'unlink\' non è disponibile';
+$lang['uam_unlink_errors'] = 'Si sono verificati errori durante la cancellzione di file';
+/* Global Configuration Tab */
+$lang['Title_Tab'] = 'UserAdvManager - Versione: ';
+$lang['SubTitle1'] = 'Configurazione dei plugin';
+$lang['Tab_Global'] = 'Configurazione';
+$lang['UAM_Title1'] = 'Impostare le restrizioni per le registrazioni';
+$lang['UAM_Title2'] = 'Impostare le conferme e validazioni all\'iscrizione';
+$lang['UAM_Title3'] = 'Impostare le registrazioni seguite e altre opzioni';
+$lang['UAM_Title4'] = 'Suggerimenti ed esempi d\'utilizzo';
+$lang['UAM_No_Casse'] = 'Nome utente: Sensibile alle maiusc/minusc';
+$lang['UAM_No_Casse_true'] = ' Attivare';
+$lang['UAM_No_Casse_false'] = ' Disattivare (di default)';
+$lang['UAM_Username_Char'] = 'Nome utente: Esclusione di certi caratteri';
+$lang['UAM_Username_Char_true'] = ' Vietare i caratteri:<br>(Usare una virgola per separare ogni carattere)<br><br>';
+$lang['UAM_Username_Char_false'] = ' Autorizzare tutti (di default)';
+$lang['UAM_Password_Enforced'] = 'Rafforzare il livello di sicurezza delle password';
+$lang['UAM_Password_Enforced_true'] = ' Attivare. Punteggio minimo: ';
+$lang['UAM_Password_Enforced_false'] = ' Disattivare (di default)';
+$lang['UAM_AdminPassword_Enforced'] = 'Applicare agli amministratori';
+$lang['UAM_AdminPassword_Enforced_true'] = ' Attivare';
+$lang['UAM_AdminPassword_Enforced_false'] = ' Disattivare (di default)';
+$lang['UAM_PasswordTest'] = 'Password di prova: ';
+$lang['UAM_ScoreTest'] = 'Risultato: ';
+$lang['UAM_MailExclusion'] = 'Esclusione dei domini d\'Email';
+$lang['UAM_MailExclusion_true'] = ' Escludi i seguenti domini:<br>(Utilizzare una virgola per separare ogni dominio)';
+$lang['UAM_MailExclusion_false'] = ' Disattivare (di default)';
+
+$lang['UAM_Mail_Info'] = 'Email d\'informazione per l\'utente:';
+$lang['UAM_Mail_Info_true'] = ' Attivare';
+$lang['UAM_Mail_Info_false'] = ' Disattivare (di default)';
+$lang['UAM_MailInfo_Text'] = ' Personalizzare il testo dell\'Email:';
+$lang['UAM_Confirm_Mail'] = 'Conferma dell\'iscrizione:';
+$lang['UAM_Confirm_Mail_false'] = ' Disattivare (di default)';
+$lang['UAM_ConfirmMail_Text'] = ' Personalizzare il testo dell\'Email di conferma:';
+$lang['UAM_Confirm_grpstat_notice'] = 'ATTENZIONE: Si consiglia di utilizzare o il gruppo o lo statuto di convalida ma non entrambi simultaneamente.';
+$lang['UAM_Confirm_Group'] = 'Gruppi di convalida<br>(------- per non assegnare nessun gruppo)';
+$lang['UAM_Confirm_Status'] = 'Convalida Statuti<br>(Invia ------- per mantenere il valore di default di Piwigo)';
+$lang['UAM_No_Confirm_Group'] = 'Gruppo per gli utenti che non hanno convalidato la loro iscrizione<br>';
+$lang['UAM_Validated_Group'] = 'Gruppo per gli utenti che hanno convalidato la loro iscrizione<br>';
+$lang['UAM_No_Confirm_Status'] = 'Stato per gli utenti che non hanno convalidato la loro iscrizione<br>';
+$lang['UAM_Validated_Status'] = 'Stato per gli utenti che hanno convalidato la loro iscrizione<br>';
+$lang['UAM_ValidationLimit_Info'] = 'Termine per la validazione dell\'iscrizione limitato';
+$lang['UAM_ConfirmMail_TimeOut_true'] = ' Attivare. Numero di giorni per la scadenza: ';
+$lang['UAM_ConfirmMail_TimeOut_false'] = ' Disattivare (di default)';
+$lang['UAM_ConfirmMail_Remail'] = 'Email di rilancio ai visitatori non convalidati';
+$lang['UAM_ConfirmMail_Remail_true'] = ' Attivare';
+$lang['UAM_ConfirmMail_Remail_false'] = ' Disattivare (di default)';
+$lang['UAM_ConfirmMail_ReMail_Txt1'] = 'Personalizzare l\'Email di rilancio <b><u>con</u></b> rigenerazione di una nuova chiave di convalida.';
+$lang['UAM_ConfirmMail_ReMail_Txt2'] = 'Personalizzare l\'Email di rilancio <b><u>senza</u></b> rigenerazione di una nuova chiave di convalida.';
+
+$lang['UAM_GhostTracker'] = 'Gestione degli ospiti fantasmi (GhostTracker)';
+$lang['UAM_GhostTracker_true'] = ' Attivare. Durata massima di giorni tra due visite: ';
+$lang['UAM_GhostTracker_false'] = ' Disattivare (di default)';
+$lang['UAM_GhostTracker_ReminderText'] = 'Testo di rilancio personalizzato';
+$lang['UAM_LastVisit'] = ' Tracciamento utenti registrati';
+$lang['UAM_LastVisit_true'] = ' Attivare';
+$lang['UAM_LastVisit_false'] = ' Disattivare (di default)';
+$lang['UAM_No_Comment_Anonymous'] = 'Commenti : Pseudo obbligatorio per gli ospiti';
+$lang['UAM_No_Comment_Anonymous_true'] = ' Attivare';
+$lang['UAM_No_Comment_Anonymous_false'] = ' Disattivare (di default)';
+
+$lang['UAM_Tips1'] = 'Iscrizzione con convalida dell\'Email e messaggio di avviso nella homepage di Piwigo';
+
+$lang['Tab_UserManager'] = 'Tracciamento convalide';
+
+/* UserManager Tab */
+$lang['SubTitle3'] = 'Tracciamento convalide';
+$lang['UserManager_Title'] = 'Tracciamento convalide';
+/* Ghost Tracker Tab */
+$lang['SubTitle4'] = 'GhostTracker';
+$lang['GT_Init'] = 'Inizializzazione del GhostTracker';
+$lang['GhostTracker_Title'] = 'Gestione degli ospiti fantasmi';
+$lang['UAM_GhostTracker_Init'] = 'Se si attiva questa funzione per la prima volta o se viene riattivata dopo un lungo periodo durante il quale dei nuovi visitatori si sono registrati, è necessario inizializzare o azzerare il Tracker Ghost. Questa azione è da effettuarsi solo dopo l\'attivazione o la riattivazione dell\'opzione; Cliccare dunque <u>una sola volta</u> sull\'pulsante di reset sottostante.';
+/* UserList Tab */
+$lang['SubTitle5'] = 'Infos sugli utenti';
+$lang['Tab_UserList'] = 'Monitoraggio degli utenti';
+/* Mailing */
+$lang['Add of %s'] = 'Profilo creato per %s';
+$lang['Update of %s'] = 'Profilo %s aggiornato';
+/* Email confirmation page */
+$lang['confirm_mail_bad'] = '<br><br><br>La vostra chiave di attivazione non è corretta o è scaduta o è già stata usata per convalidare il vostro account. Si prega di contattare il webmaster per risolvere questo problema.<br><br><br><br>';
+/* Mailing */
+$lang['Ghost_reminder_of_%s'] = '%s, questa è un\'Email di rilancio';
+$lang['Reminder_with_key_of_%s'] = '%s, la vostra chiave di convalida è stata rinnovata';
+$lang['Reminder_without_key_of_%s'] = '%s, la chiave di convalida sta per scadere';
+/* Errors and Warnings */
+$lang['Err_GhostTracker_Settings'] = 'Questa pagina è disponibile solo se "GhostTracker" è attivo in "Impostare le registrazioni seguite e altre opzioni".';
+$lang['Err_Userlist_Settings'] = 'Questa pagina è disponibile solo se "Monitoraggio degli utenti registrati" è attivo nella sezione "Impostare le registrazioni seguite e altre opzioni".';
+// --------- End: New or revised $lang ---- from version 2.13.4
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.14.0
+$lang['UAM_AdminConfMail'] = 'Conferma dell\'iscrizione per gli amministratori';
+$lang['UAM_Admin_ConfMail_true'] = ' Attivare';
+$lang['UAM_Admin_ConfMail_false'] = ' Disattivare (di default)';
+$lang['UAM_Tips1_txt'] = '
+          <ul>
+            <li>
+            Obiettivi:<br>
+            - Al suo arrivo sulla galleria: informare l\'ospite che si può registrare per accedere alle foto private<br>
+            - Al momento dell\'iscrizione: Generare un\'Email di convalida con il link diretto, informare il nuovo utente della sua "non convalidazione" e integrarlo lo al gruppo "Attesa"<br>
+            - All convalida: Spostarlo automaticamente dal gruppo "Attesa" al gruppo "Convalidati", che permette l\'accesso alle categorie private<br><br>
+            <b>Nota: Nel funzionamento standard, l\'utente "Guest" vede solo le categorie pubbliche, senza messaggio d\'informazione.</b>
+            </li><br><br>
+            <li>
+Prerequisiti:<br>
+- Una galleria con tutte o alcune categorie private, visibili solo agli utenti registrati<br>
+- Almeno i 2 gruppi d\'utenti Piwigo seguenti: "Attesa", senza alcuna autorizzazione sulle categorie private, e "Convalidati" con tutte le autorizzazioni per le categorie private<br>
+- Il plugin NBC_UAM<br>
+- Il plugin PWG Stuffs, per aggiungere un modulo di tipo "Blocco Personal"<br>
+- In opzione, il plugin Extended Description per il supporto multi-lingue<br>
+            </li><br><br>
+            <li>
+Tappe:<br><br>
+A. Nel plugin NBC_UAM:
+              <ol>
+                <li>Attivare la conferma dell\'iscrizione</li>
+                <li>Inserire un testo personalizzato che sarà inviato con l\'Email di conferma dell\'iscrizione. Se il plugin Extended Description è installato ed attivato, i tag di lingua possono essere utilizzati</li>
+                <li>Selezionare il gruppo "Attesa" sotto la voce "Per gli utenti che non hanno convalidato la loro iscrizione"</li>
+                <li>Selezionare il gruppo "Convalidati" sotto la voce "Per gli utenti che hanno convalidato la loro iscrizione"</li>
+                <li>Salvare le impostazzioni</li>
+              </ol>
+<br>
+B. Nel plugin PWG Stuffs :
+              <ol>
+                <li>Aggiungere un nuovo modulo "Blocco Personale : Mostrare il blocco personale (Nota o Editoriale per esempio)"</li>
+                <li>Configurare il modulo, indicandone il titolo (ad esempio, "in attesa di convalida dell\'iscrizione"), la descrizione, ed in fine selezionando solo il gruppo "Attesa" nell\'elenco dei gruppi ammessi</li>
+                <li>Completare il contenuto del modulo con il testo da visualizzare per gli utenti non convalidati. Come NBC_UAM, i tag di lingua possono essere utilizzati se il plugin Extended Description è installato ed attivato</li>
+                <li>Selezzionare "Visualizzare il modulo nella homepage del sito"</li>
+                <li>Salvare le impostazzioni</li>
+              </ol>
+            </li>
+          </ul>';
+// --------- End: New or revised $lang ---- from version 2.14.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.0
+$lang['UAM_confirmmail_custom_Txt1'] = 'Testo della pagina di conferma - Conferma accettati';
+$lang['UAM_confirmmail_custom_Txt2'] = 'Testo della pagina di conferma - Conferma respinto';
+$lang['LastVisit_Date'] = 'ultima visita';
+$lang['Nb_Days'] = 'Differenza in giorni';
+$lang['Err_UserManager_Settings'] = 'Questa pagina è disponibile solo se "Conferma dell\'iscrizione" è attiva e se un gruppo di visitatori non convalidato è configurato in "Impostare le conferme e validazioni all\'iscrizione".';
+// --------- End: New or revised $lang ---- from version 2.15.0
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.1
+$lang['reg_err_mail_address_dbl'] = 'Questo indirizzo e-mail è già utilizzato.';
+$lang['UAM_Support_txt'] = 'Il supporto ufficiale a questo plugin è solo su questi argomento del forum Piwigo:<br>
+<a href="http://fr.piwigo.org/forum/viewtopic.php?id=12775" onclick="window.open(this.href);return false;">Forum francese - http://fr.piwigo.org/forum/viewtopic.php?id=12775</a>
+<br>o<br>
+<a href="http://piwigo.org/forum/viewtopic.php?id=15015" onclick="window.open(this.href);return false;">Forum inglese - http://piwigo.org/forum/viewtopic.php?id=15015</a><br><br>
+Disponibile anche, il bugtracker del progetto: <a href="http://piwigo.org/bugs/" onclick="window.open(this.href);return false;">http://piwigo.org/bugs/</a>';
+// --------- End: New or revised $lang ---- from version 2.15.1
+
+
+// --------- Starting below: New or revised $lang ---- from version 2.15.4
+/*TODO*/$lang['Force_Validation'] = 'Manual validation';
+/*TODO*/$lang['UAM_Confirm_Mail_true'] = ' Enable - Validation by user';
+/*TODO*/$lang['UAM_Confirm_Mail_local'] = ' Enable - Validation by admin (no validation key sent)';
+/*TODO*/$lang['UAM_RedirToProfile'] = 'Redirect to "Customization" page';
+$lang['UAM_RedirToProfile_false'] = ' Disattivare (di default)';
+$lang['UAM_RedirToProfile_true'] = ' Attivare';
+// --------- End: New or revised $lang ---- from version 2.15.4
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/main.inc.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/main.inc.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/main.inc.php	(revision 7001)
@@ -0,0 +1,482 @@
+<?php
+/*
+Plugin Name: UserAdvManager
+Version: 2.15.7
+Description: Renforcer la gestion des utilisateurs - Enforce users management
+Plugin URI: http://fr.piwigo.org/ext/extension_view.php?eid=216
+Author: Nicco, Eric
+Author URI: http://gallery-nicco.no-ip.org, http://www.infernoweb.net
+*/
+
+/* History:  UAM_PATH.'Changelog.txt.php' */
+
+/*
+ ***** TODO List *****
+See project bugtracker: http://piwigo.org/bugs/my_view_page.php
+*/
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+if (!defined('UAM_DIR')) define('UAM_DIR' , basename(dirname(__FILE__)));
+if (!defined('UAM_PATH')) define('UAM_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
+
+include_once (UAM_PATH.'include/constants.php');
+include_once (UAM_PATH.'include/functions.inc.php');
+
+load_language('plugin.lang', UAM_PATH);
+
+
+/* Plugin admin */
+add_event_handler('get_admin_plugin_menu_links', 'UAM_admin_menu');
+
+function UAM_admin_menu($menu)
+{
+// +-----------------------------------------------------------------------+
+// |                      Getting plugin name                              |
+// +-----------------------------------------------------------------------+
+  $plugin =  PluginInfos(UAM_PATH);
+  $name = $plugin['name'];
+  
+  array_push($menu,
+    array(
+      'NAME' => $name,
+      'URL'  => get_admin_plugin_menu_link(UAM_PATH.'/admin/UAM_admin.php')
+    )
+  );
+
+  return $menu;
+}
+
+/* Lastvisit table feed for Ghost Tracker */
+add_event_handler('loc_begin_index', 'UAM_GhostTracker');
+
+function UAM_GhostTracker()
+{
+  global $conf, $user;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  /* Admins, Guests and Adult_Content users are not tracked for Ghost Tracker or Users Tracker */
+  if (!is_admin() and !is_a_guest() and $user['username'] != "16" and $user['username'] != "18")
+  {
+    if ((isset($conf_UAM[16]) and $conf_UAM[16] == 'true') or (isset($conf_UAM[19]) and $conf_UAM[19] == 'true'))
+    {
+
+      $userid = get_userid($user['username']);
+     	  
+      /* Looking for existing entry in last visit table */
+      $query = '
+SELECT *
+  FROM '.USER_LASTVISIT_TABLE.'
+WHERE user_id = '.$userid.'
+;';
+        
+      $count = pwg_db_num_rows(pwg_query($query));
+         
+      if ($count == 0)
+      {
+        /* If not, data are inserted in table */
+        $query = '
+INSERT INTO '.USER_LASTVISIT_TABLE.' (user_id, lastvisit, reminder)
+VALUES ('.$userid.', now(), "false")
+;';
+        pwg_query($query);
+      }
+      else if ($count > 0)
+      {
+        /* If yes, data are updated in table */
+        $query = '
+UPDATE '.USER_LASTVISIT_TABLE.'
+SET lastvisit = now(), reminder = "false"
+WHERE user_id = '.$userid.'
+LIMIT 1
+;';
+        pwg_query($query);
+      }
+    }
+  }
+}
+
+
+/* User creation */
+add_event_handler('register_user', 'UAM_Adduser');
+
+function UAM_Adduser($register_user)
+{
+  global $conf;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+  // Exclusion of Adult_Content users
+  if ($register_user['username'] != "16" and $register_user['username'] != "18")
+  {
+    if ((isset($conf_UAM[0]) and $conf_UAM[0] == 'true') and (isset($conf_UAM[1]) and $conf_UAM[1] == 'local') and ($register_user['username'] != "16" and $register_user['username'] != "18"))
+    {
+      /* This is to send an information email and set user to "waiting" group or status until admin validation */
+      $passwd = (isset($_POST['password'])) ? $_POST['password'] : '';
+      SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], false);
+      setgroup($register_user['id']);// Set to "waiting" group or status until admin validation
+    }
+    elseif ((isset($conf_UAM[0]) and $conf_UAM[0] == 'false') and (isset($conf_UAM[1]) and $conf_UAM[1] == 'local') and ($register_user['username'] != "16" and $register_user['username'] != "18"))
+    {
+      /* This is to set user to "waiting" group or status until admin validation */
+      setgroup($register_user['id']);// Set to "waiting" group or status until admin validation
+    }
+    elseif ((isset($conf_UAM[0]) and $conf_UAM[0] == 'true') and (isset($conf_UAM[1]) and $conf_UAM[1] == 'false') and ($register_user['username'] != "16" and $register_user['username'] != "18"))
+    {
+      /* This is to send an information email without validation key */
+      $passwd = (isset($_POST['password'])) ? $_POST['password'] : '';
+      SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], false);
+    }
+    /* Sending registration confirmation by email */
+    elseif ((isset($conf_UAM[0]) and $conf_UAM[0] == 'true') and (isset($conf_UAM[1]) and $conf_UAM[1] == 'true') and ($register_user['username'] != "16" and $register_user['username'] != "18"))
+    {
+      if (is_admin() and isset($conf_UAM[20]) and $conf_UAM[20] == 'true')
+      {
+        $passwd = (isset($_POST['password'])) ? $_POST['password'] : '';
+        SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], true); 
+      }
+      elseif (is_admin() and isset($conf_UAM[20]) and $conf_UAM[20] == 'false')
+      {
+        $passwd = (isset($_POST['password'])) ? $_POST['password'] : '';
+        SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], false);
+      }
+      elseif (!is_admin())
+      {
+        $passwd = (isset($_POST['password'])) ? $_POST['password'] : '';
+        SendMail2User(1, $register_user['id'], $register_user['username'], $passwd, $register_user['email'], true);
+      }
+    }
+  }
+}
+
+
+/* User deletion */
+add_event_handler('delete_user', 'UAM_Deluser');
+
+function UAM_Deluser($user_id)
+{
+  /* Cleanup for ConfirmMail table */
+  DeleteConfirmMail($user_id);
+  /* Cleanup for LastVisit table */
+  DeleteLastVisit($user_id);
+  /* Cleanup Redirection settings */
+  DeleteRedir($user_id);
+}
+
+
+// Check users registration
+add_event_handler('register_user_check', 'UAM_RegistrationCheck', EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
+
+function UAM_RegistrationCheck($err, $user)
+{
+  global $errors, $conf;
+
+  // Exclusion of Adult_Content users
+  if ($user['username'] != "16" and $user['username'] != "18")
+  {
+// ***********************************************************
+// We need to reset the standard Piwigo's register controls   
+// because the call of register_user_check trigger resets them
+// ***********************************************************
+  // **********************************
+  // Standard Piwigo's username control
+  // **********************************
+    if ($_POST['login'] == '')
+    {
+      return l10n('reg_err_login1');
+    }
+    if (preg_match('/^.* $/', $_POST['login']))
+    {
+      return l10n('reg_err_login2');
+    }
+    if (preg_match('/^ .*$/', $_POST['login']))
+    {
+      return l10n('reg_err_login3');
+    }
+    if (get_userid($_POST['login']))
+    {
+      return l10n('reg_err_login5');
+    }
+  
+    if (script_basename() == 'admin' and isset($_GET['page']) and $_GET['page'] == 'user_list') // not the same email variable if we are on users registration page or on admin's user registration page
+    {
+    // Email doblons check
+      $atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // before  arobase
+      $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // domain name
+      $regex = '/^' . $atom . '+' . '(\.' . $atom . '+)*' . '@' . '(' . $domain . '{1,63}\.)+' . $domain . '{2,63}$/i';
+  
+      if (!preg_match($regex, $_POST['email']))
+      {
+        return l10n('reg_err_mail_address');
+      }
+    
+      $query = '
+SELECT count(*)
+FROM '.USERS_TABLE.'
+WHERE upper('.$conf['user_fields']['email'].') = upper(\''.$_POST['email'].'\')
+;';
+      list($count) = pwg_db_fetch_row(pwg_query($query));
+      if ($count != 0)
+      {
+        return l10n('reg_err_mail_address_dbl');
+      }
+    }
+
+    if (script_basename() == 'register') // not the same email variable if we are on users registration page or on admin's user registration page
+    {
+  // Email doblons check
+      $atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // before  arobase
+      $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // domain name
+      $regex = '/^' . $atom . '+' . '(\.' . $atom . '+)*' . '@' . '(' . $domain . '{1,63}\.)+' . $domain . '{2,63}$/i';
+  
+      if (!preg_match($regex, $_POST['mail_address']))
+      {
+        return l10n('reg_err_mail_address');
+      }
+    
+      $query = '
+SELECT count(*)
+FROM '.USERS_TABLE.'
+WHERE upper('.$conf['user_fields']['email'].') = upper(\''.$_POST['mail_address'].'\')
+;';
+      list($count) = pwg_db_fetch_row(pwg_query($query));
+      if ($count != 0)
+      {
+        return l10n('reg_err_mail_address_dbl');
+      }
+    }
+// ******************************************
+// End of Piwigo's standard register controls
+// ******************************************
+
+
+// ******************************************
+// Here begins the advanced register controls
+// ******************************************
+    $PasswordCheck = 0;
+
+    $conf_UAM = unserialize($conf['UserAdvManager']);
+
+    // Password enforcement control
+    if (isset($conf_UAM[13]) and $conf_UAM[13] == 'true' and !empty($conf_UAM[14]))
+    {
+      if (!empty($user['password']) and !is_admin())
+      {
+        $PasswordCheck = testpassword($user['password']);
+  
+        if ($PasswordCheck < $conf_UAM[14])
+        {
+          $message = get_l10n_args('reg_err_login4_%s', $PasswordCheck);
+          return($lang['reg_err_pass'] = l10n_args($message).$conf_UAM[14]);
+        }
+      }
+      else if (!empty($user['password']) and is_admin() and isset($conf_UAM[15]) and $conf_UAM[15] == 'true')
+      {
+        $PasswordCheck = testpassword($user['password']);
+  
+        if ($PasswordCheck < $conf_UAM[14])
+        {
+          $message = get_l10n_args('reg_err_login4_%s', $PasswordCheck);
+          return($lang['reg_err_pass'] = l10n_args($message).$conf_UAM[14]);
+        }
+      }
+    }
+
+    // Username without forbidden keys
+    if (isset($conf_UAM[6]) and $conf_UAM[6] == 'true' and !empty($_POST['login']) and ValidateUsername($_POST['login']) and !is_admin())
+    {
+      $_POST['login'] = '';
+      return($lang['reg_err_login1'] = l10n('reg_err_login6')."'".$conf_UAM[7]."'");
+    }
+
+    // Email without forbidden domains
+    if (isset($conf_UAM[11]) and $conf_UAM[11] == 'true' and !empty($_POST['mail_address']) and ValidateEmailProvider($_POST['mail_address']) and !is_admin())
+    {
+      $_POST['mail_address'] = '';
+      return($lang['reg_err_login1'] = l10n('reg_err_login7')."'".$conf_UAM[12]."'");
+    }
+  }
+}
+
+
+if (script_basename() == 'profile')
+{
+  add_event_handler('loc_begin_profile', 'UAM_Profile_Init');
+
+  function UAM_Profile_Init()
+  {
+    global $conf, $user, $template;
+
+    $conf_UAM = unserialize($conf['UserAdvManager']);
+    
+    if ((isset($conf_UAM[21]) and $conf_UAM[21] == 'true'))
+    {
+      $user_idsOK = array();
+      if (!check_consult($user['id'], $user_idsOK))
+      {
+        $user_idsOK[] = $user['id'];
+        
+        $query = "
+          UPDATE ".CONFIG_TABLE."
+          SET value = \"".implode(',', $user_idsOK)."\"
+          WHERE param = 'UserAdvManager_Redir';";
+          
+        pwg_query($query);
+      }
+    }
+
+    if (isset($_POST['validate']) and !is_admin())
+    {
+      /* Email without forbidden domains */
+      if (isset($conf_UAM[11]) and $conf_UAM[11] == 'true' and !empty($_POST['mail_address']))
+      {
+        if (ValidateEmailProvider($_POST['mail_address']))
+        {
+          $template->append('errors', l10n('reg_err_login7')."'".$conf_UAM[12]."'");
+          unset($_POST['validate']);
+        }
+      }
+
+      $typemail = 3;
+      
+      if (!empty($_POST['use_new_pwd']))
+      {
+        $typemail = 2;
+        
+        /* Password enforcement control */
+        if (isset($conf_UAM[13]) and $conf_UAM[13] == 'true' and !empty($conf_UAM[14]))
+        {
+          $PasswordCheck = testpassword($_POST['use_new_pwd']);
+         
+          if ($PasswordCheck < $conf_UAM[14])
+          {
+            $message = get_l10n_args('reg_err_login4_%s', $PasswordCheck);
+            $template->append('errors', l10n_args($message).$conf_UAM[14]);
+            unset($_POST['use_new_pwd']);
+            unset($_POST['validate']);
+          }
+        }
+      }
+      
+      /* Sending registration confirmation by email */
+      if ((isset($conf_UAM[0]) and $conf_UAM[0] == 'true') or (isset($conf_UAM[1]) and $conf_UAM[1] == 'true') or (isset($conf_UAM[1]) and $conf_UAM[1] == 'local'))
+      {
+        $confirm_mail_need = false;
+              
+        if (!empty($_POST['mail_address']))
+        {
+          $query = '
+SELECT '.$conf['user_fields']['email'].' AS email
+FROM '.USERS_TABLE.'
+WHERE '.$conf['user_fields']['id'].' = \''.$user['id'].'\'
+;';
+          
+          list($current_email) = pwg_db_fetch_row(pwg_query($query));
+
+          /* This is to send a new validation key */
+          if ($_POST['mail_address'] != $current_email and (isset($conf_UAM[1]) and $conf_UAM[1] == 'true'))
+        
+            $confirm_mail_need = true;
+
+          /* This is to set the user to "waiting" group or status until admin validation */
+          if ($_POST['mail_address'] != $current_email and (isset($conf_UAM[1]) and $conf_UAM[1] == 'local'))
+        
+            setgroup($register_user['id']);// Set to "waiting" group or status until admin validation
+            $confirm_mail_need = false;
+        }
+        
+        if ((!empty($_POST['use_new_pwd']) and (isset($conf_UAM[0]) and $conf_UAM[0] == 'true') or $confirm_mail_need))
+        {
+          $query = '
+SELECT '.$conf['user_fields']['username'].'
+FROM '.USERS_TABLE.'
+WHERE '.$conf['user_fields']['id'].' = \''.$user['id'].'\'
+;';
+        
+          list($username) = pwg_db_fetch_row(pwg_query($query));
+
+          SendMail2User($typemail, $user['id'], $username, $_POST['use_new_pwd'], $_POST['mail_address'], $confirm_mail_need);
+        }
+      }
+    }
+  }
+}
+
+
+// RedirectToProfile - Thx to LucMorizur
+// redirects a visitor (except for admins, webmasters and generic statuses) to his
+// profile.php page
+//
+// no variable, no return
+add_event_handler('login_success', 'RedirectToProfile');
+
+function RedirectToProfile()
+{
+  global $conf, $user;
+  
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+  
+  $query ='
+SELECT user_id, status
+FROM '.USER_INFOS_TABLE.'
+WHERE user_id = '.$user['id'].'
+;';
+  $data = pwg_db_fetch_assoc(pwg_query($query));
+  
+  if ($data['status'] <> "admin" and $data['status'] <> "webmaster" and $data['status'] <> "generic")
+  {
+    if ((isset($conf_UAM[21]) and $conf_UAM[21] == 'true'))
+    {
+      $user_idsOK = array();
+      if (!check_consult($user['id'], $user_idsOK))
+        redirect(PHPWG_ROOT_PATH.'profile.php');
+    }
+  }
+}
+
+
+add_event_handler('init', 'UAM_InitPage');
+/* *** Important ! This is necessary to make email exclusion work in admin's users management panel *** */
+function UAM_InitPage()
+{
+  load_language('plugin.lang', UAM_PATH);
+  global $conf, $template, $page, $lang, $errors;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+/* Admin user management */
+  if (script_basename() == 'admin' and isset($_GET['page']) and $_GET['page'] == 'user_list')
+  {
+    if (isset($_POST['submit_add']))
+    {
+      /* Email without forbidden domains */
+      if (isset($conf_UAM[11]) and $conf_UAM[11] == 'true' and !empty($_POST['email']) and ValidateEmailProvider($_POST['email']))
+      {
+        $template->append('errors', l10n('reg_err_login7')."'".$conf_UAM[12]."'");
+        unset($_POST['submit_add']);
+      }
+    }
+  }
+}
+
+
+add_event_handler('user_comment_check', 'UAM_CheckEmptyCommentAuthor', 50, 2);
+
+function UAM_CheckEmptyCommentAuthor($comment_action, $comm)
+{
+  load_language('plugin.lang', UAM_PATH);
+  global $infos, $conf, $template;
+
+  $conf_UAM = unserialize($conf['UserAdvManager']);
+
+/* User creation OR update */
+  if (isset($conf_UAM[5]) and $conf_UAM[5] == 'true' and $conf['comments_forall'] == 'true' and $comm['author'] == 'guest')
+  {
+    $comment_action = 'reject';
+
+    array_push($infos, l10n('UAM_Empty Author'));
+  }
+
+  return $comment_action;
+}
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/maintain.inc.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/maintain.inc.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/maintain.inc.php	(revision 7001)
@@ -0,0 +1,226 @@
+<?php
+
+if(!defined('UAM_PATH'))
+{
+  define('UAM_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
+}
+if (!defined('UAM_ROOT'))
+{
+  define('UAM_ROOT', dirname(__FILE__).'/');
+}
+
+include_once (UAM_PATH.'include/constants.php');
+include_once (UAM_PATH.'include/functions.inc.php');
+
+
+function plugin_install()
+{
+	global $conf;
+	
+  $default1 = array('false','false',-1,-1,-1,'false','false','',-1,'','','false','','false',100,'false','false',10,'Hello.
+	
+This is a reminder because a very long time passed since your last visit on our gallery. If you do not want anymore to use your access account, please let us know by replying to this email. Your account will be deleted.
+
+On receipt of this message and no new visit within 15 days, we would be obliged to automatically delete your account.
+
+Best regards,
+
+The admin of the gallery.','false','false','false');
+
+  $q = '
+INSERT INTO '.CONFIG_TABLE.' (param, value, comment)
+VALUES ("UserAdvManager","'.addslashes(serialize($default1)).'","UAM parameters")
+  ;';
+  pwg_query($q);
+
+
+  $default2 = array('false',5,'Hello.
+		
+This is a reminder message because you registered on our gallery but you do not validate your registration and your validation key has expired. To still allow you to access to our gallery, your validation period has been reset. You have again 5 days to validate your registration.
+
+Note: After this period, your account will be permanently deleted.','false','Hello.
+
+This is a reminder message because you registered on our gallery but you do not validate your registration and your validation key will expire. To allow you access to our gallery, you have 2 days to confirm your registration by clicking on the link in the message you should have received when you registered.
+
+Note: After this period, your account will be permanently deleted.','Thank you to have confirmed your email address and your registration on the gallery. Have fun !','Your activation key is incorrect or expired or you have already validated your account, please contact the webmaster to fix this problem.');
+
+  $q = '
+INSERT INTO '.CONFIG_TABLE.' (param, value, comment)
+VALUES ("UserAdvManager_ConfirmMail","'.addslashes(serialize($default2)).'","UAM ConfirmMail parameters")
+  ;';
+  pwg_query($q);
+  
+  $q = '
+INSERT INTO '.CONFIG_TABLE.' (param, value, comment)
+VALUES ("UserAdvManager_Redir","0","UAM Redirections")
+  ;';
+  pwg_query($q);
+
+
+	$q = "
+CREATE TABLE IF NOT EXISTS ".USER_CONFIRM_MAIL_TABLE." (
+  id varchar(50) NOT NULL default '',
+  user_id smallint(5) NOT NULL default '0',
+  mail_address varchar(255) default NULL,
+  status enum('webmaster','admin','normal','generic','guest') default NULL,
+  date_check datetime default NULL,
+  reminder ENUM('true','false') NULL,
+PRIMARY KEY  (id)
+  )
+;";
+  pwg_query($q);
+
+	$q = "
+CREATE TABLE IF NOT EXISTS ".USER_LASTVISIT_TABLE." (
+  user_id SMALLINT(5) NOT NULL DEFAULT '0',
+  lastvisit DATETIME NULL DEFAULT NULL,
+  reminder ENUM('true','false') NULL,
+PRIMARY KEY (`user_id`)
+  )
+;";
+  pwg_query($q);
+}
+
+
+function plugin_activate()
+{
+  global $conf;
+
+/* Cleaning obsolete files */
+/* *********************** */
+  clean_obsolete_files();
+  
+  include_once (UAM_PATH.'include/upgradedb.inc.php');
+
+/* Check if old version is < 2.15 */
+/* ****************************** */
+	$query = '
+SELECT param
+  FROM '.CONFIG_TABLE.'
+WHERE param = "nbc_UserAdvManager"
+;';
+  $count1 = pwg_db_num_rows(pwg_query($query));
+  
+  $query = '
+SELECT *
+  FROM '.CONFIG_TABLE.'
+WHERE param = "nbc_UserAdvManager_ConfirmMail"
+;';
+  $count2 = pwg_db_num_rows(pwg_query($query)); 
+
+/* If old params exist an upgrade is needed */
+/* **************************************** */
+  if ($count1 == 1)
+  {
+/* Check for upgrade from 2.10 to 2.11 */
+/* *********************************** */
+    if ($count1 == 1 and $count2 == 0)
+    {
+    /* upgrade from branch 2.10 to 2.11 */
+    /* ******************************** */
+      upgrade_210_211();
+    }
+
+
+/* Check for upgrade from 2.11 to 2.12 */
+/* *********************************** */
+    if (!table_exist(USER_LASTVISIT_TABLE))
+    {
+    /* upgrade from branch 2.11 to 2.12 */
+    /* ******************************** */
+  		upgrade_211_212();
+    }
+
+
+/* Check for upgrade from 2.12 to 2.13 */
+/* *********************************** */
+    $fields = mysql_list_fields($conf['db_base'],USER_CONFIRM_MAIL_TABLE);
+    $nb_fields = mysql_num_fields($fields); 
+
+    if ($nb_fields < 6)
+    {
+    /* upgrade from branch 2.12 to 2.13 */
+    /* ******************************** */
+      upgrade_212_213();
+    }
+
+
+/* Serializing conf parameters - Available since 2.14.0 */
+/* **************************************************** */
+    if (unserialize($conf['nbc_UserAdvManager']) === false)
+    {
+    /* upgrade from branch 2.13 to 2.14 */
+    /* ******************************** */
+      upgrade_213_214();
+    }
+    
+
+/* Check for upgrade from 2.14 to 2.15 */
+/* *********************************** */
+    //if ($count1 == 1 or $count2 == 1)
+    //{
+    /* upgrade from branch 2.14 to 2.15 */
+    /* ******************************** */
+      upgrade_214_215();
+    //}
+  }
+
+/* Old version is > 2.15 */
+/* ********************* */
+	$query = '
+SELECT param
+  FROM '.CONFIG_TABLE.'
+WHERE param = "UserAdvManager_Redir"
+;';
+  $count = pwg_db_num_rows(pwg_query($query));
+  
+  if ($count == 0)
+  {
+    upgrade_2153_2154();
+  }
+
+load_conf_from_db('param like \'UserAdvManager\\_%\'');
+}
+
+
+function plugin_uninstall()
+{
+  global $conf;
+
+  if (isset($conf['UserAdvManager']))
+  {
+    $q = '
+DELETE FROM '.CONFIG_TABLE.'
+WHERE param="UserAdvManager"
+;';
+
+    pwg_query($q);
+  }
+
+  if (isset($conf['UserAdvManager_ConfirmMail']))
+  {
+    $q = '
+DELETE FROM '.CONFIG_TABLE.'
+WHERE param="UserAdvManager_ConfirmMail"
+;';
+
+    pwg_query($q);
+  }
+
+  if (isset($conf['UserAdvManager_Redir']))
+  {
+    $q = '
+DELETE FROM '.CONFIG_TABLE.'
+WHERE param="UserAdvManager_Redir"
+;';
+
+    pwg_query($q);
+  }
+
+  $q = 'DROP TABLE '.USER_CONFIRM_MAIL_TABLE.';';
+  pwg_query( $q );
+
+  $q = 'DROP TABLE '.USER_LASTVISIT_TABLE.';';
+  pwg_query( $q );
+}
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/template/ConfirmMail.tpl
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/template/ConfirmMail.tpl	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/template/ConfirmMail.tpl	(revision 7001)
@@ -0,0 +1,33 @@
+{html_head}<link rel="stylesheet" type="text/css" href="template/confmail.css">{/html_head}
+
+<div id="content" class="content">
+  <div class="titrePage">
+    <ul class="categoryActions">
+      <li>
+    {if $REDIRECT}
+        <a href="{$ROOT_URL}identification.php" title="{'return to homepage'|@translate}">
+          <img src="{$ROOT_URL}{$themeconf.icon_dir}/home.png" class="button" alt="{'home'|@translate}">
+        </a>
+    {else}
+      {if isset($GALLERY_URL)}
+        <a href="{$GALLERY_URL}" title="{'return to homepage'|@translate}">
+          <img src="{$ROOT_URL}{$themeconf.icon_dir}/home.png" class="button" alt="{'home'|@translate}">
+        </a>
+      {else}
+        <a href="{$U_HOME}" title="{'return to homepage'|@translate}">
+          <img src="{$ROOT_URL}{$themeconf.icon_dir}/home.png" class="button" alt="{'home'|@translate}">
+        </a>
+      {/if}
+    {/if}
+      </li>
+    </ul>
+    <h2 class="confmail">{'title_confirm_mail'|@translate}</h2>
+  </div>
+  <ul>
+  {if $STATUS == true}
+    <div class="infos">{$CONFIRM_MAIL_MESSAGE}</div>
+  {elseif $STATUS == false}
+    <div class="errors">{$CONFIRM_MAIL_MESSAGE}</div>
+  {/if}
+  </ul>
+</div>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/template/confmail.css
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/template/confmail.css	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/template/confmail.css	(revision 7001)
@@ -0,0 +1,31 @@
+H2.confmail
+{
+  text-align: center;
+  font-size: large;
+  color: orange;
+}
+
+/**
+ * Informations box
+ */
+.errors, .infos{
+  margin: 5px;
+  padding: 50px 50px 10px 10px;
+  font-weight:bold;
+  background-repeat: no-repeat;
+  background-position: 5px 5px;
+  padding:15px 60px 0pt 60px;
+  min-height: 54px;
+}
+
+.errors {
+  color: #f22;
+  background-color: #ffd5dc;
+  background-image: url(icon/errors.png);
+}
+
+.infos {
+  color: #0a0;
+  background-color:#c2f5c2;
+  background-image: url(icon/infos.png);
+}
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/template/icon/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/template/icon/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/template/icon/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/NBC_UserAdvManager/tags/2.15.7/template/index.php
===================================================================
--- /extensions/NBC_UserAdvManager/tags/2.15.7/template/index.php	(revision 7001)
+++ /extensions/NBC_UserAdvManager/tags/2.15.7/template/index.php	(revision 7001)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
