You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/01/28 03:29:40 UTC

ignite git commit: IGNITE-2481 Added company, country fields on sign up page.

Repository: ignite
Updated Branches:
  refs/heads/ignite-843-rc2 aa842718c -> 587addf6f


IGNITE-2481 Added company, country fields on sign up page.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/587addf6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/587addf6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/587addf6

Branch: refs/heads/ignite-843-rc2
Commit: 587addf6f3818c766c99189fd1244be3f3aa73ba
Parents: aa84271
Author: Andrey <an...@gridgain.com>
Authored: Thu Jan 28 09:30:27 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Thu Jan 28 09:30:27 2016 +0700

----------------------------------------------------------------------
 .../src/main/js/app/data/countries.json         | 266 +++++++++++++++++++
 .../form-field-java-class.jade                  |  13 +-
 .../control-center-web/src/main/js/app/index.js |   5 +
 .../Form/validator/java-keywords.directive.js   |  11 +-
 .../src/main/js/app/modules/JavaTypes/index.js  |   4 +-
 .../configuration/include-event-types/main.js   |   4 +-
 .../main/js/app/providers/Countries/index.js    |  25 ++
 .../src/main/js/controllers/common-module.js    |  13 +-
 .../main/js/controllers/profile-controller.js   |  25 +-
 modules/control-center-web/src/main/js/db.js    |   4 +
 .../src/main/js/routes/profile.js               |   8 +-
 .../src/main/js/views/login.jade                |  21 +-
 .../src/main/js/views/settings/admin.jade       |   6 +-
 .../src/main/js/views/settings/profile.jade     |  12 +-
 14 files changed, 384 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/data/countries.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/data/countries.json b/modules/control-center-web/src/main/js/app/data/countries.json
