DataObjects/Events.php
[Pman.Core] / DataObjects / Core_person.php
index bdccdb0..cdd4fdd 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Table Definition for Person
  */
-require_once 'DB/DataObject.php';
+class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php';
 
 
 class Pman_Core_DataObjects_Core_person extends DB_DataObject 
@@ -151,7 +151,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         $decoder = new Mail_mimeDecode($mailtext);
         $parts = $decoder->getSendArray();
         
-        if (PEAR::isError($parts)) {
+        if (is_a($parts,'PEAR_Error')) {
             return $parts;
             //echo "PROBLEM: {$parts->message}";
             //exit;
@@ -263,8 +263,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (!empty($_SESSION[get_class($this)][$sesPrefix .'-auth'])) {
             // in session...
             $a = unserialize($_SESSION[get_class($this)][$sesPrefix .'-auth']);
-            
-            
+             
             $u = DB_DataObject::factory($this->tableName());
             if ($a->id && $u->get($a->id)) { //&& strlen($u->passwd)) {
               
@@ -293,8 +292,9 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize($u);
             return true; 
         }
-        
+        //die("test init");
         if (!$this->canInitializeSystem()) {
+          //  die("can not init");
             return false;
         }
         
@@ -304,13 +304,22 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (!empty($ff->Pman['local_autoauth']) && 
             ($ff->Pman['local_autoauth'] === true) &&
             (!empty($_SERVER['SERVER_ADDR'])) &&
-            ($_SERVER['SERVER_ADDR'] == '127.0.0.1') &&
-            ($_SERVER['REMOTE_ADDR'] == '127.0.0.1')  
+            (
+                (
+                    $_SERVER['SERVER_ADDR'] == '127.0.0.1' &&
+                    $_SERVER['REMOTE_ADDR'] == '127.0.0.1'
+                )
+                ||
+                (
+                    $_SERVER['SERVER_ADDR'] == '::1' &&
+                    $_SERVER['REMOTE_ADDR'] == '::1'
+                )
+            )
         ) {
-            $group = DB_DataObject::factory('Groups');
+            $group = DB_DataObject::factory('core_group');
             $group->get('name', 'Administrators');
             
-            $member = DB_DataObject::factory('group_members');
+            $member = DB_DataObject::factory('core_group_member');
             $member->autoJoin();
             $member->group_id = $group->id;
             $member->whereAdd("
@@ -330,8 +339,17 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         
         if (!empty($ff->Pman['local_autoauth']) && 
             (!empty($_SERVER['SERVER_ADDR'])) &&
-            ($_SERVER['SERVER_ADDR'] == '127.0.0.1') &&
-            ($_SERVER['REMOTE_ADDR'] == '127.0.0.1')  &&
+            (
+                (
+                    $_SERVER['SERVER_ADDR'] == '127.0.0.1' &&
+                    $_SERVER['REMOTE_ADDR'] == '127.0.0.1'
+                )
+                ||
+                (
+                    $_SERVER['SERVER_ADDR'] == '::1' &&
+                    $_SERVER['REMOTE_ADDR'] == '::1'
+                )
+            ) &&
             ($default_admin ||  $u->get('email', $ff->Pman['local_autoauth']))
         ) {
             $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize($default_admin ? $default_admin : $u);
@@ -350,9 +368,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         $u->whereAdd(' LENGTH(passwd) > 0');
         $n = $u->count();
         $_SESSION[get_class($this)][$sesPrefix .'-empty']  = $n;
-        $error =  PEAR::getStaticProperty('DB_DataObject','lastError');
-        if ($error) {
-            die($error->toString()); // not really a good thing to do...
+        if (class_exists('PEAR')) {
+            $error =  PEAR::getStaticProperty('DB_DataObject','lastError');
+            if ($error) {
+                die($error->toString()); // not really a good thing to do...
+            }
         }
         if (!$n){ // authenticated as there are no users in the system...
             return true;
@@ -364,6 +384,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function canInitializeSystem()
     {
+        
         return !strcasecmp(get_class($this) , __CLASS__);
     }
     
@@ -444,18 +465,18 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         }
         
         // open up iptables at login..
-        $dbname = $this->database();
+        $dbname = $this->databaseNickname();
         touch( '/tmp/run_pman_admin_iptables-'.$dbname);
          
         // refresh admin group if we are logged in as one..
         //DB_DataObject::debugLevel(1);
-        $g = DB_DataObject::factory('Groups');
+        $g = DB_DataObject::factory('core_group');
         $g->type = 0;
         $g->get('name', 'Administrators');
-        $gm = DB_DataObject::Factory('group_members');
+        $gm = DB_DataObject::Factory('core_group_member');
         if (in_array($g->id,$gm->listGroupMembership($this))) {
             // refresh admin groups.
-            $gr = DB_DataObject::Factory('group_rights');
+            $gr = DB_DataObject::Factory('core_group_right');
             $gr->applyDefs($g, 0);
         }
         
@@ -501,8 +522,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     function checkPassword($val)
     {
         
+        
         if (substr($this->passwd,0,1) == '$') {
-            
+            if (function_exists('pasword_verify')) {
+                return password_verify($val, $this->passwd);
+            }
             return crypt($val,$this->passwd) == $this->passwd ;
         }
         // old style md5 passwords...- cant be used with courier....
@@ -511,6 +535,10 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function setPassword($value) 
     {
+        if (function_exists('pasword_hash')) {
+            return password_hash($value);
+        }
+        
         $salt='';
         while(strlen($salt)<9) {
             $salt.=chr(rand(64,126));
@@ -532,7 +560,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function company()
     {
-        $x = DB_DataObject::factory('Companies');
+        $x = DB_DataObject::factory('core_company');
         $x->autoJoin();
         $x->get($this->company_id);
         return $x;
@@ -579,7 +607,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         
         
         //DB_DataObject::debugLevel(1);
-        $c = DB_Dataobject::factory('Companies');
+        $c = DB_Dataobject::factory('core_company');
         $im = DB_Dataobject::factory('Images');
         $c->joinAdd($im, 'LEFT');
         $c->selectAdd();
@@ -594,7 +622,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (empty($c->company_id_logo_id_id))  {
                  
             $im = DB_Dataobject::factory('Images');
-            $im->ontable = 'Companies';
+            $im->ontable = DB_DataObject::factory('core_company')->tableName();
             $im->onid = $c->id;
             $im->imgtype = 'LOGO';
             $im->limit(1);
@@ -610,7 +638,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
       
         // perms + groups.
         $aur['perms']  = $this->getPerms();
-        $g = DB_DataObject::Factory('group_members');
+        $g = DB_DataObject::Factory('core_group_member');
         $aur['groups']  = $g->listGroupMembership($this, 'name');
         
         $aur['passwd'] = '';
@@ -629,7 +657,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         
         // ------ INIITIALIZE IF NO GROUPS ARE SET UP.
         
-        $g = DB_DataObject::Factory('group_rights');
+        $g = DB_DataObject::Factory('core_group_right');
         if (!$g->count()) {
             $g->genDefault();
         }
@@ -638,13 +666,13 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             return $g->adminRights(); // system is not set up - so they get full rights.
         }
         //DB_DataObject::debugLevel(1);
-        $g = DB_DataObject::Factory('group_members');
+        $g = DB_DataObject::Factory('core_group_member');
         $g->whereAdd('group_id is NOT NULL AND user_id IS NOT NULL');
         if (!$g->count()) {
             // add the current user to the admin group..
-            $g = DB_DataObject::Factory('Groups');
+            $g = DB_DataObject::Factory('core_group');
             if ($g->get('name', 'Administrators')) {
-                $gm = DB_DataObject::Factory('group_members');
+                $gm = DB_DataObject::Factory('core_group_member');
                 $gm->group_id = $g->id;
                 $gm->user_id = $this->id;
                 $gm->insert();
@@ -654,14 +682,14 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         
         // ------ STANDARD PERMISSION HANDLING.
         $isOwner = $this->company()->comptype == 'OWNER';
-        $g = DB_DataObject::Factory('group_members');
+        $g = DB_DataObject::Factory('core_group_member');
         $grps = $g->listGroupMembership($this);
        //var_dump($grps);
-        $isAdmin = $g->inAdmin;
+        $isAdmin = $g->inAdmin;   //???  what???
         //echo '<PRE>'; print_r($grps);var_dump($isAdmin);
         // the load all the perms for those groups, and add them all together..
         // then load all those 
-        $g = DB_DataObject::Factory('group_rights');
+        $g = DB_DataObject::Factory('core_group_right');
         $ret =  $g->listPermsFromGroupIds($grps, $isAdmin, $isOwner);
         //echo '<PRE>';print_r($ret);
         return $ret;
@@ -676,9 +704,9 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function groups($what=false)
     {
-        $g = DB_DataObject::Factory('group_members');
+        $g = DB_DataObject::Factory('core_group_member');
         $grps = $g->listGroupMembership($this);
-        $g = DB_DataObject::Factory('Groups');
+        $g = DB_DataObject::Factory('core_group');
         $g->whereAddIn('id', $grps, 'int');
         return $g->fetchAll($what);
         
@@ -761,8 +789,8 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             $this->active = 1;
         }
         $tn_p = $this->tableName();
-        $tn_gm = DB_DataObject::Factory('group_members')->tableName();
-        $tn_g = DB_DataObject::Factory('Groups')->tableName();
+        $tn_gm = DB_DataObject::Factory('core_group_member')->tableName();
+        $tn_g = DB_DataObject::Factory('core_group')->tableName();
 
         ///---------------- Group views --------
         if (!empty($q['query']['in_group'])) {
@@ -788,6 +816,24 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             
         }
         
+        if(!empty($q['in_group_name'])){
+            
+            $v = $this->escape($q['in_group_name']);
+            
+            $this->whereAdd("
+                $tn_p.id IN (
+                    SELECT 
+                        DISTINCT(user_id) FROM $tn_gm
+                    LEFT JOIN
+                        $tn_g
+                    ON
+                        $tn_g.id = $tn_gm.group_id
+                    WHERE 
+                        $tn_g.name = '{$v}'
+                )"
+            );
+        }
+        
         // #2307 Search Country!!
         if (!empty($q['query']['in_country'])) {
             // DB_DataObject::debugLevel(1);
@@ -801,7 +847,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             
             // specific to project directory which is single comp. login
             //
-            $owncomp = DB_DataObject::Factory('Companies');
+            $owncomp = DB_DataObject::Factory('core_company');
             $owncomp->get('comptype', 'OWNER');
             if ($q['company_id'] == $owncomp->id) {
                 $this->active =1;
@@ -964,12 +1010,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     }
     function setFromRoo($ar, $roo)
     {
-        $this->setFrom($ar);
+         $this->setFrom($ar);
         if (!empty($ar['passwd1'])) {
             $this->setPassword($ar['passwd1']);
         }
         
-        
         if (    $this->id &&
                 ($this->email == $roo->old->email)&&
                 ($this->company_id == $roo->old->company_id)
@@ -979,6 +1024,13 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (empty($this->email)) {
             return true;
         }
+        // this only applies to our owner company..
+        $c = $this->company();
+        if (empty($c->comptype_name) || $c->comptype_name != 'OWNER') {
+            return true;
+        }
+        
+        
         $xx = DB_Dataobject::factory($this->tableName());
         $xx->setFrom(array(
             'email' => $this->email,
@@ -996,7 +1048,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
      * this is called after checkPerm..
      */
     
-    function beforeDelete()
+    function beforeDelete($dependants_array, $roo)
     {
         
         $e = DB_DataObject::Factory('Events');
@@ -1029,7 +1081,7 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         }
         
         // determine if it's staff!!!
-        $owncomp = DB_DataObject::Factory('Companies');
+        $owncomp = DB_DataObject::Factory('core_company');
         $owncomp->get('comptype', 'OWNER');
         $isStaff = ($au->company_id ==  $owncomp->id);
        
@@ -1081,11 +1133,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     
     function beforeInsert($req, $roo)
     {
-        $p = DB_DataObject::factory('person');
+        $p = DB_DataObject::factory('core_person');
         if ($roo->authUser->id > -1 ||  $p->count() > 1) {
             return;
         }
-        $c = DB_DAtaObject::Factory('Companies');
+        $c = DB_DAtaObject::Factory('core_company');
         $tc =$c->count();
         if (!$tc || $tc> 1) {
             $roo->jerr("can not create initial user as multiple companies already exist");
@@ -1098,17 +1150,17 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
     function onInsert($req, $roo)
     {
          
-        $p = DB_DataObject::factory('person');
+        $p = DB_DataObject::factory('core_person');
         if ($roo->authUser->id < 0 && $p->count() == 1) {
             // this seems a bit risky...
             
-            $g = DB_DataObject::factory('Groups');
+            $g = DB_DataObject::factory('core_group');
             $g->initGroups();
             
             $g->type = 0;
             $g->get('name', 'Administrators');
             
-            $p = DB_DataObject::factory('group_members');
+            $p = DB_DataObject::factory('core_group_member');
             $p->group_id = $g->id;
             $p->user_id = $this->id;     
             if (!$p->count()) {
@@ -1138,16 +1190,16 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         if (!is_array($persons) || empty($persons)) {
             $roo->jerr("error in the person data. - empty on not valid");
         }
-        DB_DataObject::factory('groups')->initGroups();
+        DB_DataObject::factory('core_group')->initGroups();
         
         foreach($persons as $person){
-            $p = DB_DataObject::factory('person');
+            $p = DB_DataObject::factory('core_person');
             if($p->get('name', $person['name'])){
                 continue;
             }
             $p->setFrom($person);
             
-            $companies = DB_DataObject::factory('companies');
+            $companies = DB_DataObject::factory('core_company');
             if(!$companies->get('comptype', 'OWNER')){
                 $roo->jerr("Missing OWNER companies!");
             }
@@ -1160,11 +1212,11 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
             // if $person->groups is set.. then
             // add this person to that group eg. groups : [ 'Administrator' ] 
             if(!empty($person['groups'])){
-                $groups = DB_DataObject::factory('groups');
+                $groups = DB_DataObject::factory('core_group');
                 if(!$groups->get('name', $person['groups'])){
                     $roo->jerr("Missing groups : {$person['groups']}");
                 }
-                $gm = DB_DataObject::factory('group_members');
+                $gm = DB_DataObject::factory('core_group_member');
                 $gm->change($p, $groups, true);
             }
             
@@ -1206,11 +1258,33 @@ class Pman_Core_DataObjects_Core_person extends DB_DataObject
         
         $appname = empty($ff->appNameShort) ? $ff->project : $ff->project . '-' . $ff->appNameShort;
         
-        $db = $this->getDatabaseConnection();
+        $dname = method_exists($this, 'getDatabaseConnection') ? $this->getDatabaseConnection()->dsn['database'] : $this->databaseNickname();
         
-        $sesPrefix = $appname.'-' .get_class($this) .'-'.$db->dsn['database'] ;
+        $sesPrefix = $appname.'-' .get_class($this) .'-' . $dname;
 
         return $sesPrefix;
     }
     
+    function loginPublic()
+    {
+        $this->isAuth(); // force session start..
+         
+        $db = $this->getDatabaseConnection();
+        
+        $ff = HTML_FlexyFramework::get();
+        
+        if(empty($ff->Pman) || empty($ff->Pman['login_public'])){
+            return false;
+        }
+        
+        $sesPrefix = $ff->Pman['login_public'] . '-' .get_class($this) .'-'.$db->dsn['database'] ;
+        
+        $p = DB_DAtaObject::Factory($this->tableName());
+        $p->get($this->pid());
+        
+        $_SESSION[get_class($this)][$sesPrefix .'-auth'] = serialize((object)$p->toArray());
+        
+        return true;
+    }
+    
  }