handle empty companies
[Pman.Core] / DataObjects / Core_person.php
index 29d3cbd..5160b4e 100644 (file)
@@ -56,7 +56,8 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
  
     function owner()
     {
-        $p = DB_DataObject::Factory($this->tableName());
+        // this might be a Person in some old code? 
+        $p = DB_DataObject::Factory('core_person');
         $p->get($this->owner_id);
         return $p;
     }
@@ -290,8 +291,8 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             $u->checkPassword($_SERVER['PHP_AUTH_PW'])
            ) {
             // logged in via http auth
-            
-            $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize($u);
+            // http auth will not need session... 
+            //$_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize($u);
             self::$authUser = $u;
             return true; 
         }
@@ -306,16 +307,20 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (!empty($ff->Pman['local_autoauth']) && $ff->Pman['local_autoauth'] === true) {
             $auto_auth_allow  = true;
         }
-        if  (
-                (!empty($_SERVER['SERVER_ADDR'])) &&
-                (
-                    $_SERVER['SERVER_ADDR'] == '127.0.0.1' &&
-                    $_SERVER['REMOTE_ADDR'] == '127.0.0.1'
-                )
-                ||
+        if  ( !empty($ff->Pman['local_autoauth'])
+             &&
+                !empty($_SERVER['SERVER_ADDR']) &&
+                !empty($_SERVER['REMOTE_ADDR']) &&
                 (
-                    $_SERVER['SERVER_ADDR'] == '::1' &&
-                    $_SERVER['REMOTE_ADDR'] == '::1'
+                    (
+                       $_SERVER['SERVER_ADDR'] == '127.0.0.1' &&
+                       $_SERVER['REMOTE_ADDR'] == '127.0.0.1'
+                   )
+                   ||
+                   (
+                       $_SERVER['SERVER_ADDR'] == '::1' &&
+                       $_SERVER['REMOTE_ADDR'] == '::1'
+                   )
                 )
                 
             ){
@@ -323,7 +328,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         }
         
         
-        if (empty($_SERVER['PATH_INFO']) || $_SERVER['PATH_INFO'] == '/Login') {
+        if (empty($_SERVER['PATH_INFO']) ||  $_SERVER['PATH_INFO'] == '/Login') {
             $auto_auth_allow  = false;
         }
         //var_dump($auto_auth_allow);
@@ -341,6 +346,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             ");
             if($member->find(true)){
                 $default_admin = DB_DataObject::factory($this->tableName());
+                $default_admin->autoJoin();
                 if(!$default_admin->get($member->user_id)){
                     $default_admin = false;
                 }
@@ -349,16 +355,17 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         
         //var_dump($ff->Pman['local_autoauth']);         var_dump($_SERVER); exit;
         $u = DB_DataObject::factory($this->tableName());
+        $u->autoJoin();
         $ff = HTML_FlexyFramework::get();
         
-        if ($auto_auth_allow &&
+        if ($auto_auth_allow && 
             ($default_admin ||  $u->get('email', $ff->Pman['local_autoauth']))
         ) {
             
             $user = $default_admin ? $default_admin->toArray() : $u->toArray();
             
             // if we request other URLS.. then we get auto logged in..
-            self::$authUser = $u;
+            self::$authUser = $default_admin ? $default_admin : $u;;
             //$_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize((object) $user);
             return true;
         }
@@ -412,8 +419,8 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
                 $_SESSION[get_class($this)][$sesPrefix .'-auth-timeout'] = time() + (30*60); // eg. 30 minutes
                 setcookie('Pman.timeout', time() + (30*60), time() + (30*60), '/');
             }
-            
-            return = clone (self::$authUser);
+            // not really sure why it's cloned..
+            return   clone (self::$authUser);
              
             
         }
@@ -495,7 +502,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         //var_dump(array(get_class($this),$sesPrefix .'-auth'));
         $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize((object)$d);
         
-        self::$authUser = $p;
+        $pp = DB_DAtaObject::Factory($this->tableName());
+        $pp->get($this->pid());
+        $pp->autoJoin();
+        
+        self::$authUser = $pp;
         // ensure it's written so that ajax calls can fetch it..
         
         
@@ -591,6 +602,9 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function company()
     {
+        if (empty($this->company_id)) {
+            return false;
+        }
         $x = DB_DataObject::factory('core_company');
         $x->autoJoin();
         $x->get($this->company_id);
@@ -616,7 +630,8 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (!func_num_args()) {
             return $this->lang;
         }
-        $val = array_shift(func_get_args());
+        $ar = func_get_args();
+        $val = array_shift($ar);
         if ($val == $this->lang) {
             return;
         }
@@ -629,14 +644,12 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function authUserArray()
     {
-        
         $aur = $this->toArray();
         
         if ($this->id < 1) {
             return $aur;
         }
         
-        
         //DB_DataObject::debugLevel(1);
         $c = DB_Dataobject::factory('core_company');
         $im = DB_Dataobject::factory('Images');
@@ -683,9 +696,18 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         $aur['require_oath'] = 1;
         
         $s = DB_DataObject::Factory('core_setting');
-        $oath_require = $s->lookup('core', 'two_factor_authentication_requirement');
+        $oath_require = $s->lookup('core', 'two_factor_auth_required');
         $aur['require_oath'] = $oath_require ?  $oath_require->val : 0;
         
+        $aur['core_person_settings'] = array();
+                
+        $core_person_settings = DB_DataObject::factory('core_person_settings');
+        $core_person_settings->setFrom(array(
+            'person_id' => $this->id
+        ));
+        
+        $aur['core_person_settings'] = $core_person_settings->fetchAll('scope', 'data');
+        
         return $aur;
     }
     
@@ -801,7 +823,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
                 $roo->jerr('Fail to generate QR Code');
             }
             
-            $roo->jok($qrcode);
+            $roo->jdata(array(
+                'secret' => $hash,
+                'image' => $qrcode,
+                'issuer' => $person->qrCodeIssuer()
+            ));
         }
         
         if(!empty($q['two_factor_auth_code'])) {
@@ -1111,13 +1137,33 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
                 LENGTH({$this->tableName()}.oath_key) AS length_oath_key
             ");
         }
-        
+        if (isset($q['_with_group_membership'])) {
+            $this->selectAddGroupMemberships();
+        }
         
     }
     