new file mode 100644
index 0000000..371e318
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/data/countries.json
@@ -0,0 +1,266 @@
+[
+  "Afghanistan",
+  "Albania",
+  "Algeria",
+  "American Samoa",
+  "Andorra",
+  "Angola",
+  "Anguilla",
+  "Antarctica",
+  "Antigua and Barbuda",
+  "Argentina",
+  "Armenia",
+  "Aruba",
+  "Australia",
+  "Austria",
+  "Azerbaijan",
+  "Bahamas",
+  "Bahrain",
+  "Bangladesh",
+  "Barbados",
+  "Belarus",
+  "Belgium",
+  "Belize",
+  "Benin",
+  "Bermuda",
+  "Bhutan",
+  "Bolivia",
+  "Bosnia and Herzegovina",
+  "Botswana",
+  "Bouvet Island",
+  "Brazil",
+  "British Antarctic Territory",
+  "British Indian Ocean Territory",
+  "British Virgin Islands",
+  "Brunei",
+  "Bulgaria",
+  "Burkina Faso",
+  "Burundi",
+  "Cambodia",
+  "Cameroon",
+  "Canada",
+  "Canton and Enderbury Islands",
+  "Cape Verde",
+  "Cayman Islands",
+  "Central African Republic",
+  "Chad",
+  "Chile",
+  "China",
+  "Christmas Island",
+  "Cocos [Keeling] Islands",
+  "Colombia",
+  "Comoros",
+  "Congo - Brazzaville",
+  "Congo - Kinshasa",
+  "Cook Islands",
+  "Costa Rica",
+  "Croatia",
+  "Cuba",
+  "Cyprus",
+  "Czech Republic",
+  "Côte d’Ivoire",
+  "Denmark",
+  "Djibouti",
+  "Dominica",
+  "Dominican Republic",
+  "Dronning Maud Land",
+  "East Germany",
+  "Ecuador",
+  "Egypt",
+  "El Salvador",
+  "Equatorial Guinea",
+  "Eritrea",
+  "Estonia",
+  "Ethiopia",
+  "Falkland Islands",
+  "Faroe Islands",
+  "Fiji",
+  "Finland",
+  "France",
+  "French Guiana",
+  "French Polynesia",
+  "French Southern Territories",
+  "French Southern and Antarctic Territories",
+  "Gabon",
+  "Gambia",
+  "Georgia",
+  "Germany",
+  "Ghana",
+  "Gibraltar",
+  "Greece",
+  "Greenland",
+  "Grenada",
+  "Guadeloupe",
+  "Guam",
+  "Guatemala",
+  "Guernsey",
+  "Guinea",
+  "Guinea-Bissau",
+  "Guyana",
+  "Haiti",
+  "Heard Island and McDonald Islands",
+  "Honduras",
+  "Hong Kong SAR China",
+  "Hungary",
+  "Iceland",
+  "India",
+  "Indonesia",
+  "Iran",
+  "Iraq",
+  "Ireland",
+  "Isle of Man",
+  "Israel",
+  "Italy",
+  "Jamaica",
+  "Japan",
+  "Jersey",
+  "Johnston Island",
+  "Jordan",
+  "Kazakhstan",
+  "Kenya",
+  "Kiribati",
+  "Kuwait",
+  "Kyrgyzstan",
+  "Laos",
+  "Latvia",
+  "Lebanon",
+  "Lesotho",
+  "Liberia",
+  "Libya",
+  "Liechtenstein",
+  "Lithuania",
+  "Luxembourg",
+  "Macau SAR China",
+  "Macedonia",
+  "Madagascar",
+  "Malawi",
+  "Malaysia",
+  "Maldives",
+  "Mali",
+  "Malta",
+  "Marshall Islands",
+  "Martinique",
+  "Mauritania",
+  "Mauritius",
+  "Mayotte",
+  "Metropolitan France",
+  "Mexico",
+  "Micronesia",
+  "Midway Islands",
+  "Moldova",
+  "Monaco",
+  "Mongolia",
+  "Montenegro",
+  "Montserrat",
+  "Morocco",
+  "Mozambique",
+  "Myanmar [Burma]",
+  "Namibia",
+  "Nauru",
+  "Nepal",
+  "Netherlands",
+  "Netherlands Antilles",
+  "Neutral Zone",
+  "New Caledonia",
+  "New Zealand",
+  "Nicaragua",
+  "Niger",
+  "Nigeria",
+  "Niue",
+  "Norfolk Island",
+  "North Korea",
+  "North Vietnam",
+  "Northern Mariana Islands",
+  "Norway",
+  "Oman",
+  "Pacific Islands Trust Territory",
+  "Pakistan",
+  "Palau",
+  "Palestinian Territories",
+  "Panama",
+  "Panama Canal Zone",
+  "Papua New Guinea",
+  "Paraguay",
+  "People's Democratic Republic of Yemen",
+  "Peru",
+  "Philippines",
+  "Pitcairn Islands",
+  "Poland",
+  "Portugal",
+  "Puerto Rico",
+  "Qatar",
+  "Romania",
+  "Russia",
+  "Rwanda",
+  "Réunion",
+  "Saint Barthélemy",
+  "Saint Helena",
+  "Saint Kitts and Nevis",
+  "Saint Lucia",
+  "Saint Martin",
+  "Saint Pierre and Miquelon",
+  "Saint Vincent and the Grenadines",
+  "Samoa",
+  "San Marino",
+  "Saudi Arabia",
+  "Senegal",
+  "Serbia",
+  "Serbia and Montenegro",
+  "Seychelles",
+  "Sierra Leone",
+  "Singapore",
+  "Slovakia",
+  "Slovenia",
+  "Solomon Islands",
+  "Somalia",
+  "South Africa",
+  "South Georgia and the South Sandwich Islands",
+  "South Korea",
+  "Spain",
+  "Sri Lanka",
+  "Sudan",
+  "Suriname",
+  "Svalbard and Jan Mayen",
+  "Swaziland",
+  "Sweden",
+  "Switzerland",
+  "Syria",
+  "São Tomé and Príncipe",
+  "Taiwan",
+  "Tajikistan",
+  "Tanzania",
+  "Thailand",
+  "Timor-Leste",
+  "Togo",
+  "Tokelau",
+  "Tonga",
+  "Trinidad and Tobago",
+  "Tunisia",
+  "Turkey",
+  "Turkmenistan",
+  "Turks and Caicos Islands",
+  "Tuvalu",
+  "U.S. Minor Outlying Islands",
+  "U.S. Miscellaneous Pacific Islands",
+  "U.S. Virgin Islands",
+  "Uganda",
+  "Ukraine",
+  "Union of Soviet Socialist Republics",
+  "United Arab Emirates",
+  "United Kingdom",
+  "United States",
+  "Unknown or Invalid Region",
+  "Uruguay",
+  "Uzbekistan",
+  "Vanuatu",
+  "Vatican City",
+  "Venezuela",
+  "Vietnam",
+  "Wake Island",
+  "Wallis and Futuna",
+  "Western Sahara",
+  "Yemen",
+  "Zambia",
+  "Zimbabwe",
+  "Åland Islands"
+]

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade b/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
index 5c7b75d..0d3c6c0 100644
--- a/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
+++ b/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
@@ -1,8 +1,7 @@
 mixin feedback(error, message)
     i.fa.fa-exclamation-triangle.form-control-feedback(
         ng-show='!form[name].$pristine && form[name].$error.#{error}'
-        bs-tooltip
-        data-title='#{message}'
+        bs-tooltip='"#{message}"'
     )
 
 div
