OpenID login and comment improoved
[living-lab-site.git] / application / models / users_model.php
index 8046ed3..252a5db 100644 (file)
@@ -189,65 +189,97 @@ class Users_model extends CI_Model {
        {
                $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($op_response);
                $ax_resp = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($op_response);
+               
+               if ($ax_resp)
+               {
+                       $ax_email = $ax_resp->get('http://axschema.org/contact/email');
+                       $ax_first_name = $ax_resp->get(
+                                       'http://axschema.org/namePerson/first');
+                       $ax_last_name = $ax_resp->get('http://axschema.org/namePerson/last');
+                       $ax_country = $ax_resp->get('http://axschema.org/contact/country');
+               }
+               else
+               {
+                       $ax_email = '';
+                       $ax_first_name = '';
+                       $ax_last_name = '';
+                       $ax_country = '';
+               }
+               
+               if ($sreg_resp)
+               {
+                       $sreg_email = $sreg_resp->get('email', '');
+                       $sreg_fullname = $sreg_resp->get('fullname', '');
+                       $sreg_nickname = $sreg_resp->get('nickname', '');
+                       $sreg_country = $sreg_resp->get('country', '');
+                       $sreg_dob = $sreg_resp->get('dob', NULL);
+               }
+               else
+               {
+                       $sreg_email = $sreg_fullname = $sreg_nickname = $sreg_country = '';
+                       $sreg_dob = NULL;
+               }
 
                // E-mail
-               $email = $ax_resp->get('http://axschema.org/contact/email');
-               if (empty($email) || is_a($email, 'Auth_OpenID_AX_Error'))
-                       $data['email'] = $sreg_resp->get('email', '');
+               if (empty($ax_email) || is_a($ax_email, 'Auth_OpenID_AX_Error'))
+                       $data['email'] = $sreg_email;
                else
-                       $data['email'] = $email[0];
+                       $data['email'] = $ax_email[0];
+               $data['email'] = strtolower($data['email']);
                
                // First Name
-               $first_name = $ax_resp->get('http://axschema.org/namePerson/first');
-               if (empty($first_name) || is_a($first_name, 'Auth_OpenID_AX_Error'))
+               if (empty($ax_first_name)
+                               || is_a($ax_first_name, 'Auth_OpenID_AX_Error'))
                        $data['first_name'] = '';
                else
-                       $data['first_name'] = $first_name[0];
+                       $data['first_name'] = $ax_first_name[0];
                
                // Sur Name
-               $last_name = $ax_resp->get('http://axschema.org/namePerson/last');
-               if (empty($last_name) || is_a($last_name, 'Auth_OpenID_AX_Error'))
+               if (empty($ax_last_name) || is_a($ax_last_name, 'Auth_OpenID_AX_Error'))
                        $data['last_name'] = '';
                else
-                       $data['last_name'] = $last_name[0];
+                       $data['last_name'] = $ax_last_name[0];
                
                // First Name and Last Name
                if (empty($data['first_name']) || empty($data['last_name']))
                {
-                       $fullname = $sreg_resp->get('fullname');
-                       
-                       if ($fullname)
+                       if ($sreg_fullname)
                        {
                                if (empty($data['first_name']))
                                        $data['first_name'] = substr(
-                                                       $fullname, 0, strrpos($fullname, ' '));
+                                                       $sreg_fullname, 0, strrpos($sreg_fullname, ' '));
                                if (empty($data['last_name']))
                                        $data['last_name'] = substr(
-                                                       $fullname, strrpos($fullname, ' ') + 1);
+                                                       $sreg_fullname, strrpos($sreg_fullname, ' ') + 1);
                        }
                }
                
                // Username
-               $data['username'] = $sreg_resp->get('nickname');
+               $data['username'] = $sreg_nickname;
                if (!$data['username'])
                {
+                       // Generate username from email
                        if (!empty($data['email']))
                        {
-                               $data['email'] = strtolower($data['email']);
                                $data['username'] = substr($data['email'],
                                                0, strpos($data['email'], '@'));
                                $data['username'] = preg_replace(array('/[^a-z0-9\._]*/'),
                                                array(''), $data['username']);
                        }
+                       // Generate username from first name and sur name
                        else if(!empty($data['first_name']) || !empty($data['last_name']))
                        {
                                $data['username'] = $data['first_name'] . '_'
                                                . $data['last_name'];
                        }
+                       // Generate a random username
                        else
                                $data['username'] = $this->gen_username();
                }
+               // Limit username to 24 characters because a prefix of 8 characters
+               // will be added: 'autogen_'.
                $data['username'] = substr($data['username'], 0, 24);
+               // Append a random character to the username each time it still exists.
                if ($this->get_userdata($data['username']))
                {
                        $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
@@ -258,23 +290,23 @@ class Users_model extends CI_Model {
                                $data['username'] .= $chars[ mt_rand(0, $len_chars - 1) ];
                        } while($this->get_userdata($data['username']));
                }
+               // Usernames autogenerated have 'autogen_' prefix and can be changed
+               // by the user from the account section. After this process it cannot
+               // be changed anymore.
                $data['username'] = 'autogen_' . $data['username'];
                
                // Country
-               $country = $ax_resp->get('http://axschema.org/contact/country');
-               if (empty($country) || is_a($country, 'Auth_OpenID_AX_Error'))
-                       $data['country'] = $sreg_resp->get('country', '');
+               if (empty($ax_country) || is_a($ax_country, 'Auth_OpenID_AX_Error'))
+                       $data['country'] = $sreg_country;
                else
-                       $data['country'] = $country[0];
+                       $data['country'] = $ax_country[0];
                
                // Birth Date
-               $data['birth_date'] = $sreg_resp->get('dob', NULL);
+               $data['birth_date'] = $sreg_dob;
                
                // OpenID
                $data['auth_src'] = 'openid';
                
-//             print_r($data);
-               
                if (!$this->register($data, $op_response->getDisplayIdentifier()))
                        return FALSE;