+    function selectAddGroupMemberships()
+    {
+        $this->selectAdd("
+            
+            COALESCE((
+                SELECT
+                    GROUP_CONCAT(  core_group.name separator  '\n')
+                FROM
+                    core_group_member
+                LEFT JOIN
+                    core_group
+                ON
+                    core_group.id = core_group_member.group_id
+                WHERE
+                    core_group_member.user_id = core_person.id
+            ), '')  as member_of");
+    }
+    
     function setFromRoo($ar, $roo)
     {
-        $this->setFrom($ar);
+        $this->setFrom($ar); 
         
         if(!empty($ar['_enable_oath_key'])){
             $oath_key = $this->generateOathKey();
@@ -1138,7 +1184,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         }
         // this only applies to our owner company..
         $c = $this->company();
-        if (empty($c->comptype_name) || $c->comptype_name != 'OWNER') {
+        if (empty($c) || empty($c->comptype_name) || $c->comptype_name != 'OWNER') {
             return true;
         }
         
@@ -1460,8 +1506,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             return false;
         }
         
-        $issuer = (empty($this->name)) ? 
-            rawurlencode('ROOJS') : rawurlencode($this->name);
+        $issuer = rawurlencode($this->qrCodeIssuer());
         
         $uri = "otpauth://totp/{$issuer}:{$this->email}?secret={$hash}&issuer={$issuer}&algorithm=SHA1&digits=6&period=30";
         
@@ -1481,4 +1526,32 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         return "data:image/png;base64,{$base64}";
     }
     
+    function qrCodeIssuer()
+    {
+        $pg= HTML_FlexyFramework::get()->page;
+        
+        $issuer = (empty($pg->company->name)) ?  'ROOJS' : "{$pg->company->name}";
+        
+        return $issuer;
+    }
+    
+    static function test_ADMIN_PASSWORD_RESET($pg, $to)
+    {
+        $ff = HTML_FlexyFramework::get();
+        $person = DB_DataObject::Factory('core_person');
+        $person->id = -1;
+        
+        return array(
+            'HTTP_HOST' => $_SERVER['SERVER_NAME'],
+            'person' => $person,
+            'authFrom' => 'FAKE_LINK',
+            'authKey' => 'FAKE_KEY',
+
+            'rcpts' => $to->email,
+        );
+        
+        return $content;
+    }
+    
+    
  }