@@ -28,8 +27,8 @@ div
     )
         span(ng-transclude)
 
-        +feedback('javaIdentifier', 'Trust manager is invalid!')
-        +feedback('required', 'Trust manager could not be empty!')
-        +feedback('javaKeywords', 'Trust manager could not contains reserved java keyword: ""!')
-        +feedback('javaBuiltInClass', 'Trust manager should not be the Java built-in class!')
-        +feedback('javaPackageSpecified', 'Trust manager does not have package specified!')
+        +feedback('javaIdentifier', '{{ name }} is invalid!')
+        +feedback('required', '{{ name }} could not be empty!')
+        +feedback('javaKeywords', '{{ name }} could not contains reserved Java keyword!')
+        +feedback('javaBuiltInClass', '{{ name }} should not be the Java built-in class!')
+        +feedback('javaPackageSpecified', '{{ name }} does not have package specified!')

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/index.js b/modules/control-center-web/src/main/js/app/index.js
index 9c6e067..782e83b 100644
--- a/modules/control-center-web/src/main/js/app/index.js
+++ b/modules/control-center-web/src/main/js/app/index.js
@@ -91,6 +91,9 @@ import igniteFormFieldJavaClass from './directives/form-field-java-class/form-fi
 // Services.
 import IgniteUiAceOnLoad from './services/UiAceOnLoad/service';
 
+// Providers
+import igniteCountries from './providers/countries/index';
+
 // Filters.
 import hasPojo from './filters/hasPojo/hasPojo.filter';
 
@@ -131,6 +134,8 @@ angular
 .directive(...igniteFormFieldJavaClass)
 // Services.
 .service(...IgniteUiAceOnLoad)
