autogenerated usernames registered with OpenID can be changed; Google, Yahoo and...
authorCalin-Andrei Burloiu <calin.burloiu@gmail.com>
Mon, 24 Oct 2011 13:25:02 +0000 (16:25 +0300)
committerCalin-Andrei Burloiu <calin.burloiu@gmail.com>
Mon, 24 Oct 2011 13:25:02 +0000 (16:25 +0300)
application/config/form_validation.php
application/controllers/user.php
application/language/english/form_validation_lang.php
application/models/users_model.php
application/views/user/login_view.php
application/views/user/register_view.php

index 02cb29c..b11b331 100644 (file)
@@ -27,7 +27,7 @@ $config = array(
                        'field'=>'username',
                        'label'=>'lang:user_username',
                        'rules'=>'trim|callback__required_by_register|min_length[5]|max_length[32]'
-                               . '|strtolower|xss_clean|callback__valid_username'
+                               . '|strtolower|xss_clean|callback__is_username_unique|callback__valid_username'
                ),
                array(
                        'field'=>'password',
index 397699b..5820379 100644 (file)
@@ -196,9 +196,13 @@ class User extends CI_Controller {
                if (! $b_validation)
                {
                        // Edit account data if logged in, otherwise register.
-                       if ($user_id = $this->session->userdata('user_id'))
+                       $user_id = $this->session->userdata('user_id');
+                       if ($user_id)
                        {
                                $userdata = $this->users_model->get_userdata(intval($user_id));
+                               if (substr($userdata['username'], 0, 8) == 'autogen_')
+                                       $userdata['autogen_username'] = //'xxx';
+                                               substr($userdata['username'], 8);
                                $selected_menu = 'account';
                        }
                        else
@@ -235,6 +239,8 @@ class User extends CI_Controller {
                else
                {
                        $user_id = $this->input->post('user-id');
+                       if ($this->input->post('username'))
+                               $data['username'] = $this->input->post('username');
                        $data['email'] = $this->input->post('email');
                        $data['first_name'] = $this->input->post('first-name');
                        $data['last_name'] = $this->input->post('last-name');
@@ -540,6 +546,14 @@ class User extends CI_Controller {
                        $this->session->set_userdata($key, $val);
        }
        
+       public function _is_username_unique($username)
+       {
+               if ($this->users_model->get_userdata($username))
+                       return FALSE;
+               
+               return TRUE;
+       }
+       
        public function _valid_username($username)
        {
                return (preg_match('/^[a-z0-9\._]+$/', $username) === 1);
index e86f027..59d8352 100644 (file)
@@ -4,6 +4,7 @@
 include('system/language/english/form_validation_lang.php');
 
 // Login / Register/ Account / Profile
+$lang['_is_username_unique']           = 'Username already exists. Please choose another one.';
 $lang['_valid_username']                       = 'You must enter a valid username with letters, numbers, . (dots) or _ (underscores).';
 $lang['_valid_username_or_email']      = "You must enter an e-mail address or a valid username.";
 $lang['_do_login']                                     = 'Wrong %s, or wrong %s.';
index 427b07e..8046ed3 100644 (file)
@@ -243,11 +243,11 @@ class Users_model extends CI_Model {
                        {
                                $data['username'] = $data['first_name'] . '_'
                                                . $data['last_name'];
-                               $data['username'] = substr($data['username'], 0, 32);
                        }
                        else
                                $data['username'] = $this->gen_username();
                }
+               $data['username'] = substr($data['username'], 0, 24);
                if ($this->get_userdata($data['username']))
                {
                        $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
@@ -258,6 +258,7 @@ class Users_model extends CI_Model {
                                $data['username'] .= $chars[ mt_rand(0, $len_chars - 1) ];
                        } while($this->get_userdata($data['username']));
                }
+               $data['username'] = 'autogen_' . $data['username'];
                
                // Country
                $country = $ax_resp->get('http://axschema.org/contact/country');
index 265672b..3d3aaa0 100644 (file)
 <fieldset>
        <legend><?php echo $this->lang->line('user_legend_login_openid') ?></legend>
        
+       <!--<p></p>-->
+       <p>
+               <a class="login-openid" data-op="google" href="#">Google</a>
+               <a class="login-openid" data-op="yahoo" href="#">Yahoo!</a>
+               <a class="login-openid" data-op="myopenid" href="#">myOpenID</a>
+       </p>
+       
        <table class="form">
                <tr>
                        <th><?php echo $this->lang->line('user_openid'). ': ' ?></th>
                </tr>
        </table>
 </fieldset>
-</form>
\ No newline at end of file
+</form>
+
+<script type="text/javascript">
+       $(function() {
+               $('.login-openid')
+                       .click(function() {
+                               var openId;
+                               
+                               console.log($(this).data('op'));
+                               
+                               switch ($(this).data('op'))
+                               {
+                               case 'google':
+                                       openId = 'https://www.google.com/accounts/o8/id';
+                                       break;
+                               case 'yahoo':
+                                       openId = 'https://me.yahoo.com/';
+                                       break;
+                               case 'myopenid':
+                                       openId = 'https://myopenid.com/';
+                                       break;
+                               }
+                               
+                               $.post('<?php echo site_url('user/login') ?>',
+                                               {'openid': openId},
+                                               function(text) {
+                                                       document.open();
+                                                       document.write(text);
+                                                       document.close();
+                                               });
+                       })
+                       .button();
+               
+       });
+</script>
\ No newline at end of file
index 59fee7e..dd97e2e 100644 (file)
@@ -31,16 +31,20 @@ else
        <tr><td></td><td>&nbsp;</td></tr>
 
        <tr>
-         <?php if (! $userdata): ?>
+         <?php if (! $userdata || ! empty($userdata['autogen_username'])): ?>
                <th><?php echo $this->lang->line('user_username'). ' <span class="required">*</span> : ' ?></th>
                <td>
+                 <?php if (empty($userdata['autogen_username'])): ?>
                        <input type="text" name="username" size="16" value="<?php echo _set_value($userdata, 'username') ?>" />
+                 <?php else: ?>
+                       <input type="text" name="username" size="16" value="<?php echo $userdata['autogen_username'] ?>" />
+                 <?php endif ?>
                </td>
          <?php else: ?>
                <th><?php echo $this->lang->line('user_username'). ' : ' ?></th>
                <td>
                        &nbsp;<em><?php echo $userdata['username'] ?></em>
-               </td>`
+               </td>
          <?php endif ?>
        </tr>
        <tr><td></td><td><?php echo form_error('username') ?></td></tr>