JBoss Portal SVN: r10823 - modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/model.
by portal-commits@lists.jboss.org
Author: julien(a)jboss.com
Date: 2008-05-27 07:43:45 -0400 (Tue, 27 May 2008)
New Revision: 10823
Removed:
modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/model/StateType.java
Log:
remove unused moved class
Deleted: modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/model/StateType.java
===================================================================
--- modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/model/StateType.java 2008-05-27 09:00:03 UTC (rev 10822)
+++ modules/presentation/trunk/presentation/src/main/java/org/jboss/portal/presentation/model/StateType.java 2008-05-27 11:43:45 UTC (rev 10823)
@@ -1,42 +0,0 @@
-/******************************************************************************
- * JBoss, a division of Red Hat *
- * Copyright 2006, Red Hat Middleware, LLC, and individual *
- * contributors as indicated by the @authors tag. See the *
- * copyright.txt in the distribution for a full listing of *
- * individual contributors. *
- * *
- * This is free software; you can redistribute it and/or modify it *
- * under the terms of the GNU Lesser General Public License as *
- * published by the Free Software Foundation; either version 2.1 of *
- * the License, or (at your option) any later version. *
- * *
- * This software 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 *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this software; if not, write to the Free *
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
- ******************************************************************************/
-package org.jboss.portal.presentation.model;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
- */
-public enum StateType
-{
- /**
- * The navigational state type. The navigational state type describe sthe a kind of change done at runtime by the user when it
- * interacts with the model (i.e not all interactions with the model are automatically navigational state changes).
- */
- NAVIGATIONAL,
-
- /**
- * The structural state type. The structural state type describes the structure of the model, i.e it defines an enduring
- * state managed by the presentation server.
- */
- STRUCTURAL
-}
16 years, 1 month
JBoss Portal SVN: r10822 - in branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF: classes and 1 other directory.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-05-27 05:00:03 -0400 (Tue, 27 May 2008)
New Revision: 10822
Added:
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource.properties
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource_fr.properties
Modified:
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/portlet.xml
Log:
- More i18n
Added: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource.properties 2008-05-27 09:00:03 UTC (rev 10822)
@@ -0,0 +1,2 @@
+javax.portlet.title=Greetings !
+javax.portlet.keywords=sample,test
\ No newline at end of file
Added: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource_fr.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource_fr.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/classes/Resource_fr.properties 2008-05-27 09:00:03 UTC (rev 10822)
@@ -0,0 +1,2 @@
+javax.portlet.title=Bienvenue !
+javax.portlet.keywords=exemple,test
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/portlet.xml 2008-05-26 15:28:04 UTC (rev 10821)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-jsp-samples-war/WEB-INF/portlet.xml 2008-05-27 09:00:03 UTC (rev 10822)
@@ -36,9 +36,6 @@
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
- <portlet-info>
- <title>Greetings!</title>
- <keywords>sample,test</keywords>
- </portlet-info>
+ <resource-bundle>Resource</resource-bundle>
</portlet>
</portlet-app>
16 years, 1 month
JBoss Portal SVN: r10821 - branches/JBoss_Portal_Branch_2_7/testsuite.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-05-26 11:28:04 -0400 (Mon, 26 May 2008)
New Revision: 10821
Modified:
branches/JBoss_Portal_Branch_2_7/testsuite/build.xml
Log:
Oups, needed to remove the reference to "format"
Modified: branches/JBoss_Portal_Branch_2_7/testsuite/build.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/testsuite/build.xml 2008-05-26 11:47:32 UTC (rev 10820)
+++ branches/JBoss_Portal_Branch_2_7/testsuite/build.xml 2008-05-26 15:28:04 UTC (rev 10821)
@@ -113,9 +113,6 @@
<param name="module" value="faces"/>
</antcall>
<antcall target="internal-test-module">
- <param name="module" value="format"/>
- </antcall>
- <antcall target="internal-test-module">
<param name="module" value="security"/>
</antcall>
<antcall target="internal-test-module">
@@ -162,8 +159,6 @@
<fileset dir="../cms" includes="output/tests/TEST-*.xml,output/tests/TEST-*.txt"/>
<fileset dir="../core" includes="output/tests/*.log"/>
<fileset dir="../core" includes="output/tests/TEST-*.xml,output/tests/TEST-*.txt"/>
- <fileset dir="../format" includes="*.log"/>
- <fileset dir="../format" includes="output/tests/TEST-*.xml,output/tests/TEST-*.txt"/>
<fileset dir="../faces" includes="*.log"/>
<fileset dir="../faces" includes="output/tests/TEST-*.xml,output/tests/TEST-*.txt"/>
<fileset dir="../server" includes="*.log"/>
16 years, 1 month
JBoss Portal SVN: r10820 - branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/data and 17 other directories.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-05-26 07:47:32 -0400 (Mon, 26 May 2008)
New Revision: 10820
Added:
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource_ru.properties
branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/UserPortletConstants.java
branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-sar/conf/bundles/Identity_ru.properties
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/classes/NewsResource_ru.properties
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/classes/Resource_ru.properties
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_ru.properties
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_ru.properties
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-war/WEB-INF/classes/Resource_ru.properties
modules/identity/trunk/.settings/
modules/identity/trunk/.settings/org.eclipse.jdt.ui.prefs
modules/identity/trunk/.settings/org.maven.ide.eclipse.prefs
Removed:
branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/UserPortletConstants.java
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_en.properties
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_es.properties
Modified:
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/portlet.xml
branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/faces/components/StaticValues.java
branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-basic-samples-war/WEB-INF/default-object.xml
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/default-object.xml
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/portlet.xml
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet.xml
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource.properties
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_fr.properties
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/data/default-object.xml
Log:
- More i18n
- Russian l10n
- Eclipse update
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource.properties 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -21,12 +21,6 @@
# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
################################################################################
-# This file is deprecated, use the display-name on objects directly
-PAGENAME_default=Home
-PAGENAME_Admin=Admin
-PAGENAME_Test=Test
-PAGENAME_News=News
-
ACCOUNT_DISABLED=Your account is disabled
ACCOUNT_INEXISTING_OR_WRONG_PASSWORD=The user doesn't exist or the password is incorrect
ACCOUNT_NOTASSIGNEDTOROLE=The user doesn't have the correct role
Deleted: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_en.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_en.properties 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_en.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -1,28 +0,0 @@
-################################################################################
-# JBoss, a division of Red Hat #
-# Copyright 2006, Red Hat Middleware, LLC, and individual #
-# contributors as indicated by the @authors tag. See the #
-# copyright.txt in the distribution for a full listing of #
-# individual contributors. #
-# #
-# This is free software; you can redistribute it and/or modify it #
-# under the terms of the GNU Lesser General Public License as #
-# published by the Free Software Foundation; either version 2.1 of #
-# the License, or (at your option) any later version. #
-# #
-# This software 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 #
-# Lesser General Public License for more details. #
-# #
-# You should have received a copy of the GNU Lesser General Public #
-# License along with this software; if not, write to the Free #
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
-################################################################################
-
-# This file is deprecated, use the display-name on objects directly
-PAGENAME_default=Home
-PAGENAME_Admin=Admin
-PAGENAME_Test=Test
-PAGENAME_News=News
\ No newline at end of file
Deleted: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_es.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_es.properties 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_es.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -1,28 +0,0 @@
-################################################################################
-# JBoss, a division of Red Hat #
-# Copyright 2006, Red Hat Middleware, LLC, and individual #
-# contributors as indicated by the @authors tag. See the #
-# copyright.txt in the distribution for a full listing of #
-# individual contributors. #
-# #
-# This is free software; you can redistribute it and/or modify it #
-# under the terms of the GNU Lesser General Public License as #
-# published by the Free Software Foundation; either version 2.1 of #
-# the License, or (at your option) any later version. #
-# #
-# This software 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 #
-# Lesser General Public License for more details. #
-# #
-# You should have received a copy of the GNU Lesser General Public #
-# License along with this software; if not, write to the Free #
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
-# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
-################################################################################
-
-# This file is deprecated, use the display-name on objects directly
-PAGENAME_default=Home
-PAGENAME_Admin=Administraci�n
-PAGENAME_Test=Ejemplos
-PAGENAME_News=Noticias
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_fr.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_fr.properties 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_fr.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -21,12 +21,6 @@
# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
################################################################################
-# This file is deprecated, use the display-name on objects directly
-PAGENAME_default=Accueil
-PAGENAME_Admin=Admin
-PAGENAME_Test=Test
-PAGENAME_News=Actualit\u00E9s
-
ACCOUNT_DISABLED=Votre compte n'est pas actif
ACCOUNT_INEXISTING_OR_WRONG_PASSWORD=L'utilisateur n'existe pas ou le mot de passe est incorrect
ACCOUNT_NOTASSIGNEDTOROLE=L'utilisateur n'a pas le role requis
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -21,12 +21,6 @@
# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
################################################################################
-# Navigation Portlet
-PAGENAME_default=Home
-PAGENAME_Admin=Amministrazione
-PAGENAME_Test=Test
-PAGENAME_News=Novit\u00e0
-
ACCOUNT_DISABLED=Il tuo account \u00e8 disabilitato
ACCOUNT_INEXISTING_OR_WRONG_PASSWORD=Utente insesistente o password non corretta
ACCOUNT_NOTASSIGNEDTOROLE=L\'utente non ha i giusti permessi
Added: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,32 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+ACCOUNT_DISABLED=Your account is disabled
+ACCOUNT_INEXISTING_OR_WRONG_PASSWORD=The user doesn't exist or the password is incorrect
+ACCOUNT_NOTASSIGNEDTOROLE=The user doesn't have the correct role
+
+LOGIN_TITLE=JBoss Portal Login
+LOGIN_USERNAME=Username
+LOGIN_PASSWORD=Password
+LOGIN_CANCEL=Cancel
+LOGIN_SUBMIT=Submit
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/data/default-object.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/data/default-object.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/data/default-object.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -140,6 +140,7 @@
<display-name xml:lang="it">Home</display-name>
<display-name xml:lang="es">Home</display-name>
<display-name xml:lang="fr">Accueil</display-name>
+ <display-name xml:lang="ru">Домой</display-name>
<properties>
<property>
<name>order</name>
@@ -295,6 +296,7 @@
<display-name xml:lang="it">Home</display-name>
<display-name xml:lang="es">Home</display-name>
<display-name xml:lang="fr">Accueil</display-name>
+ <display-name xml:lang="ru">Домой</display-name>
<properties>
<property>
<name>order</name>
@@ -353,6 +355,7 @@
<display-name xml:lang="it">Amministrazione</display-name>
<display-name xml:lang="es">Administración</display-name>
<display-name xml:lang="fr">Administration</display-name>
+ <display-name xml:lang="ru">Администрирование</display-name>
<window>
<window-name>AdminPortletWindow</window-name>
<instance-ref>AdminPortletInstance</instance-ref>
@@ -376,6 +379,7 @@
<page-name>Members</page-name>
<display-name xml:lang="en">Members</display-name>
<display-name xml:lang="it">Membri</display-name>
+ <display-name xml:lang="fr">Utilisateurs</display-name>
<window>
<window-name>IdentityAdminPortletWindow</window-name>
<instance-ref>IdentityAdminPortletInstance</instance-ref>
Added: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-war/WEB-INF/classes/Resource_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-war/WEB-INF/classes/Resource_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-war/WEB-INF/classes/Resource_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,324 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+_ASREGISTERED=\u0423 \u0432\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438? \u041c\u043e\u0436\u0435\u0442\u0435 <a href\="">\u0441\u043e\u0437\u0434\u0430\u0442\u044c</a>.
+_BLOCKNICKNAME=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+_BLOCKPASSWORD=\u041f\u0430\u0440\u043e\u043b\u044c
+
+
+
+MessageOrder=\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f
+Ascending=\u041f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e
+Descending=\u041f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e
+
+AIM=\u0410\u0434\u0440\u0435\u0441 AIM
+ICQ=\u041d\u043e\u043c\u0435\u0440 ICQ
+YIM=\u041d\u043e\u043c\u0435\u0440 YIM
+MSNM=MSN Messenger
+
+YourAIM=\u0412\u0430\u0448 AIM \u0430\u0434\u0440\u0435\u0441
+YourICQ=\u0412\u0430\u0448 ICQ \u043d\u043e\u043c\u0435\u0440
+YourYIM=\u0412\u0430\u0448 YIM \u043d\u043e\u043c\u0435\u0440
+YourMSNM=\u0412\u0430\u0448 MSN Messenger
+
+MyEmail=\u041c\u043e\u0439 e-mail
+MyHomePage=\u041c\u043e\u044f \u0434\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430
+
+Question=\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441
+Answer=\u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441
+Location=\u041c\u0435\u0441\u0442\u043e\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
+Occupation=\u0420\u043e\u0434 \u0437\u0430\u043d\u044f\u0442\u0438\u0439
+Interests=\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u044b
+ExtraInfo=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+YourLocation=\u0412\u0430\u0448\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
+YourOccupation=\u0412\u0430\u0448 \u0440\u043e\u0434 \u0437\u0430\u043d\u044f\u0442\u0438\u0439
+YourInterests=\u0412\u0430\u0448\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u044b
+Signature=\u041f\u043e\u0434\u043f\u0438\u0441\u044c
+
+LoginSite=\u0412\u0445\u043e\u0434.
+Register=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.
+
+UserExist=\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
+ToChangeInfo=\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0430\u0448\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e
+EmailVerify=\u0421\u0441\u044b\u043b\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043e\u0442\u043e\u0441\u043b\u0430\u043d\u0430! \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u0435 \u0438 \u0449\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.
+AccountActivated=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430!
+UnableActivate=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.
+LoggingYou=\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0430\u0448\u0443 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u0434\u0435\u0440\u0436\u0438\u0442\u0435\u0441\u044c\!
+YouAreLoggedOut=\u0412\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u0448\u043b\u0438 \u0438\u0437 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438\!
+PassDifferent=\u041f\u0430\u0440\u043e\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u041e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438.
+YourPassMustBe=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0434\u043b\u0438\u043d\u0443 \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435
+CharLong=\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432
+UserNotExist=\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\!
+UserRegLogin=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f/\u0432\u0445\u043e\u0434
+SelectOption=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u043f\u0446\u0438\u044e \u0438\u0437 \u043c\u0435\u043d\u044e \u0432\u043d\u0438\u0437\u0443\:
+RetrievePass=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c.
+RegNewUser=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+PasswordAgain=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c
+Email=E-mail
+Options=\u041e\u043f\u0446\u0438\u0438
+AllowEmailView=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u043c\u043e\u0439 e-mail
+AsRegUser=\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435\:
+AsReg6=\u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u043c\u044b
+AsReg5=Customize the comments
+AsReg4=\u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u044b\u0445 \u0441\u044e\u0436\u0435\u0442\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435
+AsReg3=Have a personal box on the homepage
+AsReg2=\u0420\u0430\u0441\u0441\u044b\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438
+AsReg1=\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438
+RegisterNow=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u0435\u0439\u0447\u0430\u0441\! \u042d\u0442\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\!
+WeDontGive=\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c/\u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.
+WelcomeTo=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c
+Registration=\u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438.
+
+Over13_1=\u041c\u043d\u0435
+Over13_2=\u0438\u043b\u0438 \u0441\u0442\u0430\u0440\u0448\u0435 \u0438\u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043d\u0430\u0434\u0437\u043e\u0440 \u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438
+MustBe_1=\u0412\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c
+MustBe_2=\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0434\u0435\u0441\u044c.
+Consent_1=(\u0429\u0435\u043b\u043a\u0430\u044f \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0435 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u043c<br>
+Consent_2=\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0434\u0435\u0441\u044c.)
+Under13_1=\u041c\u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435
+Under13_2=\u0438 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043d\u0430\u0434\u0437\u043e\u0440\u0430 \u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.
+
+Sorry=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435.
+Click=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0449\u0435\u043b\u043a\u043d\u0438\u0442\u0435
+Here=\u0437\u0434\u0435\u0441\u044c
+Return=\u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.
+UserName=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+GoBack=\u041d\u0430\u0437\u0430\u0434
+Finish=\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c
+PersonalInfo=\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+RealName=\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u043c\u044f
+Optional=(\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)
+CanKnowAbout=(\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043e \u0432\u0430\u0441. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)
+Language=\u042f\u0437\u044b\u043a
+255CharMax=(\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432\u0430\u0448\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432 HTML-\u0444\u043e\u0440\u043c\u0435. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)
+YourAvatar=\u0412\u0430\u0448 \u0430\u0432\u0430\u0442\u0430\u0440
+YourHomePage=\u0412\u0430\u0448 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442
+TimeZoneOffset=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430
+EmailNotPublic=(\u042d\u0442\u043e\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u043d, \u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0433\u043e \u043f\u043e\u0442\u0435\u0440\u0438)
+EmailPublic=(\u042d\u0442\u043e\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u043d. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043d\u0443\u0436\u043d\u044b\u043c. \u041d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u043a \u0441\u043f\u0430\u043c\u0443)
+RealEmail=\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 e-mail
+FakeEmail=\u0412\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 e-mail
+NewUser=\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c
+SaveChanges=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f
+SaveChange=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435
+TypeNewPassword=(\u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0435\u0433\u043e \u0441\u043c\u0435\u043d\u044b)
+Search=\u041f\u043e\u0438\u0441\u043a
+All=\u0412\u0441\u0435
+UsersFoundFor=\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+Pages=\u0441\u0442\u0440\u0430\u043d\u0438\u0446
+UsersShown=\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+Delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+Edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+Ok=Ok
+Cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+AreYouSureToDeleteUser=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f?
+UserDeleted=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0434\u0430\u0447\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d
+ReturnToMemberList=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+Avatar=\u0410\u0432\u0430\u0442\u0430\u0440
+AdminFunctions=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438
+URL=URL
+UpdateUser=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+UserID=User ID
+ForChanges=(\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439)
+MemberList=\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+SearchTip=\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430: \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0431\u0443\u043a\u0432\u0443, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435\u0445 \u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+
+ThemeText1=\u042d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u0442 \u043e\u0431\u043b\u0438\u043a \u0432\u0441\u0435\u0433\u043e \u0441\u0430\u0439\u0442\u0430.
+ThemeText2=\u042d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0448\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.
+ThemeText3=\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0430\u0439\u0442 \u0441 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043c\u043e\u0439.
+SelectTheme=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0435\u043c\u0443
+ThemeSelection=\u0412\u044b\u0431\u043e\u0440 \u0442\u0435\u043c
+
+CannotLogin=Cannot proceed to login
+
+LoginInvalidName=\u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u043e
+LoginNoSuchUser=\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
+LoginBadPassword=\u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442
+LoginUnexpectedError=\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430
+LoginUserDisabled=\u0432\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u044b\u043b\u0430 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443.
+
+Enable=Enable
+Disable=Disable
+StatusChanged=\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0434\u0430\u0447\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d
+
+NotAuth=\u0412\u0430\u043c \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e
+
+
+REMEMBERME=\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u0435\u043d\u044f
+LOGIN=\u0412\u0445\u043e\u0434
+USERNAME=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+PASSWORD=\u041f\u0430\u0440\u043e\u043b\u044c
+USERLOGIN=\u0412\u0430\u0448 \u0432\u0445\u043e\u0434
+
+OPTIONAL=\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e
+REQUIRED=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e
+
+255MAX=(\u041f\u043e\u0434\u043f\u0438\u0441\u044c - \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)
+
+NAMENOTAVAILABLE=N/A
+
+MODIFIED_PROFILE=\u0412\u0430\u0448 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d, \u043d\u043e \u043f\u043e\u0440\u0442\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u0430\u0448\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c, \u043f\u043e\u043a\u0430 \u0432\u044b \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0435\u0441\u044c.
+
+# Registration
+REGISTER_NOT_LOGGED_IN=\u0412\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e.
+REGISTER_REGISTER=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.
+REGISTER_REGISTER_LINK=\u0421\u043e\u0437\u0434\u0430\u0442\u044c
+REGISTER_REGISTER_ADMIN_LINK=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c
+REGISTER_TY=\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e.
+REGISTER_BASICINFO=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
+REGISTER_IM=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b IM-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432
+REGISTER_ADDITIONAL=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
+REGISTER_NEWUSER=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+REGISTER_PASSWORDAGAIN=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c
+REGISTER_REALEMAIL=\u0414\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 e-mail
+REGISTER_EMAILNOTPUBLIC=(\u042d\u0442\u043e\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u043d, \u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u043f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0430\u043c \u043f\u0430\u0440\u043e\u043b\u044f, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0433\u043e \u043f\u043e\u0442\u0435\u0440\u0438)
+REGISTER_FAKEEMAIL=\u0412\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 e-mail
+REGISTER_EMAILPUBLIC=(\u042d\u0442\u043e\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u043d \u0432\u0438\u0434\u0435\u043d. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043d\u0443\u0436\u043d\u044b\u043c. \u041d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u043a \u0441\u043f\u0430\u043c\u0443)
+REGISTER_FAKEEMAIL_EXPLAIN=\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e, \u0442\u043e \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 email \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f
+REGISTER_QUESTION=\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441
+REGISTER_ANSWER=\u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441
+REGISTER_ASREGUSER=\u0411\u0443\u0434\u0443\u0447\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435:
+REGISTER_ASREG6=\u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u043c\u044b
+REGISTER_ASREG5=Customize the comments
+REGISTER_ASREG4=\u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u044b\u0445 \u0441\u044e\u0436\u0435\u0442\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435
+REGISTER_ASREG3=\u0418\u043c\u0435\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u044f\u0449\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435
+REGISTER_ASREG2=\u0420\u0430\u0441\u0441\u044b\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438
+REGISTER_ASREG1=\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438
+REGISTER_REGISTERNOW=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u0435\u0439\u0447\u0430\u0441! \u042d\u0442\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e!
+REGISTER_WEDONTGIVE=\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c/\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.
+REGISTER_ALREADYHAVEACCOUNT=\u0423 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c:
+REGISTER_SIGNIN=\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f
+REGISTER_GIVENNAME=\u0418\u043c\u044f
+REGISTER_FAMILYNAME=\u0424\u0430\u043c\u0438\u043b\u0438\u044f
+REGISTER_PERSONALINFO=\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+REGISTER_VIEWREALEMAIL=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u043c\u043e\u0439 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 e-mail
+REGISTER_HOMEPAGE=\u0410\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0430
+REGISTER_TIMEZONEOFFSET=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430
+REGISTER_THEME=\u0422\u0435\u043c\u0430
+REGISTER_DEFAULT_THEME=\u041e\u0431\u043b\u0438\u043a \u0441\u0430\u0439\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
+REGISTER_ICQ=ICQ id
+REGISTER_AIM=AIM id
+REGISTER_YIM=Yahoo id
+REGISTER_MSNM=MSN messenger id
+REGISTER_SKYPE=Skype id
+REGISTER_XMMP=XMMP id
+REGISTER_LOCATION=\u041c\u0435\u0441\u0442\u043e\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
+REGISTER_LANGUAGE=\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u044f\u0437\u044b\u043a
+REGISTER_OCCUPATION=\u0420\u043e\u0434 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438
+REGISTER_INTERESTS=\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u044b
+REGISTER_SIGNATURE=\u041f\u043e\u0434\u043f\u0438\u0441\u044c
+REGISTER_EXTRAINFO=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+REGISTER_CANKNOWABOUT=(\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0432\u0430\u0441. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)
+REGISTER_SAVECHANGES=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f
+REGISTER_CONFIRMATIONEMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043d\u0430 email
+
+REGISTER_SHOWMENU=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043c\u0435\u043d\u044e
+
+REGISTER_ERROR_INVALIDUSERNAME=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u043e
+REGISTER_ERROR_EXISTINGUSERNAME=\u042d\u0442\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f
+REGISTER_ERROR_INVALIDPASSWORD1=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u0432\u0435\u0440\u0435\u043d
+REGISTER_ERROR_INVALIDPASSWORD2=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u0432\u0435\u0440\u0435\u043d
+REGISTER_ERROR_PASSWORDMISMATCH=\u041f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442
+REGISTER_ERROR_INVALIDREALEMAIL=\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435\u0432\u0435\u0440\u0435\u043d
+
+REGISTER_CONFIRM=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d.
+REGISTER_ADMIN_SEARCH=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c/\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+
+
+MENU_LOGOUT=\u0412\u044b\u0439\u0442\u0438
+MENU_EDITPROFILE=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448 \u043f\u0440\u043e\u0444\u0438\u043b\u044c
+MENU_LISTUSERS=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+
+LIST_FILTERS=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043a \u0441\u043f\u0438\u0441\u043a\u0443
+LIST_USERSPERPAGE=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443
+LIST_USERNAMECONTAINS=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442
+LIST_FULLNAME=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f
+LIST_USERNAME=\u0418\u043c\u044f \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438
+LIST_FIRSTNAME=\u0418\u043c\u044f
+LIST_LASTNAME=\u0424\u0430\u043c\u0438\u043b\u0438\u044f
+LIST_ROLES=\u0420\u043e\u043b\u0438
+LIST_ACTIONS=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
+LIST_ACTIONSSHOWPROFILE=\u041f\u0440\u043e\u0444\u0438\u043b\u044c
+LIST_ACTIONADDROLESTOUSER=\u0420\u043e\u043b\u0438
+LIST_ACTIONEDITROLES=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u043b\u0438
+LIST_ACTIONDELETEUSER=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+LIST_CONFIRMDELETEUSER=\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+LIST_SEARCHRESULTS=\u041f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435
+LIST_MATCHING=\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+FILTER=\u0424\u0438\u043b\u044c\u0442\u0440
+
+NEXTPAGE=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430
+PREVIOUSPAGE=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430
+
+ASSIGNROLES=\u041d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0440\u043e\u043b\u0438
+ASSIGNEDROLES=\u0420\u043e\u043b\u0438 \u043a \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e
+ROLESAVAILABLE=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0440\u043e\u043b\u0438
+EDITROLESFORUSER=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+
+
+ROLE_THEREARE=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e
+ROLE_THEREIS=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430
+ROLE_ROLESDEFINED=\u0440\u043e\u043b\u0435\u0439
+ROLE_ROLEDEFINED=\u0440\u043e\u043b\u044c
+
+ROLE_NAME=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0440\u043e\u043b\u0438
+ROLE_DISPLAYNAME=\u0412\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043c\u044f \u0440\u043e\u043b\u0438
+ROLE_NEWDISPLAYNAME=New display name for the role
+ROLE_SELECTONETOMODIFY= \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u043e\u043b\u0438 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f
+ROLE_SELECTONETODELETE= \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f
+ROLE_CREATE=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0440\u043e\u043b\u044c
+ROLE_UPDATE=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+ROLE_EDIT=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+ROLE_DELETE=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0440\u043e\u043b\u044c
+ROLE_CONFIRM_DELETE=\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c
+ROLE_DELETED=\u0420\u043e\u043b\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0430
+ROLE_EDIT_MEMBERS=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u043b\u0435\u043d\u043e\u0432 \u0440\u043e\u043b\u0438
+ROLE_MAINLIST=\u041d\u0430\u0437\u0430\u0434 \u043a \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0440\u043e\u043b\u0438
+ROLE_EDIT_USER=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0440\u043e\u043b\u0438
+ROLE_ADD=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u043e\u043b\u0438
+ROLE_REMOVE=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u0438
+
+ROLE_ERROR_DISPLAYNAMEALREADYEXISTS=\u0423\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u043e\u043b\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438
+ROLE_ERROR_NAMEALREADYEXISTS=\u0423\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u043e\u043b\u044c \u0441 \u044d\u0442\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c
+ROLE_ERROR_NAMEEMPTY=\u0418\u043c\u044f \u0440\u043e\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c
+ROLE_ERROR_DISPLAYNAMEEMPTY=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0440\u043e\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c
+ROLE_ERROR_DELETE_FAILED=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c
+
+MENU_CREATEROLE=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c
+MENU_EDITROLE=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0440\u043e\u043b\u044c
+MENU_EDITROLEMEMBERS=\u0427\u043b\u0435\u043d \u0440\u043e\u043b\u0438
+
+ROLE_TEXT_1=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442\u043b\u0435\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u0440\u043e\u043b\u044f\u043c.
+ROLE_TEXT_2=\u042d\u0442\u0438 \u0440\u043e\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0440\u0442\u043b\u0435\u0442\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432.
+
+PERMISSION_PICKPORTLET=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0440\u0442\u043b\u0435\u0442\u043e\u0432
+PERMISSION_PERMISSIONS=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f
+PERMISSION_TOP=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f
+PERMISSION_FINERGRAIN=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0443\u0431-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439
+PERMISSION_MODIFYROLES=\u0423\u0430\u043b\u0438\u0442\u044c/\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u043e\u043b\u0438
+PERMISSION_MODIFYINGROLES=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u043e\u043b\u0438 \u0434\u043b\u044f
+PERMISSION_DOMAIN=\u0434\u043e\u043c\u0435\u043d\u0430
+PERMISSION_DOMAIN_MOD=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043c\u0435\u043d
+PERMISSION_DEFINEDROLES=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u043e\u043b\u0438
+PERMISSION_IMPLIEDROLES=\u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c\u044b\u0435 \u0440\u043e\u043b\u0438
+
Added: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,96 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+## CMS ADMIN PORTLET
+TITLE_HEAD=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 CMS
+TITLE_BROWSE=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438
+TITLE_FILEBROWSE=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0444\u0430\u0439\u043b\u043e\u0432
+TITLE_DELETECONFIRM=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435
+TITLE_CREATECOLLCONFIRM=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438
+TITLE_COPYCONFIRM=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430
+TITLE_MOVECONFIRM=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430
+TITLE_VIEWFILE=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0444\u0430\u0439\u043b\u0430
+TITLE_EDIT=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430
+TITLE_CREATE=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430
+TITLE_UPLOAD=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430
+TITLE_SECURECONFIRM=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430
+
+CMS_SEARCH=\u041f\u043e\u0438\u0441\u043a
+CMS_SEARCHNORESULT=\u041d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430
+CMS_MENU=\u041c\u0435\u043d\u044e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
+CMS_ACTION=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435
+CMS_NAME=\u0418\u043c\u044f
+CMS_TYPE=\u0422\u0438\u043f
+CMS_CREATED=\u0421\u043e\u0437\u0434\u0430\u043d\u043e
+CMS_MODIFIED=\u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e
+CMS_DESCRIPTION=\u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+CMS_VIEW=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+CMS_COPY=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+CMS_MOVE=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c
+CMS_DELETE=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+CMS_FOLDER=\u041a\u0430\u0442\u0430\u043b\u043e\u0433
+CMS_FILE=\u0424\u0430\u0439\u043b
+CMS_CREATE=\u0421\u043e\u0437\u0434\u0430\u0442\u044c
+CMS_CANCEL=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+CMS_EDIT=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+CMS_UPLOAD=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
+CMS_MODIFY=\u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+CMS_CREATEFOLDER=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433
+CMS_CREATEFILE=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b
+CMS_UPLOADARCHIVE=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0432
+CMS_BACKTOBROWSER=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439
+CMS_TRANSFER=\u0418\u043c\u043f\u043e\u0440\u0442/\u042d\u043a\u0441\u043f\u043e\u0440\u0442
+CMS_EXPORTARCHIVE=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433
+CMS_SECURE=\u0420\u0435\u0436\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430
+CMS_PREVIEW=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+
+CMS_CREATEFILEINDIR=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438
+CMS_FILENAME=\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430
+CMS_TITLE=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
+CMS_LANGUAGE=\u042f\u0437\u044b\u043a
+
+CMS_DELETEPATH=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435
+CMS_DELETEWARN1=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0414\u0430\u043d\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c\!
+CMS_DELETEWARN2=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\?
+
+CMS_DESTINATION=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+CMS_SOURCE=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a
+
+CMS_EDITING=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430
+CMS_LIVE=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \"\u0436\u0438\u0432\u044b\u043c\"
+CMS_VERSION=\u0412\u0435\u0440\u0441\u0438\u044f
+CMS_WYSIWYG=WYSIWYG-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440
+
+CMS_LIVEVERSION=\u0416\u0438\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f
+CMS_SIZE=\u0420\u0430\u0437\u043c\u0435\u0440
+
+CMS_CONTENT_DIR=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438
+CMS_CONTENT_DIR_USE=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u043e\u0440\u0442\u0430\u043b\u0430.
+CMS_MAIN_USE=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u043e\u0440\u0442\u043b\u0435\u0442 "\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 CMS" \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u0442\u0430\u043b\u0430.
+CMS_MANAGE=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c
+
+CMS_CREATED_BY=\u0421\u043e\u0437\u0434\u0430\u043d\u043e
+CMS_APPROVE=\u041e\u0434\u043e\u0431\u0440\u0435\u043d\u043e
+CMS_DENY=\u0417\u0430\u043f\u0435\u0440\u0438\u0442\u044c
+CMS_APPROVAL=\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u044f
+CMS_PATH=\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/portlet.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/portlet.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -42,6 +42,7 @@
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
+ <supported-locale>ru</supported-locale>
<resource-bundle>Resource</resource-bundle>
<portlet-info>
<title>CMS</title>
Deleted: branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/UserPortletConstants.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/UserPortletConstants.java 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/UserPortletConstants.java 2008-05-26 11:47:32 UTC (rev 10820)
@@ -1,119 +0,0 @@
-/******************************************************************************
- * JBoss, a division of Red Hat *
- * Copyright 2006, Red Hat Middleware, LLC, and individual *
- * contributors as indicated by the @authors tag. See the *
- * copyright.txt in the distribution for a full listing of *
- * individual contributors. *
- * *
- * This is free software; you can redistribute it and/or modify it *
- * under the terms of the GNU Lesser General Public License as *
- * published by the Free Software Foundation; either version 2.1 of *
- * the License, or (at your option) any later version. *
- * *
- * This software 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 *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this software; if not, write to the Free *
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
- ******************************************************************************/
-package org.jboss.portal.core.identity;
-
-/** @author <a href="theute(a)jboss.org">Thomas Heute</a> $Revision$ */
-public class UserPortletConstants
-{
-
- public static final String SALT = "14m1r0nm4n";
-
- public static final String INFOMESSAGE = "infomessage";
- public static final String ERRORMESSAGE = "errormessage";
-
- // Cookie names
- public static String CK_USERNAME = "username";
- public static String CK_PASS = "password";
-
- // Default values
- public static int DEFAULT_USERSPERPAGE = 10;
-
- // Status return codes for the login.
- public static final int LOGIN_STATUS_OK = 0;
- public static final int LOGIN_STATUS_BAD_PASSWORD = 1;
- public static final int LOGIN_STATUS_NO_SUCH_USER = 2;
- public static final int LOGIN_STATUS_USER_DISABLED = 3;
- public static final int LOGIN_STATUS_INVALID_NAME = 4;
- public static final int LOGIN_STATUS_UNEXPECTED_ERROR = 5;
-
- public static final int PERMANENT_USER_MAX_INACTIVE = 60 * 60 * 24 * 5 * 1000; // 5 days in ms
- public static final int TRANSIENT_USER_MAX_INACTIVE = 60 * 60; // 1 hours in seconds
-
- public static final String HASH = "hash";
- public static final String USERID = "userid";
-
- // Portlet configuration
-
- public static final String EMAILFROM = "emailFrom";
- public static final String SUBSCRIPTIONMODE = "subscriptionMode";
- public static final String SUBSCRIPTIONMODE_AUTOMATIC = "automatic";
- public static final String SUBSCRIPTIONMODE_EMAILVERIFICATION = "emailVerification";
- public static final String DEFAULT_ROLE = "defaultRole";
-
- /** Timezone information : ((value + 1) * 2) - 1 = 2 * value + 1 */
- public static final String[] TIME_ZONE_OFFSETS =
- {
- "(GMT -12:00 hours) Eniwetok, Kwajalein",
- null,
- "(GMT -11:00 hours) Midway Island, Samoa",
- null,
- "(GMT -10:00 hours) Hawaii",
- null,
- "(GMT -9:00 hours) Alaska",
- null,
- "(GMT -8:00 hours) Pacific Time (US & Canada)",
- null,
- "(GMT -7:00 hours) Mountain Time (US & Canada)",
- null,
- "(GMT -6:00 hours) Central Time (US & Canada), Mexico City",
- null,
- "(GMT -5:00 hours) Eastern Time (US & Canada), Bogota, Lima, Quito",
- null,
- "(GMT -4:00 hours) Atlantic Time (Canada), Caracas, La Paz",
- "(GMT -3:30 hours) Newfoundland",
- "(GMT -3:00 hours) Brazil, Buenos Aires, Georgetown",
- null,
- "(GMT -2:00 hours) Mid-Atlantic",
- null,
- "(GMT -1:00 hours) Azores, Cape Verde Islands",
- null,
- "(GMT) Western Europe Time, London, Lisbon, Casablanca, Monrovia",
- null,
- "(GMT +1:00 hours) CET(Central Europe Time), Brussels, Copenhagen, Madrid, Paris",
- null,
- "(GMT +2:00 hours) EET(Eastern Europe Time), Kaliningrad, South Africa",
- null,
- "(GMT +3:00 hours) Baghdad, Kuwait, Riyadh, Moscow, St. Petersburg",
- "(GMT +3:30 hours) Tehran",
- "(GMT +4:00 hours) Abu Dhabi, Muscat, Baku, Tbilisi",
- "(GMT +4:30 hours) Kabul",
- "(GMT +5:00 hours) Ekaterinburg, Islamabad, Karachi, Tashkent",
- "(GMT +5:30 hours) Bombay, Calcutta, Madras, New Delhi",
- "(GMT +6:00 hours) Almaty, Dhaka, Colombo",
- null,
- "(GMT +7:00 hours) Bangkok, Hanoi, Jakarta",
- null,
- "(GMT +8:00 hours) Beijing, Perth, Singapore, Hong Kong, Chongqing, Urumqi, Taipei",
- null,
- "(GMT +9:00 hours) Tokyo, Seoul, Osaka, Sapporo, Yakutsk",
- "(GMT +9:30 hours) Adelaide, Darwin",
- "(GMT +10:00 hours) EAST(East Australian Standard)",
- null,
- "(GMT +11:00 hours) Magadan, Solomon Islands, New Caledonia",
- null,
- "(GMT +12:00 hours) Auckland, Wellington, Fiji, Kamchatka, Marshall Island",
- null
- };
-
- public static final String DEFAULT_IMAGES_PATH = "images/user";
-}
Copied: branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/UserPortletConstants.java (from rev 10818, branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/UserPortletConstants.java)
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/UserPortletConstants.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/UserPortletConstants.java 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,119 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software 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 *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.core.identity.ui;
+
+/** @author <a href="theute(a)jboss.org">Thomas Heute</a> $Revision$ */
+public class UserPortletConstants
+{
+
+ public static final String SALT = "14m1r0nm4n";
+
+ public static final String INFOMESSAGE = "infomessage";
+ public static final String ERRORMESSAGE = "errormessage";
+
+ // Cookie names
+ public static String CK_USERNAME = "username";
+ public static String CK_PASS = "password";
+
+ // Default values
+ public static int DEFAULT_USERSPERPAGE = 10;
+
+ // Status return codes for the login.
+ public static final int LOGIN_STATUS_OK = 0;
+ public static final int LOGIN_STATUS_BAD_PASSWORD = 1;
+ public static final int LOGIN_STATUS_NO_SUCH_USER = 2;
+ public static final int LOGIN_STATUS_USER_DISABLED = 3;
+ public static final int LOGIN_STATUS_INVALID_NAME = 4;
+ public static final int LOGIN_STATUS_UNEXPECTED_ERROR = 5;
+
+ public static final int PERMANENT_USER_MAX_INACTIVE = 60 * 60 * 24 * 5 * 1000; // 5 days in ms
+ public static final int TRANSIENT_USER_MAX_INACTIVE = 60 * 60; // 1 hours in seconds
+
+ public static final String HASH = "hash";
+ public static final String USERID = "userid";
+
+ // Portlet configuration
+
+ public static final String EMAILFROM = "emailFrom";
+ public static final String SUBSCRIPTIONMODE = "subscriptionMode";
+ public static final String SUBSCRIPTIONMODE_AUTOMATIC = "automatic";
+ public static final String SUBSCRIPTIONMODE_EMAILVERIFICATION = "emailVerification";
+ public static final String DEFAULT_ROLE = "defaultRole";
+
+ /** Timezone information : ((value + 1) * 2) - 1 = 2 * value + 1 */
+ public static final String[] TIME_ZONE_OFFSETS =
+ {
+ "(GMT -12:00 hours) Eniwetok, Kwajalein",
+ null,
+ "(GMT -11:00 hours) Midway Island, Samoa",
+ null,
+ "(GMT -10:00 hours) Hawaii",
+ null,
+ "(GMT -9:00 hours) Alaska",
+ null,
+ "(GMT -8:00 hours) Pacific Time (US & Canada)",
+ null,
+ "(GMT -7:00 hours) Mountain Time (US & Canada)",
+ null,
+ "(GMT -6:00 hours) Central Time (US & Canada), Mexico City",
+ null,
+ "(GMT -5:00 hours) Eastern Time (US & Canada), Bogota, Lima, Quito",
+ null,
+ "(GMT -4:00 hours) Atlantic Time (Canada), Caracas, La Paz",
+ "(GMT -3:30 hours) Newfoundland",
+ "(GMT -3:00 hours) Brazil, Buenos Aires, Georgetown",
+ null,
+ "(GMT -2:00 hours) Mid-Atlantic",
+ null,
+ "(GMT -1:00 hours) Azores, Cape Verde Islands",
+ null,
+ "(GMT) Western Europe Time, London, Lisbon, Casablanca, Monrovia",
+ null,
+ "(GMT +1:00 hours) CET(Central Europe Time), Brussels, Copenhagen, Madrid, Paris",
+ null,
+ "(GMT +2:00 hours) EET(Eastern Europe Time), Kaliningrad, South Africa",
+ null,
+ "(GMT +3:00 hours) Baghdad, Kuwait, Riyadh, Moscow, St. Petersburg",
+ "(GMT +3:30 hours) Tehran",
+ "(GMT +4:00 hours) Abu Dhabi, Muscat, Baku, Tbilisi",
+ "(GMT +4:30 hours) Kabul",
+ "(GMT +5:00 hours) Ekaterinburg, Islamabad, Karachi, Tashkent",
+ "(GMT +5:30 hours) Bombay, Calcutta, Madras, New Delhi",
+ "(GMT +6:00 hours) Almaty, Dhaka, Colombo",
+ null,
+ "(GMT +7:00 hours) Bangkok, Hanoi, Jakarta",
+ null,
+ "(GMT +8:00 hours) Beijing, Perth, Singapore, Hong Kong, Chongqing, Urumqi, Taipei",
+ null,
+ "(GMT +9:00 hours) Tokyo, Seoul, Osaka, Sapporo, Yakutsk",
+ "(GMT +9:30 hours) Adelaide, Darwin",
+ "(GMT +10:00 hours) EAST(East Australian Standard)",
+ null,
+ "(GMT +11:00 hours) Magadan, Solomon Islands, New Caledonia",
+ null,
+ "(GMT +12:00 hours) Auckland, Wellington, Fiji, Kamchatka, Marshall Island",
+ null
+ };
+
+ public static final String DEFAULT_IMAGES_PATH = "images/user";
+}
Modified: branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/faces/components/StaticValues.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/faces/components/StaticValues.java 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/faces/components/StaticValues.java 2008-05-26 11:47:32 UTC (rev 10820)
@@ -34,7 +34,7 @@
import javax.portlet.PortletContext;
import org.jboss.portal.common.i18n.LocaleManager;
-import org.jboss.portal.core.identity.UserPortletConstants;
+import org.jboss.portal.core.identity.ui.UserPortletConstants;
import org.jboss.portal.theme.PortalTheme;
import org.jboss.portal.theme.ThemeInfo;
import org.jboss.portal.theme.ThemeService;
Added: branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-sar/conf/bundles/Identity_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-sar/conf/bundles/Identity_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-sar/conf/bundles/Identity_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,178 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+IDENTITY_APPLICATION_NOT_AVAILABLE=\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u0442\u043b\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0436\u0443\u0440\u043d\u0430\u043b \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.
+
+IDENTITY_WELCOME=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c
+IDENTITY_REGISTER=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f
+IDENTITY_LOST_PASSWORD=\u041f\u043e\u0442\u0435\u0440\u044f\u043b \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_NOT_LOGGED_IN=\u0412\u044b \u0435\u0449\u0435 \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c.
+IDENTITY_CREATE_ACCOUNT=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.
+IDENTITY_BUTTON_SUBMIT=\u0414\u0430
+IDENTITY_BUTTON_EDIT=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+IDENTITY_BUTTON_CANCEL=\u041e\u0442\u043c\u0435\u043d\u0430
+
+IDENTITY_REGISTER_TITLE=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435
+IDENTITY_REGISTER_TITLE_CONFIRM=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
+IDENTITY_REGISTER_PASSWORD_CONFIRM=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_REGISTER_STATUS_TITLE=\u0421\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438
+IDENTITY_REGISTER_SUCCESS_TITLE=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0430. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.
+IDENTITY_REGISTER_PENDING_TITLE=\u041f\u043e\u0447\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043e\u0441\u043b\u0430\u043d\u043e \u043d\u0430 \u0432\u0430\u0448 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.
+IDENTITY_REGISTER_REQUIRED_INFORMATION=\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.
+
+IDENTITY_LOST_PASSWORD_TITLE=\u0417\u0430\u0431\u044b\u043b\u0438 \u0432\u0430\u0448\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435?
+IDENTITY_LOST_PASSWORD_DESCRIPTION=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0430\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u0430\u0440\u043e\u043b\u044f.
+IDENTITY_LOST_PASSWORD_ERROR=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c.
+IDENTITY_LOST_PASSWORD_STATUS_SUCCESSFUL=\u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0432\u0430\u0448\u0438\u043c \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.
+IDENTITY_LOST_PASSWORD_STATUS_404=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.
+IDENTITY_LOST_PASSWORD_STATUS_TITLE=\u041f\u043e\u0442\u0435\u0440\u044f\u043d \u043f\u0430\u0440\u043e\u043b\u044c
+
+IDENTITY_EDIT_PROFILE_ERROR=\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f.
+IDENTITY_EDIT_PASSWORD_TITLE=\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_EDIT_PASSWORD_CURRENT=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_EDIT_CHANGE_PASSWORD=\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_EDIT_CHANGE_PASSWORD_ERROR=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c.
+IDENTITY_EDIT_CHANGE_PASSWOR_STATUS=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d.
+
+IDENTITY_EDIT_EMAIL_TITLE=\u0421\u043c\u0435\u043d\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430
+IDENTITY_EDIT_EMAIL_NEW=\u041d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441
+IDENTITY_EDIT_CHANGE_EMAIL=\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441
+IDENTITY_EDIT_CHANGE_EMAIL_ERROR=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441
+IDENTITY_EDIT_CHANGE_EMAIL_STATUS_PENDING=\u041f\u0438\u0441\u044c\u043c\u043e \u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u043e\u0442\u043e\u0441\u043b\u0430\u043d\u043e \u043d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441.
+IDENTITY_EDIT_CHANGE_EMAIL_STATUS_CHANGED=\u0412\u0430\u0448 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u044b\u043b \u0441\u043c\u0435\u043d\u0435\u043d.
+
+IDENTITY_EDIT_PROFILE_TITLE=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044f
+IDENTITY_VIEW_PROFILE_TITLE=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f
+
+IDENTITY_USERNAME=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0438\u043c\u044f
+IDENTITY_PASSWORD=\u041f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_EMAIL=\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441
+IDENTITY_GIVENNAME=\u0418\u043c\u044f
+IDENTITY_FAMILYNAME=\u0424\u0430\u043c\u0438\u043b\u0438\u044f
+IDENTITY_SKYPE=Skype ID
+IDENTITY_LOCATION=\u041c\u0435\u0441\u0442\u043e\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
+IDENTITY_OCCUPATION=\u0421\u0444\u0435\u0440\u0430 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438
+IDENTITY_EXTRA=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e
+IDENTITY_SIGNATURE=\u041f\u043e\u0434\u043f\u0438\u0441\u044c
+IDENTITY_INTERESTS=\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u044b
+IDENTITY_LOCALE=\u041b\u043e\u043a\u0430\u043b\u044c
+IDENTITY_ICQ=Icq ID
+IDENTITY_AIM=Aim ID
+IDENTITY_MSNM= MSN messenger ID
+IDENTITY_YIM=Yahoo ID
+IDENTITY_XMMP=Xmmp ID
+IDENTITY_HOMEPAGE=\u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430
+IDENTITY_TIMEZONE=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430
+IDENTITY_THEME=\u0422\u0435\u043c\u0430
+IDENTITY_SECURITY_QUESTION=\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441
+IDENTITY_SECURITY_ANSWER=\u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441
+IDENTITY_LAST_LOGIN=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0445\u043e\u0434 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0443
+IDENTITY_REIGSTRATION_DATE=\u0414\u0430\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438
+IDENTITY_ENABLED=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e
+
+IDENTITY_CATEGORY_GENERAL=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438
+IDENTITY_CATEGORY_PERSONAL=\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+IDENTITY_CATEGORY_INSTANT=\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 IM-\u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445
+IDENTITY_CATEGORY_ADDITIONAL=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+
+IDENTITY_CATEGORY_ADDITIONAL_SIGNATURE=(\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 - \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)
+IDENTITY_CATEGORY_ADDITIONAL_EXTRA=(\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)
+
+IDENTITY_MANAGEMENT_ACTION=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
+IDENTITY_MANAGEMENT_ACTION_EDIT_PROFILE=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+IDENTITY_MANAGEMENT_ACTION_ROLES=\u0420\u043e\u043b\u0438
+IDENTITY_MANAGEMENT_ACTION_DELETE=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+IDENTITY_MANAGEMENT_USER_MANAGEMENT=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438
+IDENTITY_MANAGEMENT_ROLE_MANAGEMENT=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u043e\u043b\u044f\u043c\u0438
+IDENTITY_MANAGEMENT_SEARCH_USER=\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+IDENTITY_MANAGEMENT_CREATE_USER=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c
+IDENTITY_MANAGEMENT_CREATE_USER_CREATED=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u043d
+IDENTITY_MANAGEMENT_USER_DELETED=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0434\u0430\u043b\u0435\u043d
+IDENTITY_MANAGEMENT_ROLE=\u0420\u043e\u043b\u044c
+IDENTITY_MANAGEMENT_ROLE_DISPLAY=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f
+IDENTITY_MANAGEMENT_ROLE_MEMBERS=\u0427\u043b\u0435\u043d\u044b
+IDENTITY_MANAGEMENT_ROLE_ASSIGNED=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u043e\u043b\u0438
+IDENTITY_MANAGEMENT_CREATE_ROLE=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0440\u043e\u043b\u044c
+IDENTITY_MANAGEMENT_EDIT_ROLE=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u043b\u044c
+IDENTITY_MANAGEMENT_CREATE_ROLE=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u043e\u043b\u044c
+IDENTITY_MANAGEMENT_DISABLE=\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+IDENTITY_MANAGEMENT_ENABLE=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+IDENTITY_MANAGEMENT_RESET_PASSWORD=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_MANAGEMENT_RESET_PASSWORD_FOR_USER=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+IDENTITY_MANAGEMENT_RESET_PASSWORD_DESCRIPTION=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0441\u043b\u0430\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.
+IDENTITY_MANAGEMENT_ASSIGN_ROLES=\u041d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0440\u043e\u043b\u0438
+IDENTITY_MANAGEMENT_COUNT_PENDING_USERS=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
+IDENTITY_MANAGEMENT_COUNT_REGISTERED_USERS=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438
+IDENTITY_MANAGEMENT_APPROVE_ALL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435
+IDENTITY_MANAGEMENT_REJECT_ALL=\u041e\u0442\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435
+IDENTITY_MANAGEMENT_SELECT_ALL=\u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
+IDENTITY_MANAGEMENT_UNSELECT_ALL=\u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440
+IDENTITY_MANAGEMENT_MATRIX=\u041c\u0430\u0442\u0440\u0438\u0446\u0430
+IDENTITY_MANAGEMENT_SUBSCRIPTION_MODES=\u0420\u0435\u0436\u0438\u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
+
+IDENTITY_MANAGEMENT_PENDING_REGISTRATIONS=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
+IDENTITY_MANAGEMENT_PENDING_BPM_ID=Id
+IDENTITY_MANAGEMENT_PENDING_APPROVE=\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c
+IDENTITY_MANAGEMENT_PENDING_REJECT=\u043e\u0442\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044c
+
+IDENTITY_MANAGEMENT_SUBSCRIPTION_MODE=\u0420\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
+IDENTITY_MANAGEMENT_SUBSCRIPTION_ADMIN_MODE=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
+IDENTITY_MANAGEMENT_DESCRIPTION_SUBSCRIPTION_CUSTOM=\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438.
+IDENTITY_MANAGEMENT_DESCRIPTION_SUBSCRIPTION_AUTOMATIC=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c - \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e no e-mail \u043d\u0435\u0442, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0435\u0442.
+IDENTITY_MANAGEMENT_DESCRIPTION_SUBSCRIPTION_EMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e e-mail \u0435\u0441\u0442\u044c, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0435\u0442.
+IDENTITY_MANAGEMENT_DESCRIPTION_SUBSCRIPTION_EMAIL_ADMIN=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e e-mail \u0438 \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0435\u0441\u0442\u044c.
+
+IDENTITY_REGISTER_VERIFY_CAPTCHA=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0440\u0438\u0441\u0443\u043d\u043a\u0430
+IDENTITY_REGISTER_TITLE_CONFIRM_DELETE=\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e: \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f
+IDENTITY_WARNING_CONFIRM_DELETE_USER=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
+IDENTITY_WARNING_CONFIRM_DELETE_ROLE=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c
+IDENTITY_REGISTER_CONFIRMATIONEMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
+
+IDENTITY_MAIL_SUBJECT_LOST_PASSWORD=\u0421\u0431\u0440\u043e\u0441 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f
+IDENTITY_MAIL_SUBJECT_REGISTER=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e
+IDENTITY_MAIL_SUBJECT_CHANGE_EMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0432\u0430\u0448 \u044d\u043b\u0435\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441
+
+IDENTITY_MANAGEMENT_ERROR_ACTION_ROLE=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0440\u043e\u043b\u044c\u044e. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0436\u0443\u0440\u043d\u0430\u043b\u0443 \u043e\u0448\u0438\u0431\u043e\u043a.
+IDENTITY_MANAGEMENT_ERROR_ACTION_USER=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0436\u0443\u0440\u043d\u0430\u043b\u0443 \u043e\u0448\u0438\u0431\u043e\u043a.
+
+IDENTITY_VERIFICATION_RETURN=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b
+IDENTITY_VERIFICATION_LOGIN=\u0412\u043e\u0439\u0442\u0438
+IDENTITY_VERIFICATION_STATUS_EROOR=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u0442\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430.
+IDENTITY_VERIFICATION_STATUS_FAILED=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u044d\u043b\u0435\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.
+IDENTITY_VERIFICATION_STATUS_VALIDATED=\u042d\u043b\u0435\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d.
+IDENTITY_VERIFICATION_STATUS_REGISTER_SUCCESS=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.
+IDENTITY_VERIFICATION_STATUS_REGISTER_APPROVAL=\u0412\u0430\u0448 \u044d\u043b\u0435\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u044b\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d, \u043d\u043e \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c.
+IDENTITY_VERIFICATION_STATUS_REGISTER_CUSTOM=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.
+
+IDENTITY_VALIDATION_ERROR_REGISTRATION=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.
+IDENTITY_VALIDATION_ERROR_USERNAME_TAKEN=\u042d\u0442\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.
+IDENTITY_VALIDATION_ERROR_USERNAME_ERROR=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.
+IDENTITY_VALIDATION_ERROR_PASSWORD_DOESNT_MATCH=\u041f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442.
+IDENTITY_VALIDATION_ERROR_PASSWORD_ERROR=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u043e\u043b\u044f.
+IDENTITY_VALIDATION_ERROR_INVALID_EMAIL=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.
+IDENTITY_VALIDATION_ERROR_INVALID_PASSWORD=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c
+IDENTITY_VALIDATION_ERROR_CAPTCHA_INCORRECT=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438
+
+# Example usage for dynamic values
+IDENTITY_DYNAMIC_VALUE_TEST=test label
+IDENTITY_DYNAMIC_VALUE_TEST2=test label2
Modified: branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -57,6 +57,7 @@
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>fr</supported-locale>
+ <supported-locale>ru</supported-locale>
<supported-locale>en</supported-locale>
<supported-locale>it</supported-locale>
<resource-bundle>conf.bundles.Identity</resource-bundle>
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-basic-samples-war/WEB-INF/default-object.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-basic-samples-war/WEB-INF/default-object.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-basic-samples-war/WEB-INF/default-object.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -36,6 +36,7 @@
<display-name xml:lang="it">Test</display-name>
<display-name xml:lang="es">Ejemplos</display-name>
<display-name xml:lang="fr">Test</display-name>
+ <display-name xml:lang="ru">Тест</display-name>
<properties>
<property>
<name>order</name>
Added: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/classes/NewsResource_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/classes/NewsResource_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/classes/NewsResource_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,25 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+javax.portlet.preference.name.RssXml=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a RSS
+javax.portlet.preference.name.expires=\u0422\u0430\u0439\u043c-\u0430\u0443\u0442
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/default-object.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/default-object.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/default-object.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -36,6 +36,7 @@
<display-name xml:lang="it">Novita'</display-name>
<display-name xml:lang="es">Noticias</display-name>
<display-name xml:lang="fr">Actualités</display-name>
+ <display-name xml:lang="ru">Новости</display-name>
<properties>
<property>
<name>order</name>
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/portlet.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-news-samples-war/WEB-INF/portlet.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -54,6 +54,7 @@
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>it</supported-locale>
+ <supported-locale>ru</supported-locale>
<resource-bundle>NewsResource</resource-bundle>
<portlet-info>
<title>News Feeds</title>
Added: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/classes/Resource_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/classes/Resource_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/classes/Resource_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,32 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+NO_USERS_ONLINE=\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435\u0442
+ONE_USER_ONLINE_0=\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d <b>
+ONE_USER_ONLINE_1=</b> \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c:
+ONE_USER_IS_0=<b>
+ONE_USER_IS_1=</b>
+USERS_ONLINE_0=\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043e <b>
+USERS_ONLINE_1=</b> \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f(\u0439):
+USERS_ARE_0=<b>
+USERS_ARE_1=</b>
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -39,6 +39,7 @@
<supported-locale>en</supported-locale>
<supported-locale>it</supported-locale>
<supported-locale>fr</supported-locale>
+ <supported-locale>ru</supported-locale>
<resource-bundle>Resource</resource-bundle>
<portlet-info>
<title>Current users</title>
Added: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_ru.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_ru.properties (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/classes/WeatherResource_ru.properties 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,28 @@
+################################################################################
+# JBoss, a division of Red Hat #
+# Copyright 2006, Red Hat Middleware, LLC, and individual #
+# contributors as indicated by the @authors tag. See the #
+# copyright.txt in the distribution for a full listing of #
+# individual contributors. #
+# #
+# This is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU Lesser General Public License as #
+# published by the Free Software Foundation; either version 2.1 of #
+# the License, or (at your option) any later version. #
+# #
+# This software 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 #
+# Lesser General Public License for more details. #
+# #
+# You should have received a copy of the GNU Lesser General Public #
+# License along with this software; if not, write to the Free #
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #
+# 02110-1301 USA, or see the FSF site: http://www.fsf.org. #
+################################################################################
+
+javax.portlet.preference.name.RssXml=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a RSS
+javax.portlet.preference.name.expires=\u0422\u0430\u0439\u043c-\u0430\u0443\u0442
+org.jboss.portal.object.name.Weather=\u041f\u043e\u0433\u043e\u0434\u0430
+
+org.jboss.portal.instance.name.WeatherPortletInstance=\u041c\u0435\u0442\u0435\u043e\u0441\u0432\u043e\u0434\u043a\u0430
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet.xml 2008-05-26 10:30:56 UTC (rev 10819)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-weather-samples-war/WEB-INF/portlet.xml 2008-05-26 11:47:32 UTC (rev 10820)
@@ -54,6 +54,7 @@
<supported-locale>fr</supported-locale>
<supported-locale>en</supported-locale>
<supported-locale>it</supported-locale>
+ <supported-locale>ru</supported-locale>
<resource-bundle>WeatherResource</resource-bundle>
<portlet-info>
<title>Weather Portlet</title>
Added: modules/identity/trunk/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- modules/identity/trunk/.settings/org.eclipse.jdt.ui.prefs (rev 0)
+++ modules/identity/trunk/.settings/org.eclipse.jdt.ui.prefs 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,3 @@
+#Mon May 26 12:22:39 CEST 2008
+eclipse.preferences.version=1
+internal.default.compliance=user
Added: modules/identity/trunk/.settings/org.maven.ide.eclipse.prefs
===================================================================
--- modules/identity/trunk/.settings/org.maven.ide.eclipse.prefs (rev 0)
+++ modules/identity/trunk/.settings/org.maven.ide.eclipse.prefs 2008-05-26 11:47:32 UTC (rev 10820)
@@ -0,0 +1,9 @@
+#Mon May 26 12:21:18 CEST 2008
+activeProfiles=
+eclipse.preferences.version=1
+filterResources=false
+includeModules=true
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+useMavenFolders=false
+version=1
16 years, 1 month
JBoss Portal SVN: r10819 - branches/JBoss_Portal_Branch_2_7/build.
by portal-commits@lists.jboss.org
Author: bdaw
Date: 2008-05-26 06:30:56 -0400 (Mon, 26 May 2008)
New Revision: 10819
Modified:
branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml
Log:
switch to snapshot
Modified: branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml 2008-05-26 08:04:11 UTC (rev 10818)
+++ branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml 2008-05-26 10:30:56 UTC (rev 10819)
@@ -51,7 +51,7 @@
<componentref name="jboss-portal/modules/web" version="1.2.0.Beta3"/>
<componentref name="jboss-portal/modules/test" version="1.0.1"/>
<componentref name="jboss-portal/modules/portlet" version="2.0.0.CR2"/>
- <componentref name="jboss-portal/modules/identity" version="1.0.1"/>
+ <componentref name="jboss-portal/modules/identity" version="1.0-SNAPSHOT"/>
<componentref name="antlr" version="2.7.6.ga"/>
<componentref name="apache-ant" version="1.6.5"/>
<componentref name="jackrabbit" version="1.1.1"/>
16 years, 1 month
JBoss Portal SVN: r10818 - in modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity: auth and 5 other directories.
by portal-commits@lists.jboss.org
Author: bdaw
Date: 2008-05-26 04:04:11 -0400 (Mon, 26 May 2008)
New Revision: 10818
Added:
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/event/UserProfileChangedEvent.java
Modified:
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/DelegatingUserProfileModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/IdentityConfiguration.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/User.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/auth/IdentityLoginModule.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/boot/IdentityServiceLoader.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserProfileModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPConnectionContext.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtRoleModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModule.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModule.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserProfileModuleImpl.java
modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/service/UserProfileModuleService.java
Log:
Sync changes from 1.0 branch
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/DelegatingUserProfileModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/DelegatingUserProfileModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/DelegatingUserProfileModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -134,6 +134,7 @@
log.debug("Delegating to DB module");
getDBModule().setProperty(user, name, propertyValue);
+ fireUserProfileChangedEvent(user.getId(), user.getUserName(), name);
return;
}
throw new IdentityException("Cannot process property - incorrect profile or module configuration");
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/IdentityConfiguration.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/IdentityConfiguration.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/IdentityConfiguration.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -71,6 +71,8 @@
public static final String USER_ALLOW_EMPTY_PASSWORDS = "allowEmptyPasswords";
+ public static final String USER_USER_NAME_TO_LOWER_CASE = "userNameToLowerCase";
+
//public static final String ROLE_CONTAINER_DN = "roleContainerDN";
public static final String ROLE_RID_ATTRIBUTE_ID = "ridAttributeID";
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/User.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/User.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/User.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -75,7 +75,7 @@
public String getUserName();
/** Set the password using proper encoding. */
- public void updatePassword(String password);
+ public void updatePassword(String password) throws IdentityException;
/** Return true if the password is valid. */
public boolean validatePassword(String password);
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/auth/IdentityLoginModule.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/auth/IdentityLoginModule.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/auth/IdentityLoginModule.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -50,7 +50,7 @@
/**
* A login module that uses the user module.
- *
+ *
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @author <a href="mailto:theute@jboss.org">Thomas Heute</a>
* @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
@@ -59,7 +59,7 @@
*/
public class IdentityLoginModule extends UsernamePasswordLoginModule
{
-
+
protected String userModuleJNDIName;
protected String roleModuleJNDIName;
@@ -72,6 +72,10 @@
protected String havingRole;
+ protected String validateUserNameCase;
+
+ protected String userNameToLowerCase;
+
public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options)
{
super.initialize(subject, callbackHandler, sharedState, options);
@@ -85,6 +89,8 @@
.get("membershipModuleJNDIName");
additionalRole = (String) options.get("additionalRole");
havingRole = (String) options.get("havingRole");
+ validateUserNameCase = (String) options.get("validateUserNameCase");
+ userNameToLowerCase = (String) options.get("userNameToLowerCase");
// Some info
log.trace("userModuleJNDIName = " + userModuleJNDIName);
@@ -93,6 +99,8 @@
log.trace("membershipModuleJNDIName = " + membershipModuleJNDIName);
log.trace("additionalRole = " + additionalRole);
log.trace("havingRole = " + havingRole);
+ log.trace("validateUserNameCase = " + validateUserNameCase);
+ log.trace("userNameToLowerCase = " + userNameToLowerCase);
}
private UserModule userModule;
@@ -178,7 +186,7 @@
// Set the user Status in the request so that the login page can show an error message accordingly
request.setAttribute("org.jboss.portal.userStatus", userStatus);
-
+
if (userStatus == UserStatus.OK)
{
return true;
@@ -218,8 +226,16 @@
// exception...
if (user == null)
{
- throw new NoSuchUserException("UserModule returned null user object");
+ throw new NoSuchUserException("UserModule returned null user object");
}
+
+ //This is because LDAP binds can be non case sensitive
+ if (validateUserNameCase != null && validateUserNameCase.equalsIgnoreCase("true")
+ && !getUsername().equals(user.getUserName()))
+ {
+ return UserStatus.UNEXISTING;
+ }
+
boolean enabled = false;
try {
Object enabledS;
@@ -331,4 +347,28 @@
{
return new UserPrincipal(username);
}
+
+ protected String getUsername()
+ {
+ if (userNameToLowerCase != null && userNameToLowerCase.equalsIgnoreCase("true"))
+ {
+ return super.getUsername().toLowerCase();
+ }
+ return super.getUsername();
+ }
+
+ protected String[] getUsernameAndPassword() throws LoginException
+ {
+ String[] names = super.getUsernameAndPassword();
+
+ if (userNameToLowerCase != null && userNameToLowerCase.equalsIgnoreCase("true"))
+ {
+ if (names[0] != null)
+ {
+ names[0] = names[0].toLowerCase();
+ }
+ }
+ return names;
+
+ }
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/boot/IdentityServiceLoader.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/boot/IdentityServiceLoader.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/boot/IdentityServiceLoader.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -100,6 +100,8 @@
unregisterMBean(ds.getServiceName());
registerMBean(ds.getServiceName(), datasource);
}
+
+
}
}
@@ -111,7 +113,7 @@
ModuleServiceMetaData moduleService = (ModuleServiceMetaData)iterator.next();
ModuleMetaData module = moduleService.getModuleData();
-
+
String entryName = "portal:identity=Module,type=" + module.getType();
AbstractBeanMetaData moduleBMD = new AbstractBeanMetaData(entryName,
module.getClassName());
@@ -148,8 +150,10 @@
{
unregisterMBean(module.getServiceName());
registerMBean(module.getServiceName(), moduleServiceObject);
+
}
}
+
}
/**
@@ -157,7 +161,7 @@
* @param serviceName
* @param serviceObject
*/
- protected void registerMBean(String serviceName, Object serviceObject) throws Exception
+ protected void unregisterMBean(String serviceName) throws Exception
{
//does nothing
}
@@ -167,7 +171,7 @@
* @param serviceName
* @param serviceObject
*/
- protected void unregisterMBean(String serviceName) throws Exception
+ protected void registerMBean(String serviceName, Object serviceObject) throws Exception
{
//does nothing
}
@@ -178,7 +182,7 @@
*/
protected ServiceJNDIBinder getServiceJNDIBinder() throws Exception
{
- return null;
+ return null;
}
public IdentityContext getIdentityContext()
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -25,6 +25,7 @@
import org.jboss.portal.common.util.Tools;
import org.jboss.portal.common.p3p.P3PConstants;
import org.jboss.portal.identity.ProfileMap;
+import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.db.ProfileMapImpl;
import java.util.Map;
@@ -216,7 +217,7 @@
this.familyName = familyName;
}
- public void updatePassword(String password)
+ public void updatePassword(String password) throws IdentityException
{
this.password = Tools.md5AsHexString(password);
}
@@ -400,7 +401,7 @@
Object object = toObject((String)value);
field.set(instance, object);
-
+
}
else
{
@@ -550,7 +551,7 @@
catch (ParseException e)
{
throw new IllegalArgumentException("Can't convert the date in the user profile. value=[" + value + "].", e);
- }
+ }
}
protected String toString(Object value)
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserProfileModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserProfileModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/db/HibernateUserProfileModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -162,6 +162,7 @@
{
dbUser.getProfileMap().remove(propertyName);
}
+ fireUserProfileChangedEvent(user.getId(), user.getUserName(), propertyName);
}
public Map getProperties(User user) throws IdentityException
Added: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/event/UserProfileChangedEvent.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/event/UserProfileChangedEvent.java (rev 0)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/event/UserProfileChangedEvent.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -0,0 +1,79 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software 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 *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.identity.event;
+
+/**
+ * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
+ * @version $Revision: 1.1 $
+ */
+public class UserProfileChangedEvent extends IdentityEvent
+{
+
+ /** . */
+ private final Object userId;
+
+ /** . */
+ private final String userName;
+
+ /** . */
+ private final String propertyName;
+
+ public UserProfileChangedEvent(Object userId, String userName, String propertyName)
+ {
+ if (userId == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ if (userName == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ if (propertyName == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ this.userId = userId;
+ this.userName = userName;
+ this.propertyName = propertyName;
+ }
+
+ public Object getUserId()
+ {
+ return userId;
+ }
+
+ public String getUserName()
+ {
+ return userName;
+ }
+
+ public String getPropertyName()
+ {
+ return propertyName;
+ }
+
+ public String toString()
+ {
+ return "UserProfileChangedEvent[userId=" + userId + ",userName=" + userName + ",propertyName=" + propertyName + "]";
+ }
+}
\ No newline at end of file
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPConnectionContext.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPConnectionContext.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPConnectionContext.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -110,27 +110,31 @@
env.put(CONNECTION_POOL, "true");
if (getPoolingDebug() != null)
{
- env.put(CONNECTION_POOL_DEBUG, getPoolingDebug());
+ System.setProperty(CONNECTION_POOL_DEBUG, getPoolingDebug());
}
if (getPoolingInitsize() != null)
{
- env.put(CONNECTION_POOL_INITSIZE, getPoolingInitsize());
+ System.setProperty(CONNECTION_POOL_INITSIZE, getPoolingInitsize());
}
if (getPoolingMaxsize() != null)
{
- env.put(CONNECTION_POOL_MAXSIZE, getPoolingMaxsize());
+ System.setProperty(CONNECTION_POOL_MAXSIZE, getPoolingMaxsize());
}
if (getPoolingPrefsize() != null)
{
- env.put(CONNECTION_POOL_PREFSIZE, getPoolingPrefsize());
+ System.setProperty(CONNECTION_POOL_PREFSIZE, getPoolingPrefsize());
}
if (getPoolingProtocol() != null)
{
- env.put(CONNECTION_POOL_PROTOCOL, getPoolingProtocol());
+ System.setProperty(CONNECTION_POOL_PROTOCOL, getPoolingProtocol());
}
+ else
+ {
+ System.setProperty(CONNECTION_POOL_PROTOCOL, "plain ssl");
+ }
if (getPoolingTimeout() != null)
{
- env.put(CONNECTION_POOL_TIMEOUT, getPoolingTimeout());
+ System.setProperty(CONNECTION_POOL_TIMEOUT, getPoolingTimeout());
}
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtRoleModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtRoleModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtRoleModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -28,6 +28,7 @@
import org.jboss.portal.identity.Role;
import javax.naming.NamingException;
+import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
@@ -210,6 +211,7 @@
{
LdapContext ldapContext = getConnectionContext().createInitialContext();
+ NamingEnumeration results = null;
try
{
@@ -236,7 +238,7 @@
if (roleCtxs.size() == 1)
{
- Enumeration results = null;
+
if (filterArgs == null)
{
results = ldapContext.search(getRoleCtxDN(), filter, controls);
@@ -256,7 +258,7 @@
for (Iterator iterator = roleCtxs.iterator(); iterator.hasNext();)
{
String roleCtx = (String)iterator.next();
- Enumeration results = null;
+
if (filterArgs == null)
{
results = ldapContext.search(roleCtx, filter, controls);
@@ -266,6 +268,7 @@
results = ldapContext.search(roleCtx, filter, filterArgs, controls);
}
merged.addAll(Tools.toList(results));
+ results.close();
}
return merged;
@@ -273,6 +276,10 @@
}
finally
{
+ if (results != null)
+ {
+ results.close();
+ }
ldapContext.close();
}
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPExtUserModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -30,6 +30,7 @@
import javax.naming.Context;
import javax.naming.NamingException;
+import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.LdapContext;
@@ -104,7 +105,6 @@
throw new IdentityException("Failed to close LDAP connection", e);
}
}
-
throw new NoSuchUserException("No user found with name: " + userName);
}
@@ -156,8 +156,6 @@
filter = "*" + filter + "*";
}
- Enumeration results = null;
-
String ldap_filter = getUserSearchFilter();
//* chars are escaped in filterArgs so we must replace it manually
@@ -238,6 +236,7 @@
{
LdapContext ldapContext = getConnectionContext().createInitialContext();
+ NamingEnumeration results = null;
try
{
@@ -261,7 +260,6 @@
if (userCtxs.size() == 1)
{
- Enumeration results = null;
if (filterArgs == null)
{
results = ldapContext.search(getUserSearchCtxDN(), filter, controls);
@@ -281,7 +279,6 @@
for (Iterator iterator = userCtxs.iterator(); iterator.hasNext();)
{
String userCtx = (String)iterator.next();
- Enumeration results = null;
if (filterArgs == null)
{
results = ldapContext.search(userCtx, filter, controls);
@@ -291,6 +288,7 @@
results = ldapContext.search(userCtx, filter, filterArgs, controls);
}
merged.addAll(Tools.toList(results));
+ results.close();
}
return merged;
@@ -298,6 +296,10 @@
}
finally
{
+ if (results != null)
+ {
+ results.close();
+ }
ldapContext.close();
}
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModule.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModule.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModule.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -104,7 +104,7 @@
- protected LDAPRoleImpl createRoleInstance(Attributes attrs, String dn) throws IdentityException
+ public LDAPRoleImpl createRoleInstance(Attributes attrs, String dn) throws IdentityException
{
LDAPRoleImpl ldapr = null;
try
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPRoleModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -328,7 +328,7 @@
{
LdapContext ldapContext = getConnectionContext().createInitialContext();
-
+ NamingEnumeration results = null;
try
{
SearchControls controls = new SearchControls();
@@ -339,7 +339,7 @@
filter = filter.replaceAll("\\\\", "\\\\\\\\");
log.debug("Search filter: " + filter);
- Enumeration results = null;
+
if (filterArgs == null)
{
results = ldapContext.search(getContainerDN(), filter, controls);
@@ -352,6 +352,10 @@
}
finally
{
+ if (results != null)
+ {
+ results.close();
+ }
ldapContext.close();
}
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -100,7 +100,7 @@
this.identityContext = context;
//this.realEmail = email;
this.id = id;
-
+
}
public boolean equals(Object obj)
@@ -124,7 +124,7 @@
return id.hashCode()*13 + 5;
}
- public void updatePassword(String password)
+ public void updatePassword(String password) throws IdentityException
{
if (password == null)
{
@@ -137,6 +137,7 @@
catch (IdentityException e)
{
log.debug("Password update failure: " + e);
+ throw new IdentityException("Password update failure: " + e);
}
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModule.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModule.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModule.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -199,8 +199,16 @@
//make DN as user ID
ldapu = new LDAPUserImpl(dn,getIdentityContext(), dn);
- ldapu.setUserName(uida.get().toString());
+ if (isUserNameToLowerCase())
+ {
+ ldapu.setUserName(uida.get().toString().toLowerCase());
+ }
+ else
+ {
+ ldapu.setUserName(uida.get().toString());
+ }
+
log.debug("user uid: " + ldapu.getId());
log.debug("user dn: " + ldapu.getDn());
@@ -415,7 +423,16 @@
return Boolean.FALSE.booleanValue();
}
+ protected boolean isUserNameToLowerCase()
+ {
+ String userNameToLowerCase = getIdentityConfiguration().getValue(IdentityConfiguration.USER_USER_NAME_TO_LOWER_CASE);
+ if (userNameToLowerCase != null && userNameToLowerCase.equalsIgnoreCase("true"))
+ {
+ return Boolean.TRUE.booleanValue();
+ }
+ return Boolean.FALSE.booleanValue();
+ }
/*protected String getEmailAttributeId() throws IdentityException
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -30,6 +30,7 @@
import javax.naming.NamingException;
import javax.naming.Context;
+import javax.naming.NamingEnumeration;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
@@ -394,10 +395,10 @@
log.debug("Search filter: " + filter);
LdapContext ldapContext = getConnectionContext().createInitialContext();
-
+ NamingEnumeration results = null;
try
{
- Enumeration results = null;
+
if (filterArgs == null)
{
results = ldapContext.search(getContainerDN(), filter, controls);
@@ -411,7 +412,15 @@
}
finally
{
- ldapContext.close();
+ if (results != null)
+ {
+ results.close();
+ }
+ if (ldapContext != null)
+ {
+ ldapContext.close();
+ }
+
}
}
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserProfileModuleImpl.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserProfileModuleImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/ldap/LDAPUserProfileModuleImpl.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -214,6 +214,7 @@
attrs.put(attr);
ldapContext.modifyAttributes(ldapUser.getDn(), DirContext.REPLACE_ATTRIBUTE,attrs);
+ fireUserProfileChangedEvent(user.getId(), user.getUserName(), propertyName);
}
catch (NamingException e)
{
Modified: modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/service/UserProfileModuleService.java
===================================================================
--- modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/service/UserProfileModuleService.java 2008-05-26 07:24:48 UTC (rev 10817)
+++ modules/identity/trunk/identity/src/main/java/org/jboss/portal/identity/service/UserProfileModuleService.java 2008-05-26 08:04:11 UTC (rev 10818)
@@ -23,6 +23,9 @@
import org.jboss.portal.identity.IdentityContext;
import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.identity.IdentityException;
+import org.jboss.portal.identity.event.IdentityEvent;
+import org.jboss.portal.identity.event.UserProfileChangedEvent;
import org.jboss.portal.identity.metadata.profile.info.ProfileInfoSupport;
import org.jboss.portal.identity.metadata.config.ConfigurationParser;
import org.jboss.portal.identity.info.ProfileInfo;
@@ -51,13 +54,13 @@
{
if (log.isDebugEnabled())
{
- log.debug("Processing profile configuration for the module....");
+ log.debug("Processing profile configuration for the module....");
}
profileInfo = new ProfileInfoSupport(ConfigurationParser.parseProfileConfiguration(getProfileConfigFile()));
}
super.start();
-
+
}
// public ProfileInfo getProfileInfo() throws IdentityException
@@ -79,5 +82,12 @@
{
this.profileConfigFile = profileConfigFile;
}
+
+ protected void fireUserProfileChangedEvent(Object userId, String userName, String propertyName) throws IdentityException
+ {
+ IdentityEvent event = new UserProfileChangedEvent(userId, userName, propertyName);
+ getIdentityEventBroadcaster().fireEvent(event);
+ }
+
}
16 years, 1 month
JBoss Portal SVN: r10817 - in branches/JBoss_Portal_Branch_2_7: core/src/main/org/jboss/portal/core/aspects/server and 9 other directories.
by portal-commits@lists.jboss.org
Author: bdaw
Date: 2008-05-26 03:24:48 -0400 (Mon, 26 May 2008)
New Revision: 10817
Added:
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/aspects/server/IdentityCacheInterceptor.java
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPRoleModuleWrapper.java
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPUserModuleWrapper.java
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedUserProfileModuleWrapper.java
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/IdentityCacheService.java
Modified:
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java
branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/common/IdentityUserBean.java
branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/service/IdentityServiceControllerImpl.java
branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/command/render/RenderPageCommand.java
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/profile-config.xml
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/login-config.xml
Log:
Syncing changes from 2.6 branch
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/security/AuthorizationProviderImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -30,7 +30,6 @@
import org.jboss.portal.identity.IdentityContext;
import org.jboss.portal.identity.IdentityServiceController;
import org.jboss.portal.identity.IdentityConfiguration;
-import org.jboss.portal.identity.IdentityContext;
import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.MembershipModule;
import org.jboss.portal.identity.Role;
@@ -42,11 +41,16 @@
import org.jboss.portal.security.spi.provider.PermissionFactory;
import org.jboss.portal.security.spi.provider.PermissionRepository;
import org.jboss.portal.security.spi.provider.SecurityConfigurationException;
+import org.jboss.portal.security.impl.jacc.JACCPortalPrincipal;
+import javax.security.auth.Subject;
+import javax.security.jacc.PolicyContext;
+import javax.security.jacc.PolicyContextException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.security.Principal;
/**
* Created on : Jan 23, 2007
@@ -61,9 +65,11 @@
private MembershipModule membershipModule = null;
private UserModule userModule = null;
-
+
private String cmsRootUserName = null;
+ private User adminUser = null;
+
/**
*
*/
@@ -110,9 +116,9 @@
{
return this.getClass().getName();
}
-
+
/**
- *
+ *
* @return
*/
public String getCmsRootUserName()
@@ -121,7 +127,7 @@
}
/**
- *
+ *
* @param cmsRootUserName
*/
public void setCmsRootUserName(String cmsRootUserName)
@@ -207,33 +213,40 @@
return permissions;
}
-
+
/**
- *
+ *
*/
public User getRoot()
{
- Session session = Tools.getOpenSession();
- Transaction tx = session.beginTransaction();
- try
+
+ if (adminUser == null)
{
- User cmsRoot = this.userModule.findUserByUserName(this.cmsRootUserName);
- tx.commit();
- return cmsRoot;
+ Session session = Tools.getOpenSession();
+ Transaction tx = session.beginTransaction();
+ try
+ {
+ adminUser = this.userModule.findUserByUserName(this.cmsRootUserName);
+ tx.commit();
+ }
+ catch(Exception e)
+ {
+ tx.rollback();
+ throw new RuntimeException(e);
+ }
+ finally
+ {
+ Tools.closeSession(session);
+ }
}
- catch(Exception e)
- {
- tx.rollback();
- throw new RuntimeException(e);
- }
- finally
- {
- Tools.closeSession(session);
- }
+
+ return adminUser;
+
+
}
-
+
/**
- *
+ *
* @return
*/
public String getDefaultAdminRole()
@@ -241,11 +254,11 @@
try
{
String defaultAdminRole = null;
-
+
IdentityConfiguration configuration = (IdentityConfiguration)this.identityServiceController.getIdentityContext().
getObject(IdentityContext.TYPE_IDENTITY_CONFIGURATION);
defaultAdminRole = configuration.getValue(IdentityConfiguration.ROLE_DEFAULT_ADMIN_ROLE);
-
+
return defaultAdminRole;
}
catch(IdentityException ie)
@@ -435,17 +448,21 @@
}
else
{
+
+
// in the case of LDAP use the IdentityModule
// now find permissions for all the roles that this user belongs to
- Set belongedRoles = this.membershipModule.getRoles(this.userModule
- .findUserByUserName(userId));
+ //Set belongedRoles = this.membershipModule.getRoles(this.userModule
+ // .findUserByUserName(userId));
+
+ Set belongedRoles = getCurrentRoles();
+
if (belongedRoles != null)
{
for (Iterator itr = belongedRoles.iterator(); itr.hasNext();)
{
- Role role = (Role)itr.next();
- Collection rolePermissions = this.findPermissionsByRole(role
- .getName());
+ String role = (String)itr.next();
+ Collection rolePermissions = this.findPermissionsByRole(role);
if (rolePermissions != null && !rolePermissions.isEmpty())
{
permissions.addAll(rolePermissions);
@@ -453,7 +470,7 @@
}
}
}
-
+
tx.commit();
return permissions;
@@ -490,7 +507,7 @@
roleQuery.setString(0, roleId);
roleQuery.setCacheable(true);
permissions.addAll(roleQuery.list());
-
+
tx.commit();
}
catch (Exception e)
@@ -528,7 +545,7 @@
criteriaQuery.setString(1, criteria.getValue());
criteriaQuery.setCacheable(true);
permissions.addAll(criteriaQuery.list());
-
+
tx.commit();
}
catch (Exception e)
@@ -543,4 +560,39 @@
return permissions;
}
+
+ private Set getCurrentRoles() throws PolicyContextException
+ {
+ Set<String> roles = new HashSet<String>();
+
+ // Get the current authenticated subject through the JACC contract
+ Subject subject = (Subject)PolicyContext.getContext("javax.security.auth.Subject.container");
+
+ if (subject != null)
+ {
+ Set tmp = subject.getPrincipals(JACCPortalPrincipal.class);
+ JACCPortalPrincipal pp = null;
+ for (Iterator i = tmp.iterator(); i.hasNext();)
+ {
+ pp = (JACCPortalPrincipal)i.next();
+ if (pp != null)
+ {
+ break;
+ }
+ }
+ if (pp == null)
+ {
+ pp = new JACCPortalPrincipal(subject);
+ tmp.add(pp);
+
+ // Lazy create all the permission containers for the given role names
+ for (Iterator i = pp.getRoles().iterator(); i.hasNext();)
+ {
+ Principal role = (Principal)i.next();
+ roles.add(role.getName());
+ }
+ }
+ }
+ return roles;
+ }
}
Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/aspects/server/IdentityCacheInterceptor.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/aspects/server/IdentityCacheInterceptor.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/aspects/server/IdentityCacheInterceptor.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -0,0 +1,88 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.aspects.server;
+
+import org.jboss.portal.core.identity.cache.IdentityCacheService;
+import org.jboss.portal.server.ServerInterceptor;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.common.invocation.InvocationException;
+import org.jboss.logging.Logger;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+/**
+ * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class IdentityCacheInterceptor extends ServerInterceptor
+{
+
+ /** Our logger. */
+ private static final Logger log = Logger.getLogger(IdentityCacheInterceptor.class);
+
+ private IdentityCacheService identityCacheService;
+
+ public IdentityCacheService getIdentityCacheService()
+ {
+ if (identityCacheService == null)
+ {
+ try
+ {
+ identityCacheService = (IdentityCacheService)new InitialContext().lookup(IdentityCacheService.JNDI_NAME);
+ }
+ catch (NamingException e)
+ {
+ log.debug("Could not obtain IdentityCacheService. Setting empty wrapper");
+ identityCacheService = new EmptyIdentityCache();
+ }
+ }
+ return identityCacheService;
+ }
+
+ protected void invoke(ServerInvocation invocation) throws Exception, InvocationException
+ {
+
+ try
+ {
+ invocation.invokeNext();
+ }
+ finally
+ {
+ IdentityCacheService cache = getIdentityCacheService();
+ if (cache != null)
+ {
+ cache.cleanup();
+ }
+ }
+
+ }
+
+ private class EmptyIdentityCache extends IdentityCacheService
+ {
+ public void cleanup()
+ {
+ // Do nothing
+ }
+ }
+}
Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPRoleModuleWrapper.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPRoleModuleWrapper.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPRoleModuleWrapper.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -0,0 +1,161 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.identity.cache;
+
+import org.jboss.portal.identity.ldap.LDAPRoleModule;
+import org.jboss.portal.identity.ldap.LDAPRoleImpl;
+import org.jboss.portal.identity.RoleModule;
+import org.jboss.portal.identity.Role;
+import org.jboss.portal.identity.IdentityException;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import java.util.Set;
+import java.util.List;
+import java.util.HashSet;
+
+/**
+ * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class CachedLDAPRoleModuleWrapper extends LDAPRoleModule implements RoleModule
+{
+ private LDAPRoleModule ldapRoleModule;
+
+ private IdentityCacheService cacheService;
+
+ public CachedLDAPRoleModuleWrapper(LDAPRoleModule ldapRoleModule, IdentityCacheService cacheService)
+ {
+ this.ldapRoleModule = ldapRoleModule;
+ this.cacheService = cacheService;
+ }
+
+ public Role findRoleByName(String name) throws IdentityException, IllegalArgumentException
+ {
+ Role role = cacheService.findRoleByName(name);
+
+ if (role != null)
+ {
+ return role;
+ }
+
+ return ldapRoleModule.findRoleByName(name);
+ }
+
+ public Set findRolesByNames(String[] names) throws IdentityException, IllegalArgumentException
+ {
+
+ //Check if all roles needed are in cache. If not just delegate to the wrapped module
+ Set roles = new HashSet();
+
+ for (String name : names)
+ {
+ Role role = cacheService.findRoleByName(name);
+ if (role != null)
+ {
+ roles.add(role);
+ }
+ else
+ {
+ roles = ldapRoleModule.findRolesByNames(names);
+ break;
+ }
+ }
+
+ return roles;
+ }
+
+ public Role findRoleById(Object id) throws IdentityException, IllegalArgumentException
+ {
+ Role role = cacheService.findRoleById(id);
+
+ if (role != null)
+ {
+ return role;
+ }
+
+ return ldapRoleModule.findRoleById(id);
+ }
+
+ public Role findRoleById(String id) throws IdentityException, IllegalArgumentException
+ {
+ return this.findRoleById((Object)id);
+ }
+
+ public Role createRole(String name, String displayName) throws IdentityException, IllegalArgumentException
+ {
+ Role role = ldapRoleModule.createRole(name, displayName);
+
+ cacheService.storeRole(role);
+
+ return role;
+ }
+
+ public void removeRole(Object id) throws IdentityException, IllegalArgumentException
+ {
+ ldapRoleModule.removeRole(id);
+
+ // Invalidate this role in cache
+ Role role = cacheService.findRoleById(id);
+ if (role != null)
+ {
+ cacheService.invalidateRole(role);
+ }
+ }
+
+ public int getRolesCount() throws IdentityException
+ {
+ return ldapRoleModule.getRolesCount();
+ }
+
+ public Set findRoles() throws IdentityException
+ {
+ return ldapRoleModule.findRoles();
+ }
+
+ public List searchRoles(String filter, Object[] filterArgs) throws NamingException, IdentityException
+ {
+ return ldapRoleModule.searchRoles(filter, filterArgs);
+ }
+
+ // Methods of LDAPRoleModule - need to delegate for compatibility
+
+ public void updateDisplayName(LDAPRoleImpl ldapr, String name) throws IdentityException
+ {
+ ldapRoleModule.updateDisplayName(ldapr, name);
+
+ cacheService.invalidateRole(ldapr);
+ }
+
+ public LDAPRoleImpl createRoleInstance(Attributes attrs, String dn) throws IdentityException
+ {
+ return ldapRoleModule.createRoleInstance(attrs, dn);
+ }
+
+ public Role findRoleByDN(String dn) throws IdentityException, IllegalArgumentException
+ {
+ return ldapRoleModule.findRoleByDN(dn);
+ }
+
+
+}
Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPUserModuleWrapper.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPUserModuleWrapper.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedLDAPUserModuleWrapper.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -0,0 +1,168 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.identity.cache;
+
+import org.jboss.portal.identity.UserModule;
+import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.IdentityException;
+import org.jboss.portal.identity.NoSuchUserException;
+import org.jboss.portal.identity.IdentityContext;
+import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.identity.Role;
+import org.jboss.portal.identity.ldap.LDAPUserModule;
+import org.jboss.portal.identity.ldap.LDAPUserImpl;
+import org.jboss.portal.identity.ldap.LDAPConnectionContext;
+import org.jboss.portal.identity.service.IdentityModuleService;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import java.util.Set;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class CachedLDAPUserModuleWrapper extends LDAPUserModule implements UserModule
+{
+ private LDAPUserModule userModule;
+
+ private IdentityCacheService cacheService;
+
+ private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(CachedLDAPUserModuleWrapper.class);
+
+ public CachedLDAPUserModuleWrapper(LDAPUserModule userModule, IdentityCacheService cacheService)
+ {
+ this.userModule = userModule;
+ this.cacheService = cacheService;
+ }
+
+
+ public User findUserByUserName(String userName) throws IdentityException, IllegalArgumentException, NoSuchUserException
+ {
+ if (userName == null)
+ {
+ throw new IllegalArgumentException("UserName cannot be null");
+ }
+
+ User user = cacheService.findUserByUserName(userName);
+
+ if (user != null)
+ {
+ return user;
+ }
+
+ user = userModule.findUserByUserName(userName);
+
+ cacheService.storeUser(user);
+
+ return user;
+ }
+
+ public User findUserById(Object id) throws IdentityException, IllegalArgumentException, NoSuchUserException
+ {
+ if (id == null)
+ {
+ throw new IllegalArgumentException("User id cannot be null");
+ }
+
+ User user = cacheService.findUserById(id);
+
+ if (user != null)
+ {
+ return user;
+ }
+
+ user = userModule.findUserById(id);
+
+ cacheService.storeUser(user);
+
+ return user;
+ }
+
+ public User findUserById(String id) throws IdentityException, IllegalArgumentException, NoSuchUserException
+ {
+ return findUserById((Object)id);
+ }
+
+ public User createUser(String userName, String password) throws IdentityException, IllegalArgumentException
+ {
+ return userModule.createUser(userName, password);
+ }
+
+ public void removeUser(Object id) throws IdentityException, IllegalArgumentException
+ {
+ userModule.removeUser(id);
+
+ // Invalidate this user in cache
+ User user = cacheService.findUserById(id);
+ if (user != null)
+ {
+ cacheService.invalidateUser(user);
+ }
+ }
+
+ public Set findUsers(int offset, int limit) throws IdentityException, IllegalArgumentException
+ {
+ return userModule.findUsers(offset, limit);
+ }
+
+ public Set findUsersFilteredByUserName(String filter, int offset, int limit) throws IdentityException, IllegalArgumentException
+ {
+ return userModule.findUsersFilteredByUserName(filter, offset, limit);
+ }
+
+ public int getUserCount() throws IdentityException, IllegalArgumentException
+ {
+ return userModule.getUserCount();
+ }
+
+ public List searchUsers(String filter, Object[] filterArgs) throws NamingException, IdentityException
+ {
+ return userModule.searchUsers(filter, filterArgs);
+ }
+
+ public void updatePassword(LDAPUserImpl ldapu, String password) throws IdentityException
+ {
+ userModule.updatePassword(ldapu, password);
+ }
+
+ public boolean validatePassword(LDAPUserImpl ldapu, String password) throws IdentityException
+ {
+ return userModule.validatePassword(ldapu, password);
+ }
+
+ // Methods of LDAPUserModule - need to delegate for compatibility
+ public LDAPUserImpl createUserInstance(Attributes attrs, String dn) throws IdentityException
+ {
+ return userModule.createUserInstance(attrs, dn);
+ }
+
+ public User findUserByDN(String dn) throws IdentityException, IllegalArgumentException, NoSuchUserException
+ {
+ return userModule.findUserByDN(dn);
+ }
+
+
+}
Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedUserProfileModuleWrapper.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedUserProfileModuleWrapper.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/CachedUserProfileModuleWrapper.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -0,0 +1,95 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.identity.cache;
+
+import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.IdentityException;
+import org.jboss.portal.identity.info.ProfileInfo;
+import org.jboss.logging.Logger;
+
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class CachedUserProfileModuleWrapper implements UserProfileModule
+{
+
+ private static final Logger log = Logger.getLogger(CachedUserProfileModuleWrapper.class);
+
+ private UserProfileModule userProfileModule;
+
+ private IdentityCacheService cacheService;
+
+ public CachedUserProfileModuleWrapper(UserProfileModule userProfileModule, IdentityCacheService identityCacheService)
+ {
+ this.userProfileModule = userProfileModule;
+ this.cacheService = identityCacheService;
+ }
+
+ public Object getProperty(User user, String propertyName) throws IdentityException, IllegalArgumentException
+ {
+ // Just grab the whole profile and check if this property is there
+
+ Map profile = this.getProperties(user);
+
+ if (profile != null && profile.containsKey(propertyName))
+ {
+
+ return profile.get(propertyName);
+ }
+
+ // else delegate to the wrapped implementation
+
+ return userProfileModule.getProperty(user, propertyName);
+
+ }
+
+ public void setProperty(User user, String name, Object property) throws IdentityException, IllegalArgumentException
+ {
+ userProfileModule.setProperty(user, name, property);
+ cacheService.invalidateProfile(user);
+
+ }
+
+ public Map getProperties(User user) throws IdentityException, IllegalArgumentException
+ {
+ Map profile = cacheService.findUserProfileById(user.getId());
+
+ if (profile != null)
+ {
+ return profile;
+ }
+
+ profile = userProfileModule.getProperties(user);
+ cacheService.storeProfile(user, profile);
+ return profile;
+ }
+
+ public ProfileInfo getProfileInfo() throws IdentityException
+ {
+ return userProfileModule.getProfileInfo();
+ }
+}
Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/IdentityCacheService.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/IdentityCacheService.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/cache/IdentityCacheService.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -0,0 +1,258 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.identity.cache;
+
+import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.Role;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class IdentityCacheService
+{
+ private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(IdentityCacheService.class);
+
+ public final static String JNDI_NAME = "java:portal/IdentityCacheService";
+
+ protected ThreadLocal<Map<String, User>> userNameCache = new ThreadLocal<Map<String, User>>();
+
+ protected ThreadLocal<Map<Object, User>> userIdCache = new ThreadLocal<Map<Object, User>>();
+
+ protected ThreadLocal<Map<Object, Map>> profileCache = new ThreadLocal<Map<Object, Map>>();
+
+ protected ThreadLocal<Map<String, Role>> roleNameCache = new ThreadLocal<Map<String, Role>>();
+
+ protected ThreadLocal<Map<Object, Role>> roleIdCache = new ThreadLocal<Map<Object, Role>>();
+
+
+ public void cleanup()
+ {
+ userNameCache.set(null);
+ userIdCache.set(null);
+ profileCache.set(null);
+ roleNameCache.set(null);
+ roleIdCache.set(null);
+
+ log.debug("Identity cache invalidated");
+ }
+
+ private Map<String, User> getUserNameCache()
+ {
+ if (userNameCache.get() == null)
+ {
+ userNameCache.set(new HashMap<String, User>());
+ }
+ return userNameCache.get();
+ }
+
+ private Map<Object, User> getUserIdCache()
+ {
+ if (userIdCache.get() == null)
+ {
+ userIdCache.set(new HashMap<Object, User>());
+ }
+ return userIdCache.get();
+ }
+
+ private Map<Object, Map> getProfileCache()
+ {
+ if (profileCache.get() == null)
+ {
+ profileCache.set(new HashMap<Object, Map>());
+ }
+ return profileCache.get();
+ }
+
+ private Map<String, Role> getRoleNameCache()
+ {
+ if (roleNameCache.get() == null)
+ {
+ roleNameCache.set(new HashMap<String, Role>());
+ }
+ return roleNameCache.get();
+ }
+
+ private Map<Object, Role> getRoleIdCache()
+ {
+ if (roleIdCache.get() == null)
+ {
+ roleIdCache.set(new HashMap<Object, Role>());
+ }
+ return roleIdCache.get();
+ }
+
+ public void storeUser(User user)
+ {
+ // We want to be transparent so just ignore null argument
+ if (user != null)
+ {
+ getUserIdCache().put(user.getId(), user);
+ getUserNameCache().put(user.getUserName(), user);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("User cached for id=" + user.getId() + "; username=" + user.getUserName());
+ }
+ }
+ }
+
+ public void invalidateUser(User user)
+ {
+ // We want to be transparent so just ignore null argument
+ if (user != null)
+ {
+ getUserIdCache().put(user.getId(), null);
+ getUserNameCache().put(user.getUserName(), null);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("User invalidated in cache for id=" + user.getId() + "; username=" + user.getUserName());
+ }
+ }
+ }
+
+ public void storeProfile(User user, Map profile)
+ {
+ // We want to be transparent so just ignore null argument
+ if (user != null && profile != null)
+ {
+ getProfileCache().put(user.getId(), profile);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("User profile cached for id=" + user.getId());
+ }
+ }
+ }
+
+
+ public void invalidateProfile(User user)
+ {
+ // We want to be transparent so just ignore null argument
+ if (user != null)
+ {
+ getProfileCache().put(user.getId(), null);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("User profile invalidated in cache for id=" + user.getId());
+ }
+ }
+ }
+
+ public void storeRole(Role role)
+ {
+ // We want to be transparent so just ignore null argument
+ if (role != null)
+ {
+ getRoleIdCache().put(role.getId(), role);
+ getRoleNameCache().put(role.getName(), role);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("Role cached for id=" + role.getId() + "; name=" + role.getName());
+ }
+ }
+ }
+
+ public void invalidateRole(Role role)
+ {
+ // We want to be transparent so just ignore null argument
+ if (role != null)
+ {
+ getRoleIdCache().put(role.getId(), null);
+ getRoleNameCache().put(role.getName(), null);
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("Role invalidated in cache for id=" + role.getId() + "; name=" + role.getName());
+ }
+ }
+ }
+
+ public User findUserByUserName(String userName)
+ {
+ User user = getUserNameCache().get(userName);
+
+ if (user != null && log.isDebugEnabled())
+ {
+ log.debug("User retreived from cache for username=" + user.getUserName());
+ }
+
+ return user;
+ }
+
+ public User findUserById(Object id)
+ {
+ User user = getUserIdCache().get(id);
+
+ if (user != null && log.isDebugEnabled())
+ {
+ log.debug("User retreived from cache for id=" + user.getId());
+ }
+
+ return user;
+ }
+
+ public Map findUserProfileById(Object id)
+ {
+ Map profile = getProfileCache().get(id);
+
+ if (profile != null && log.isDebugEnabled())
+ {
+ log.debug("User profile retreived from cache for user id=" + id);
+ }
+
+ return profile;
+ }
+
+ public Role findRoleByName(String roleName)
+ {
+ Role role = getRoleNameCache().get(roleName);
+
+ if (role != null && log.isDebugEnabled())
+ {
+ log.debug("Role retreived from cache for name=" + role.getName());
+ }
+
+ return role;
+ }
+
+ public Role findRoleById(Object id)
+ {
+ Role role = getRoleIdCache().get(id);
+
+ if (role != null && log.isDebugEnabled())
+ {
+ log.debug("Role retreived from cache for id=" + role.getId());
+ }
+
+ return role;
+ }
+
+
+}
Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/service/IdentityServiceControllerImpl.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/service/IdentityServiceControllerImpl.java 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/identity/service/IdentityServiceControllerImpl.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -30,16 +30,31 @@
import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.IdentityServiceController;
import org.jboss.portal.identity.ServiceJNDIBinder;
+import org.jboss.portal.identity.UserModule;
+import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.identity.DelegatingUserProfileModuleImpl;
+import org.jboss.portal.identity.RoleModule;
+import org.jboss.portal.identity.ldap.LDAPUserModule;
+import org.jboss.portal.identity.ldap.LDAPUserProfileModule;
+import org.jboss.portal.identity.ldap.LDAPRoleModule;
import org.jboss.portal.identity.boot.IdentityServiceLoader;
import org.jboss.portal.identity.event.IdentityEvent;
import org.jboss.portal.identity.event.IdentityEventBroadcaster;
import org.jboss.portal.identity.metadata.service.IdentityServicesMetaData;
+import org.jboss.portal.identity.metadata.service.ModuleServiceMetaData;
+import org.jboss.portal.identity.metadata.config.ModuleMetaData;
import org.jboss.portal.identity.service.IdentityConfigurationService;
+import org.jboss.portal.identity.service.UserProfileModuleService;
import org.jboss.portal.jems.as.JNDI;
import org.jboss.portal.jems.as.system.AbstractJBossService;
import org.jboss.portal.jems.as.system.JBossServiceModelMBean;
+import org.jboss.portal.core.identity.cache.CachedLDAPUserModuleWrapper;
+import org.jboss.portal.core.identity.cache.IdentityCacheService;
+import org.jboss.portal.core.identity.cache.CachedUserProfileModuleWrapper;
+import org.jboss.portal.core.identity.cache.CachedLDAPRoleModuleWrapper;
import javax.management.ObjectName;
+import java.util.List;
/**
* @author <a href="mailto:boleslaw dot dawidowicz at jboss.org">Boleslaw Dawidowicz</a>
@@ -64,6 +79,8 @@
private IdentityEventBroadcaster identityEventBroadcaster;
+ private boolean ldapIdentityCache = true;
+
/** . */
protected Kernel kernel;
@@ -154,6 +171,209 @@
serviceLoader.bootstrapModules(servicesMetaData.getModuleServices().getModulesList());
+ UserModule userModule = (UserModule)identityContext.getObject(IdentityContext.TYPE_USER_MODULE);
+
+ RoleModule roleModule = (RoleModule)identityContext.getObject(IdentityContext.TYPE_ROLE_MODULE);
+
+ UserProfileModule userProfileModule = (UserProfileModule)identityContext.getObject(IdentityContext.TYPE_USER_PROFILE_MODULE);
+
+
+ // For performance reasons we inject a wrapper around some identity modules to cache the calls. This is optional
+ // and apply only to LDAP implementation of modules. Cache is request scoped and invalidated in server interceptor
+ // IdentityCacheInterceptor
+
+ if (isLdapIdentityCache())
+ {
+ ServiceJNDIBinder binder = new SimpleServiceJNDIBinder();
+
+ IdentityCacheService cacheService = new IdentityCacheService();
+
+ binder.bind(IdentityCacheService.JNDI_NAME, cacheService);
+
+ List modules = servicesMetaData.getModuleServices().getModulesList();
+
+ if (userModule instanceof LDAPUserModule)
+ {
+ LDAPUserModule ldapUserModule = (LDAPUserModule)userModule;
+
+ // Unregister in IdentityContext
+
+ identityContext.unregister(IdentityContext.TYPE_USER_MODULE);
+
+ // Unregister in JNDI
+
+ binder.unbind(ldapUserModule.getJNDIName());
+
+ // Un/egister mbean
+
+ String serviceName = null;
+
+ // Discover serviceName for this module type
+
+ for (Object moduleData : modules)
+ {
+ ModuleServiceMetaData moduleService = (ModuleServiceMetaData)moduleData;
+ ModuleMetaData module = moduleService.getModuleData();
+
+ if (module.getType().equals(ldapUserModule.getModuleType()))
+ {
+ serviceName = module.getServiceName();
+ break;
+ }
+ }
+
+ // If we have the service name then follow with registration
+
+ if (serviceName != null)
+ {
+ // Unregister
+
+ ObjectName on = new ObjectName(serviceName);
+ if (getServer().isRegistered(on))
+ {
+ getServer().unregisterMBean(on);
+ }
+ }
+
+
+ CachedLDAPUserModuleWrapper userModuleWrapper = new CachedLDAPUserModuleWrapper((LDAPUserModule)userModule, cacheService);
+
+ // Register wrapper
+ identityContext.register(userModuleWrapper, ldapUserModule.getModuleType());
+ binder.bind(ldapUserModule.getJNDIName(), userModuleWrapper);
+
+ if (serviceName != null)
+ {
+ // Register
+
+ JBossServiceModelMBean mbean = new JBossServiceModelMBean(userModuleWrapper);
+ getServer().registerMBean(mbean, new ObjectName(serviceName));
+ }
+
+ }
+
+ if (roleModule instanceof LDAPRoleModule)
+ {
+ LDAPRoleModule ldapRoleModule = (LDAPRoleModule)roleModule;
+
+ // Unregister in IdentityContext
+
+ identityContext.unregister(IdentityContext.TYPE_ROLE_MODULE);
+
+ // Unregister in JNDI
+
+ binder.unbind(ldapRoleModule.getJNDIName());
+
+ // Un/egister mbean
+
+ String serviceName = null;
+
+ // Discover serviceName for this module type
+
+ for (Object moduleData : modules)
+ {
+ ModuleServiceMetaData moduleService = (ModuleServiceMetaData)moduleData;
+ ModuleMetaData module = moduleService.getModuleData();
+
+ if (module.getType().equals(ldapRoleModule.getModuleType()))
+ {
+ serviceName = module.getServiceName();
+ break;
+ }
+ }
+
+ // If we have the service name then follow with registration
+
+ if (serviceName != null)
+ {
+ // Unregister
+
+ ObjectName on = new ObjectName(serviceName);
+ if (getServer().isRegistered(on))
+ {
+ getServer().unregisterMBean(on);
+ }
+ }
+
+
+ CachedLDAPRoleModuleWrapper roleModuleWrapper = new CachedLDAPRoleModuleWrapper((LDAPRoleModule)roleModule, cacheService);
+
+ // Register wrapper
+ identityContext.register(roleModuleWrapper, ldapRoleModule.getModuleType());
+ binder.bind(ldapRoleModule.getJNDIName(), roleModuleWrapper);
+
+ if (serviceName != null)
+ {
+ // Register
+
+ JBossServiceModelMBean mbean = new JBossServiceModelMBean(roleModuleWrapper);
+ getServer().registerMBean(mbean, new ObjectName(serviceName));
+ }
+
+ }
+
+ if (userProfileModule instanceof LDAPUserProfileModule ||
+ userProfileModule instanceof DelegatingUserProfileModuleImpl)
+ {
+ UserProfileModuleService profileModuleService = (UserProfileModuleService)userProfileModule;
+
+ // Unregister in IdentityContext
+
+ identityContext.unregister(IdentityContext.TYPE_USER_PROFILE_MODULE);
+
+ // Unregister in JNDI
+
+ binder.unbind(profileModuleService.getJNDIName());
+
+ // Un/egister mbean
+
+ String serviceName = null;
+
+ // Discover serviceName for this module type
+
+ for (Object moduleData : modules)
+ {
+ ModuleServiceMetaData moduleService = (ModuleServiceMetaData)moduleData;
+ ModuleMetaData module = moduleService.getModuleData();
+
+ if (module.getType().equals(profileModuleService.getModuleType()))
+ {
+ serviceName = module.getServiceName();
+ break;
+ }
+ }
+
+ // If we have the service name then follow with registration
+
+ if (serviceName != null)
+ {
+ // Unregister
+
+ ObjectName on = new ObjectName(serviceName);
+ if (getServer().isRegistered(on))
+ {
+ getServer().unregisterMBean(on);
+ }
+ }
+
+ CachedUserProfileModuleWrapper userProfileModuleWrapper = new CachedUserProfileModuleWrapper(userProfileModule, cacheService);
+
+ // Register wrapper
+
+ identityContext.register(userProfileModuleWrapper, profileModuleService.getModuleType());
+ binder.bind(profileModuleService.getJNDIName(), userProfileModuleWrapper);
+
+ if (serviceName != null)
+ {
+ // Register
+
+ JBossServiceModelMBean mbean = new JBossServiceModelMBean(userProfileModuleWrapper);
+ getServer().registerMBean(mbean, new ObjectName(serviceName));
+ }
+
+ }
+ }
+
}
catch (Throwable e)
{
@@ -257,4 +477,14 @@
{
this.identityEventBroadcaster = identityEventBroadcaster;
}
+
+ public boolean isLdapIdentityCache()
+ {
+ return ldapIdentityCache;
+ }
+
+ public void setLdapIdentityCache(boolean ldapIdentityCache)
+ {
+ this.ldapIdentityCache = ldapIdentityCache;
+ }
}
Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/command/render/RenderPageCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/command/render/RenderPageCommand.java 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/command/render/RenderPageCommand.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -42,6 +42,7 @@
import org.jboss.portal.core.model.portal.content.WindowRendition;
import org.jboss.portal.core.theme.PageRendition;
import org.jboss.portal.core.theme.WindowContextFactory;
+import org.jboss.portal.core.aspects.server.UserInterceptor;
import org.jboss.portal.identity.User;
import org.jboss.portal.identity.UserProfileModule;
import org.jboss.portal.security.spi.auth.PortalAuthorizationManager;
@@ -54,12 +55,14 @@
import org.jboss.portal.theme.page.PageResult;
import org.jboss.portal.portlet.controller.PortletControllerContext;
import org.jboss.portal.portlet.controller.state.PageNavigationalState;
+import org.jboss.portal.server.ServerInvocation;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.Map;
/**
* Render a full page.
@@ -170,8 +173,21 @@
}
//
- String themeId = (String)userProfileModule.getProperty(user, User.INFO_USER_THEME);
+ // If its possible use cachec user profile to obtain theme
+ Map profile = (Map)getContext().getAttribute(ServerInvocation.PRINCIPAL_SCOPE, UserInterceptor.PROFILE_KEY);
+
+ String themeId = null;
+
+ if (profile == null)
+ {
+ themeId = (String)userProfileModule.getProperty(user, User.INFO_USER_THEME);
+ }
+ else
+ {
+ themeId = (String)profile.get(User.INFO_USER_THEME);
+ }
+
if (themeId != null)
{
theme = themeService.getThemeById(themeId);
@@ -211,7 +227,7 @@
// We ignore null result objects
if (rendition != null)
{
- // Get the controller response
+ // Get the controller response
ControllerResponse response = rendition.getControllerResponse();
// Null means we skip the window
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/META-INF/jboss-service.xml 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/META-INF/jboss-service.xml 2008-05-26 07:24:48 UTC (rev 10817)
@@ -123,6 +123,13 @@
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
<xmbean/>
</mbean>
+ <mbean
+ code="org.jboss.portal.core.aspects.server.IdentityCacheInterceptor"
+ name="portal:service=Interceptor,type=Server,name=IdentityCache"
+ xmbean-dd=""
+ xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+ <xmbean/>
+ </mbean>
<mbean code="org.jboss.portal.server.impl.invocation.JBossInterceptorStackFactory"
name="portal:service=InterceptorStackFactory,type=Server" xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
@@ -130,6 +137,7 @@
<depends-list optional-attribute-name="InterceptorNames">
<depends-list-element>portal:service=Interceptor,type=Server,name=SessionLock</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=Transaction</depends-list-element>
+ <depends-list-element>portal:service=Interceptor,type=Server,name=IdentityCache</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=UserEvent</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=SessionInvalidator</depends-list-element>
<depends-list-element>portal:service=Interceptor,type=Server,name=User</depends-list-element>
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml 2008-05-26 07:24:48 UTC (rev 10817)
@@ -26,6 +26,10 @@
"-//JBoss Portal//DTD JBoss Identity Configuration 1.0//EN"
"http://www.jboss.org/portal/dtd/identity-config_1_0.dtd">-->
+
+<!-- This file overrides settings from standardidentity-config.xml.
+ Check default option values that are used there -->
+
<identity-configuration>
<datasources>
<datasource>
@@ -59,17 +63,19 @@
<!--type used to correctly map in IdentityContext registry-->
<type>User</type>
<implementation>LDAP</implementation>
- <class>
+ <!--Use this implementation for more flexible user retrieval-->
+ <!--<class>
org.jboss.portal.identity.ldap.LDAPExtUserModuleImpl
- </class>
+ </class>-->
<config/>
</module>
<module>
<type>Role</type>
<implementation>LDAP</implementation>
- <class>
+ <!--Use this implementation for more flexible user retrieval-->
+ <!--<class>
org.jboss.portal.identity.ldap.LDAPExtRoleModuleImpl
- </class>
+ </class>-->
<config/>
</module>
<module>
@@ -111,19 +117,21 @@
<name>userCtxDN</name>
<value>ou=People,o=test,dc=portal,dc=example,dc=com</value>
</option>
- <option>
+ <!--Uncomment to use with LDAPExtUserModuleImpl-->
+ <!--<option>
<name>userSearchFilter</name>
<value><![CDATA[(&((uid={0})(objectClass=person)))]]></value>
- </option>
+ </option>-->
<option>
<name>roleCtxDN</name>
<value>ou=Roles,o=test,dc=portal,dc=example,dc=com</value>
</option>
- <option>
+ <!--Uncomment to use with LDAPExtRoleModuleImpl-->
+ <!--<option>
<name>roleSearchFilter</name>
<value><![CDATA[(&((cn={0})(objectClass=groupOfNames)))]]></value>
- </option>
+ </option>-->
</option-group>
+ </options>
- </options>
</identity-configuration>
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/profile-config.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/profile-config.xml 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/profile-config.xml 2008-05-26 07:24:48 UTC (rev 10817)
@@ -334,9 +334,9 @@
<type>dynamic</type>
<value>portal.user.homepage</value>
</database>
- <ldap>
- <value>seeAlso</value>
- </ldap>
+ <!--<ldap>-->
+ <!--<value>seeAlso</value>-->
+ <!--</ldap>-->
</mapping>
</property>
<property>
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml 2008-05-26 07:24:48 UTC (rev 10817)
@@ -25,7 +25,7 @@
<!--
<!DOCTYPE identity-configuration PUBLIC
- "-//JBoss Portal//DTD JBoss Identity Configuration 1.0//EN"
+ "-//JBoss Portal//DTD JBoss Identity Configuration 1.0//EN"
"http://www.jboss.org/portal/dtd/identity-config_1_0.dtd">
-->
@@ -213,7 +213,7 @@
<name>connectionJNDIName</name>
<value>java:/portal/LDAPConnectionContext</value>
</option>
- </config>
+ </config>
</module>
<module>
@@ -324,22 +324,23 @@
<option>
<name>defaultAdminRole</name>
<value>Admin</value>
- </option>
+ </option>
</option-group>
<option-group>
<group-name>userCreateAttibutes</group-name>
<option>
<name>objectClass</name>
<value>top</value>
- <value>uidObject</value>
<value>person</value>
- <value>inetUser</value>
+ <value>inetOrgPerson</value>
+ <!--<value>inetUser</value>-->
+ <!--<value>uidObject</value>-->
</option>
<!--Schema requires those to have initial value-->
- <!--<option>
+ <option>
<name>cn</name>
<value>none</value>
- </option>-->
+ </option>
<option>
<name>sn</name>
<value>none</value>
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/login-config.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/login-config.xml 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/login-config.xml 2008-05-26 07:24:48 UTC (rev 10817)
@@ -44,8 +44,8 @@
<module-option name="roleModuleJNDIName">java:/portal/RoleModule</module-option>
<module-option name="userProfileModuleJNDIName">java:/portal/UserProfileModule</module-option>
<module-option name="membershipModuleJNDIName">java:/portal/MembershipModule</module-option>
+ <module-option name="validateUserNameCase">true</module-option>
<module-option name="additionalRole">Authenticated</module-option>
- <module-option name="password-stacking">useFirstPass</module-option>
</login-module>
<!--Use can use this module instead of IdentityLoginModule to bind to LDAP. It simply extends JBossSX LdapExtLoginModule so
Modified: branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/common/IdentityUserBean.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/common/IdentityUserBean.java 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/main/org/jboss/portal/core/identity/ui/common/IdentityUserBean.java 2008-05-26 07:24:48 UTC (rev 10817)
@@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
@@ -36,11 +37,16 @@
import org.jboss.portal.core.identity.services.IdentityConstants;
import org.jboss.portal.core.identity.services.metadata.UIComponentConfiguration;
import org.jboss.portal.core.identity.ui.IdentityUIUser;
+import org.jboss.portal.core.aspects.server.UserInterceptor;
+import org.jboss.portal.core.controller.ControllerContext;
import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.NoSuchUserException;
import org.jboss.portal.identity.User;
import org.jboss.portal.identity.UserModule;
import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portlet.JBossRenderRequest;
+import org.jboss.portlet.JBossActionRequest;
/**
* @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a>
@@ -91,18 +97,18 @@
this.metaDataService = metaDataService;
}
- /**
- * converts the dynamic attribute Map to a map for the identity service - UserProfileModule
+ /*
+ * converts the dynamic attribute Map to a map concerning the identity service - UserProfileModule
*/
public Map<String, Object> getProfileMap(Map<String, Object> attributeMap)
{
Map<String, Object> profileMap = new HashMap<String, Object>();
-
+
for(String key : attributeMap.keySet())
{
Object value = attributeMap.get(key);
UIComponentConfiguration uiComponent = (UIComponentConfiguration) this.metaDataService.getValue(key).getObject();
-
+
if ( uiComponent != null)
{
profileMap.put(uiComponent.getPropertyRef(), value);
@@ -110,11 +116,11 @@
}
return profileMap;
}
-
+
public void updateProfile(User user, Map<String, Object> attributeMap)
{
Map<String, Object> profileMap = this.getProfileMap(attributeMap);
-
+
for(String key : profileMap.keySet())
{
Object value = profileMap.get(key);
@@ -161,14 +167,14 @@
public Object getLocalizedValue(String propertyName, Object value)
{
UIComponentConfiguration uiComponent = (UIComponentConfiguration) this.metaDataService.getValue(propertyName).getObject();
- if( uiComponent.getValues() != null
+ if( uiComponent.getValues() != null
&& value instanceof String
&& uiComponent.getValues().size() > 0)
{
try
{
ResourceBundle bundle = ResourceBundle.getBundle("conf.bundles.Identity", FacesContext.getCurrentInstance().getViewRoot().getLocale());
- return bundle.getString(IdentityConstants.DYNAMIC_VALUE_PREFIX + ((String)value).toUpperCase());
+ return bundle.getString(IdentityConstants.DYNAMIC_VALUE_PREFIX + ((String)value).toUpperCase());
}
catch (Exception e)
{
@@ -177,17 +183,98 @@
}
return value;
}
-
- public Class getPropertyType(String propertyName) throws IdentityException, ClassNotFoundException
+
+ public Class getPropertyType(String propertyName) throws IdentityException, ClassNotFoundException
{
UIComponentConfiguration uiComponent = (UIComponentConfiguration) this.metaDataService.getValue(propertyName).getObject();
return uiComponent.getPropertyClass();
}
-
+
public Object getUserProperty(String username, String propertyName) throws IllegalArgumentException, NoSuchUserException, IdentityException
{
- User user = this.findUserByUserName(username);
+
UIComponentConfiguration uiComponent = (UIComponentConfiguration) this.metaDataService.getValue(propertyName).getObject();
- return this.userProfileModule.getProperty(user, uiComponent.getPropertyRef());
+
+ Map profile = null;
+
+ // Uncomment this to use the cached profile (for now its not invalidated on write)
+ //profile = getCachedUserProfile();
+
+ if (profile == null)
+ {
+
+ // This is to intercept calls to display current user profile and decrease number of calls to identity modules
+ // Needs to be done in better way
+ User user = getCurrentUser();
+ if (user == null || !user.getUserName().equals(username))
+ {
+ user = this.findUserByUserName(username);
+ }
+
+ return this.userProfileModule.getProperty(user, uiComponent.getPropertyRef());
+ }
+
+ return profile.get(uiComponent.getPropertyRef());
+
}
+
+ public User getCurrentUser()
+ {
+ Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
+
+ ControllerContext context = null;
+
+ if (request instanceof JBossRenderRequest)
+ {
+ JBossRenderRequest renderRequest = (JBossRenderRequest)request;
+ context = renderRequest.getControllerContext();
+ }
+ else if (request instanceof JBossActionRequest)
+ {
+ JBossActionRequest actionRequest = (JBossActionRequest)request;
+ context = actionRequest.getControllerContext();
+ }
+
+ if (context != null)
+ {
+ Object user = context.getAttribute(ServerInvocation.PRINCIPAL_SCOPE, UserInterceptor.USER_KEY);
+ if (user instanceof User)
+ {
+ return (User)user;
+ }
+ }
+
+ return null;
+
+ }
+
+ public Map getCachedUserProfile()
+ {
+ Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
+
+ ControllerContext context = null;
+
+ if (request instanceof JBossRenderRequest)
+ {
+ JBossRenderRequest renderRequest = (JBossRenderRequest)request;
+ context = renderRequest.getControllerContext();
+ }
+ else if (request instanceof JBossActionRequest)
+ {
+ JBossActionRequest actionRequest = (JBossActionRequest)request;
+ context = actionRequest.getControllerContext();
+ }
+
+ if (context != null)
+ {
+ Object profile = context.getAttribute(ServerInvocation.PRINCIPAL_SCOPE, UserInterceptor.PROFILE_KEY);
+ if (profile instanceof Map)
+ {
+ return (Map)profile;
+ }
+ }
+
+ return null;
+
+ }
}
Modified: branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml 2008-05-26 05:42:41 UTC (rev 10816)
+++ branches/JBoss_Portal_Branch_2_7/core-identity/src/resources/portal-identity-war/WEB-INF/portlet.xml 2008-05-26 07:24:48 UTC (rev 10817)
@@ -51,7 +51,7 @@
<name>default-view</name>
<value>/WEB-INF/jsf/index.xhtml</value>
</init-param>
- <expiration-cache>0</expiration-cache>
+ <expiration-cache>-1</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
16 years, 1 month
JBoss Portal SVN: r10816 - docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules.
by portal-commits@lists.jboss.org
Author: mmcallis
Date: 2008-05-26 01:42:41 -0400 (Mon, 26 May 2008)
New Revision: 10816
Modified:
docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml
Log:
8.4. Handling Errors with JavaServer Pages (JSP)
- starting to revise
Modified: docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml 2008-05-26 05:28:14 UTC (rev 10815)
+++ docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml 2008-05-26 05:42:41 UTC (rev 10816)
@@ -354,32 +354,37 @@
<colspec colname='c3'/>
<thead>
<row>
- <entry align="center">Attribute name</entry>
+ <entry align="center">Attribute Name</entry>
<entry align="center">Attribute Description</entry>
- <entry align="center">Attribute value</entry>
+ <entry align="center">Attribute Value</entry>
</row>
</thead>
<tbody>
<row>
- <entry align="center">org.jboss.portal.control.ERROR_TYPE</entry>
- <entry align="center">The error type</entry>
- <entry align="center">The possible values are <emphasis>ACCESS_DENIED</emphasis>, <emphasis>UNAVAILABLE</emphasis>, <emphasis>ERROR</emphasis>, <emphasis>INTERNAL_ERROR</emphasis>, <emphasis>NOT_FOUND</emphasis></entry>
+ <entry align="center"><computeroutput>org.jboss.portal.control.ERROR_TYPE</computeroutput></entry>
+ <entry align="center">the error type</entry>
+ <entry align="center">possible values are <computeroutput>ACCESS_DENIED</computeroutput>, <computeroutput>UNAVAILABLE</computeroutput>, <computeroutput>ERROR</computeroutput>, <computeroutput>INTERNAL_ERROR</computeroutput>, and <computeroutput>NOT_FOUND</computeroutput></entry>
</row>
<row>
- <entry align="center">org.jboss.portal.control.CAUSE</entry>
- <entry align="center">The throwable cause that can be null</entry>
- <entry align="center">The object is a subclass of java.lang.Throwable</entry>
+ <entry align="center"><computeroutput>org.jboss.portal.control.CAUSE</computeroutput></entry>
+ <entry align="center">a cause which is thrown, that can be null</entry>
+ <entry align="center">the object is a subclass of <computeroutput>java.lang.Throwable</computeroutput></entry>
</row>
<row>
- <entry align="center">org.jboss.portal.control.MESSAGE</entry>
- <entry align="center">An error message that can be null</entry>
- <entry align="center">Text</entry>
+ <entry align="center"><computeroutput>org.jboss.portal.control.MESSAGE</computeroutput></entry>
+ <entry align="center">an error message that can be null</entry>
+ <entry align="center">text</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
- <note>The JavaServer Pages have to be located in the jboss-portal.sar/portal-core.war Web Application.</note>
+ <para>
+ <note>
+ <title>JSP Location</title>
+ The JavaServer Pages must be located in the <filename>jboss-portal.sar/portal-core.war/</filename> web application.
+ </note>
+ </para>
</sect1>
<sect1>
<title>Configuration using the Portal Management Application</title>
16 years, 1 month
JBoss Portal SVN: r10815 - docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules.
by portal-commits@lists.jboss.org
Author: mmcallis
Date: 2008-05-26 01:28:14 -0400 (Mon, 26 May 2008)
New Revision: 10815
Modified:
docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml
docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/tutorials.xml
Log:
8.4. Handling Errors with JavaServer Pages (JSP)
- minor revisions
Modified: docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml 2008-05-25 14:42:48 UTC (rev 10814)
+++ docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/errorhandling.xml 2008-05-26 05:28:14 UTC (rev 10815)
@@ -333,24 +333,21 @@
</para>
<para>
<note>
+ <title>Page property inheritance for objects</title>
<para>
- You can configure the page properties also on objects of type portal, in that case they will be inherited by the pages
- which are located in the portal.
- </para>
- </note>
-</para>
-
- </sect2>
+ When page properties are configured for objects that use the <emphasis>portal</emphasis> type, the properties are inherited by pages in that portal.
+ </para>
+ </note>
+ </para>
+</sect2>
</sect1>
<sect1>
- <title>Handling errors with JSP</title>
- <para>As described above it is possible to redirect error handling to a JavaServer Page. Two pages can be created
- to handle errors at portal and page level. Portal level error handling requires a page that will produce a full
- page and the page level error handling requires a page that will produce markup for a window only. When the page
- is invoked a set of request attributes will be passed.</para>
+ <title>Handling Errors with JavaServer Pages (JSP)</title>
<para>
+ As described in previous sections, error handling can be redirected to a JSP. Two pages can be created to handle errors, one for the portal level, and the other for the page level. Portal level error-handling requires a page that produces a full page, and page-level handling requires a page that produces markup, but only for a window. When the page is invoked, a set of request attributes are passed. The following table represents request attributes:
+ </para>
+ <para>
<table frame="all">
- <title>Request attributes</title>
<tgroup cols="3" align="left" colsep="1" rowset="1">
<colspec colname='c1'/>
<colspec colname='c2'/>
Modified: docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/tutorials.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/tutorials.xml 2008-05-25 14:42:48 UTC (rev 10814)
+++ docs/branches/JBoss_Portal_Branch_2_6/referenceGuide/en/modules/tutorials.xml 2008-05-26 05:28:14 UTC (rev 10815)
@@ -242,6 +242,7 @@
</para>
<para>
<note>
+ <title>Markup Fragments</title>
<para>
Portlets are responsible for generating markup fragments, as they are included on a page and are
surrounded by other portlets. In particular, this means that a portlet outputting HTML must
16 years, 1 month
JBoss Portal SVN: r10814 - branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles.
by portal-commits@lists.jboss.org
Author: sviluppatorefico
Date: 2008-05-25 10:42:48 -0400 (Sun, 25 May 2008)
New Revision: 10814
Modified:
branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties
Log:
updated for italian language
Modified: branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties 2008-05-24 18:18:40 UTC (rev 10813)
+++ branches/JBoss_Portal_Branch_2_7/core/src/resources/portal-core-sar/conf/bundles/Resource_it.properties 2008-05-25 14:42:48 UTC (rev 10814)
@@ -25,4 +25,14 @@
PAGENAME_default=Home
PAGENAME_Admin=Amministrazione
PAGENAME_Test=Test
-PAGENAME_News=Novit\u00e0
\ No newline at end of file
+PAGENAME_News=Novit\u00e0
+
+ACCOUNT_DISABLED=Il tuo account \u00e8 disabilitato
+ACCOUNT_INEXISTING_OR_WRONG_PASSWORD=Utente insesistente o password non corretta
+ACCOUNT_NOTASSIGNEDTOROLE=L\'utente non ha i giusti permessi
+
+LOGIN_TITLE=JBoss Portal Login
+LOGIN_USERNAME=Nome utente
+LOGIN_PASSWORD=Password
+LOGIN_CANCEL=Annulla
+LOGIN_SUBMIT=Invia
\ No newline at end of file
16 years, 1 month