+// Providers.
+.provider(...igniteCountries)
 // Filters.
 .filter(...hasPojo)
 .config(['$stateProvider', '$locationProvider', '$urlRouterProvider', function($stateProvider, $locationProvider, $urlRouterProvider) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
index 9c91262..8faae6d 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
@@ -20,7 +20,16 @@ export default ['javaKeywords', ['JavaTypes', (JavaTypes) => {
         if (typeof attrs.javaKeywords === 'undefined' || !attrs.javaKeywords)
             return;
 
-        ngModel.$validators.javaKeywords = JavaTypes.nonKeywords;
+        ngModel.$validators.javaKeywords = (value) => {
+            if (value) {
+                for (const item of value.split('.')) {
+                    if (JavaTypes.isKeywords(item))
+                        return false;
+                }
+            }
+
+            return true;
+        };
     };
 
     return {

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js b/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
index e5d1675..56dd9dc 100644
--- a/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
+++ b/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
@@ -59,8 +59,8 @@ angular
                  * @param value text to check.
                  * @returns boolean 'true' if given text non Java keyword.
                  */
-                nonKeywords(value) {
-                    return !_.contains(JAVA_KEYWORDS, value);
+                isKeywords(value) {
+                    return _.contains(JAVA_KEYWORDS, value);
                 }
             };
         }];

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js b/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js
index c4c0a93..17d7d3a 100644
--- a/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js
+++ b/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js
@@ -52,9 +52,7 @@ angular
             'EVT_IGFS_META_UPDATED', 'EVT_IGFS_DIR_CREATED', 'EVT_IGFS_DIR_RENAMED', 'EVT_IGFS_DIR_DELETED']
     };
 
-    this.push = function(data) {
-        items.push(data);
-    };
+    this.push = (data) => items.push(data);
 
     this.$get = [() => {
         return items;

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/app/providers/Countries/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/providers/Countries/index.js b/modules/control-center-web/src/main/js/app/providers/Countries/index.js
new file mode 100644
index 0000000..748e4ff
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/providers/Countries/index.js
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Java built-in short class names.
+import COUNTRIES from 'app/data/countries.json!';
+
+export default ['igniteCountries', function() {
+    this.$get = [() => {
+        return COUNTRIES;
+    }];
+}];

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js
index c691f00..cc7eb3e 100644
--- a/modules/control-center-web/src/main/js/controllers/common-module.js
+++ b/modules/control-center-web/src/main/js/controllers/common-module.js
@@ -2036,15 +2036,14 @@ consoleModule.controller('resetPassword', [
 
 // Login popup controller.
 // TODO IGNITE-1936 Refactor this controller.
-consoleModule.controller('auth', [
-    '$scope', '$focus', 'Auth',
-    function ($scope, $focus, Auth) {
-        $scope.auth = Auth.auth;
+consoleModule.controller('auth', ['$scope', '$focus', 'Auth', 'igniteCountries', function ($scope, $focus, Auth, countries) {
+    $scope.auth = Auth.auth;
 
-        $scope.action = 'login';
+    $scope.action = 'login';
+    $scope.countries = countries;
 
-        $focus('user_email');
-    }]);
+    $focus('user_email');
+}]);
 
 // Download agent controller.
 consoleModule.service('$agentDownload', [

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/controllers/profile-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/profile-controller.js b/modules/control-center-web/src/main/js/controllers/profile-controller.js
index 3a37a6b..b7ea353 100644
--- a/modules/control-center-web/src/main/js/controllers/profile-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/profile-controller.js
@@ -17,9 +17,11 @@
 
 // Controller for Profile screen.
 consoleModule.controller('profileController',
-    ['$scope', '$http', '$common', '$focus', '$confirm', function ($scope, $http, $common, $focus, $confirm) {
+    ['$scope', '$http', '$common', '$focus', '$confirm', 'igniteCountries', function ($scope, $http, $common, $focus, $confirm, countries) {
     $scope.profileUser = angular.copy($scope.$root.user);
 
+    $scope.countries = countries;
+
     if ($scope.profileUser && !$scope.profileUser.token)
         $scope.profileUser.token = 'No security token. Regenerate please.';
 
@@ -34,8 +36,9 @@ consoleModule.controller('profileController',
         var old = $scope.$root.user;
         var cur = $scope.profileUser;
 
-        return old && (old.username != cur.username || old.email != cur.email || old.token != cur.token ||
-            (cur.changePassword && !$common.isEmptyString(cur.newPassword)));
+        return old && (old.username != cur.username || old.email != cur.email ||
+            old.company != cur.company || old.country != cur.country
+            || old.token != cur.token || (cur.changePassword && !$common.isEmptyString(cur.newPassword)));
     };
 
     $scope.profileCouldBeSaved = function () {
@@ -59,14 +62,22 @@ consoleModule.controller('profileController',
             var email = profile.email;
             var changeEmail = email != $scope.$root.user.email;
 
+            var company = profile.company;
+            var changeCompany = company != $scope.$root.user.company;
+
+            var country = profile.country;
+            var changeCountry = country != $scope.$root.user.country;
+
             var token = profile.token;
             var changeToken = token != $scope.$root.user.token;
 
-            if (changeUsername || changeEmail || changeToken || profile.changePassword) {
+            if (changeUsername || changeEmail || changeCompany || changeCountry || changeToken || profile.changePassword) {
                 $http.post('/api/v1/profile/save', {
                     _id: profile._id,
                     userName: changeUsername ? userName : undefined,
                     email: changeEmail ? email : undefined,
+                    company: changeCompany ? company : undefined,
+                    country: changeCountry ? country : undefined,
                     token: changeToken ? token : undefined,
                     newPassword: profile.changePassword ? profile.newPassword : undefined
                 }).success(function (user) {
@@ -82,6 +93,12 @@ consoleModule.controller('profileController',
                     if (changeEmail)
                         $scope.$root.user.email = email;
 
+                    if (changeCompany)
+                        $scope.$root.user.company = company;
+
+                    if (changeCountry)
+                        $scope.$root.user.country = country;
+
                     $focus('profile-username');
                 }).error(function (err) {
                     $common.showError('Failed to save profile: ' + $common.errorMessage(err));

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index 1e5490e..c2200c7 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -33,6 +33,8 @@ mongoose.connect(config.get('mongoDB:url'), {server: {poolSize: 4}});
 var AccountSchema = new Schema({
     username: String,
     email: String,
+    company: String,
+    country: String,
     lastLogin: Date,
     admin: Boolean,
     token: String,
@@ -50,6 +52,8 @@ AccountSchema.set('toJSON', {
             _id: ret._id,
             email: ret.email,
             username: ret.username,
+            company: ret.company,
+            country: ret.country,
             admin: ret.admin,
             token: ret.token,
             lastLogin: ret.lastLogin

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/routes/profile.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/profile.js b/modules/control-center-web/src/main/js/routes/profile.js
index 0a166f3..4fa154d 100644
--- a/modules/control-center-web/src/main/js/routes/profile.js
+++ b/modules/control-center-web/src/main/js/routes/profile.js
@@ -25,10 +25,16 @@ function _updateUser(res, user, params) {
     if (params.email)
         user.email = params.email;
 
+    if (params.company)
+        user.company = params.company;
+
+    if (params.country)
+        user.country = params.country;
+
     if (params.token)
         user.token = params.token;
 
-    if (params.userName || params.email || params.token || params.newPassword)
+    if (params.userName || params.email || params.company || params.country || params.token || params.newPassword)
         user.save(function (err) {
             if (err)
                 // TODO IGNITE-843 Send error to admin.

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/views/login.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/login.jade b/modules/control-center-web/src/main/js/views/login.jade
index 7be4726..92f679b 100644
--- a/modules/control-center-web/src/main/js/views/login.jade
+++ b/modules/control-center-web/src/main/js/views/login.jade
@@ -15,6 +15,9 @@
     limitations under the License.
 
 mixin lbl(txt)
+    label.col-xs-3.col-md-3 #{txt}
+
+mixin lblRequired(txt)
     label.col-xs-3.col-md-3.required #{txt}
 
 header#header.header
@@ -39,19 +42,27 @@ header#header.header
                             p.col-xs-12.col-md-11(ng-show='action == "password/forgot"')
                                 | That's ok! Simply enter your email below and a reset password link will be sent to you via email. You can then follow that link and select a new password.
                         .settings-row(ng-show='action == "register"')
-                            +lbl('Full Name:')
+                            +lblRequired('Full Name:')
                             .col-xs-9.col-md-8
                                 input#user_name.form-control(enter-focus-next='user_email' type='text' ng-model='user_info.username' placeholder='John Smith' ng-required='action=="register"')
                         .settings-row
-                            +lbl('Email:')
+                            +lblRequired('Email:')
+                            .col-xs-9.col-md-8
+                                input#user_email.form-control(enter-focus-next='company' type='email' ng-model='user_info.email' placeholder='you@domain.com' required)
+                        .settings-row(ng-show='action == "register"')
+                            +lbl('Company:')
+                            .col-xs-9.col-md-8
+                                input#company.form-control(enter-focus-next='country' type='text' ng-model='user_info.company' placeholder='You company name')
+                        .settings-row(ng-show='action == "register"')
+                            +lbl('Country:')
                             .col-xs-9.col-md-8
-                                input#user_email.form-control(enter-focus-next='user_password' type='email' ng-model='user_info.email' placeholder='you@domain.com' required on-enter='action == "password/forgot" && loginForm.$valid && auth(action, user_info)')
+                                button#country.select-toggle.form-control(bs-select bs-options='item for item in countries' enter-focus-next='user_password' type='text' ng-model='user_info.country' placeholder='Choose you country')
                         .settings-row(ng-show='action != "password/forgot"')
-                            +lbl('Password:')
+                            +lblRequired('Password:')
                             .col-xs-9.col-md-8
                                 input#user_password.form-control(enter-focus-next='user_confirm' type='password' ng-model='user_info.password' placeholder='Password' ng-required='action != "password/forgot"' on-enter='action == "login" && loginForm.$valid && auth(action, user_info)')
                         .settings-row(ng-if='action == "register"')
-                            +lbl('Confirm:')
+                            +lblRequired('Confirm:')
                             .col-xs-9.col-md-8
                                 input#user_confirm.form-control(type='password' ng-model='user_info.confirm' match='user_info.password' placeholder='Confirm password' ng-required='action == "register"' on-enter='loginForm.$valid && auth(action, user_info)')
                         .settings-row(ignite-terms)

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/views/settings/admin.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/settings/admin.jade b/modules/control-center-web/src/main/js/views/settings/admin.jade
index b1e08d7..a6c05a8 100644
--- a/modules/control-center-web/src/main/js/views/settings/admin.jade
+++ b/modules/control-center-web/src/main/js/views/settings/admin.jade
@@ -21,12 +21,14 @@
             table.table.table-striped.admin(st-table='displayedUsers' st-safe-src='users')
                 thead
                     tr
-                        th.header(colspan='5')
+                        th.header(colspan='7')
                             .col-sm-2.pull-right
                                 input.form-control(type='text' st-search='' placeholder='Filter users...')
                     tr
                         th(st-sort='username') User name
                         th(st-sort='email') Email
+                        th(st-sort='company') Company
+                        th(st-sort='country') Country
                         th.col-sm-2(st-sort='lastLogin') Last login
                         th(width='1%'  st-sort='admin') Admin
                         th(width='1%') Actions
@@ -35,6 +37,8 @@
                         td {{row.username}}
                         td
                             a(ng-href='mailto:{{row.email}}') {{row.email}}
+                        td {{row.company}}
+                        td {{row.country}}
                         td
                             span {{row.lastLogin | date:'medium'}}
                         td(style='text-align: center;')

http://git-wip-us.apache.org/repos/asf/ignite/blob/587addf6/modules/control-center-web/src/main/js/views/settings/profile.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/settings/profile.jade b/modules/control-center-web/src/main/js/views/settings/profile.jade
index 963519b..7cc72c3 100644
--- a/modules/control-center-web/src/main/js/views/settings/profile.jade
+++ b/modules/control-center-web/src/main/js/views/settings/profile.jade
@@ -28,11 +28,19 @@ mixin lbl(txt)
                     .details-row
                         +lbl('User name:')
                         .col-xs-5.col-sm-4
-                            input.form-control(id='profile-username' type='text' ng-model='profileUser.username' placeholder='Input name' required auto-focus)
+                            input#profile-username.form-control(type='text' ng-model='profileUser.username' placeholder='Input name' required auto-focus)
                     .details-row
                         +lbl('Email:')
                         .col-xs-5.col-sm-4
-                            input.form-control(id='profile-email' type='email' ng-model='profileUser.email' placeholder='you@domain.com' required)
+                            input#profile-email.form-control(type='email' ng-model='profileUser.email' placeholder='you@domain.com' required)
+                    .details-row
+                        label.col-sm-2.required.labelFormField Company:
+                        .col-xs-5.col-sm-4
+                            input#profile-company.form-control(type='text' ng-model='profileUser.company' placeholder='You company name')
+                    .details-row
+                        label.col-sm-2.required.labelFormField Country:
+                        .col-xs-5.col-sm-4
+                            button#profile-country.select-toggle.form-control(bs-select bs-options='item for item in countries' type='text' ng-model='profileUser.country' placeholder='Choose you country')
                     .details-row
                         .advanced-options
                             i.fa.fa-chevron-circle-down(ng-show='profileUser.showToken' ng-click='profileUser.showToken = ! profileUser.showToken')