From: Alan Knowles Date: Sat, 27 Oct 2012 13:08:27 +0000 (+0800) Subject: Merge branch 'master' of http://git.roojs.com:8081/Pman.Core X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=commitdiff_plain;h=7e9cdd246cc8bba1ce46a4db263a0f49b7cbc5a0;hp=d79f1b0b766ed571150c04e2a102c10a52a0bfba Merge branch 'master' of git.roojs.com:8081/Pman.Core --- diff --git a/DataObjects/Companies.php b/DataObjects/Companies.php index 0764d35b..0b5d8aba 100644 --- a/DataObjects/Companies.php +++ b/DataObjects/Companies.php @@ -288,6 +288,22 @@ class Pman_Core_DataObjects_Companies extends DB_DataObject return $fm->toHTML($size, $base); } + function toRooSingleArray($authUser, $request) + { + $ret = $this->toArray(); + // DB_DataObject::debugLevel(1); + // get the comptype display + $e = DB_DataObject::Factory('core_enum'); + $e->etype = 'COMPTYPE'; + $e->name = $this->comptype; + $ret['comptype_display'] = $ret['comptype']; + if ($e->find(true) && !empty($e->name_display)) { + $ret['comptype_display'] = $e->name_display; + } + + + return $ret; + } } diff --git a/DataObjects/Core_enum.php b/DataObjects/Core_enum.php index b6d1c39b..c3e23e9b 100644 --- a/DataObjects/Core_enum.php +++ b/DataObjects/Core_enum.php @@ -16,7 +16,7 @@ class Pman_Core_DataObjects_Core_enum extends DB_DataObject public $active; // int(2) not_null public $seqid; // int(11) not_null multiple_key public $seqmax; // int(11) not_null multiple_key - + public $display_name; /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE diff --git a/DataObjects/Events.php b/DataObjects/Events.php index 25265c27..426e87be 100644 --- a/DataObjects/Events.php +++ b/DataObjects/Events.php @@ -81,7 +81,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $this->selectAdd("count($tn.id) as qty"); $this->selectAdd("count( distinct $tn.on_id) as uqty"); $this->whereAdd('LENGTH(join_person_id_id.name) > 0 '); - $this->groupBy('person_id'); + $this->groupBy('person_id,join_person_id_id.name,join_person_id_id.email'); } if (isset($q['query']['table_sum'])) { //DB_DataObject::debugLevel(1); @@ -389,4 +389,65 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $x->insert(); } + + + + function onInsert($request,$roo) + { + $this->writeEventLog(); + } + + function writeEventLog() + { + $ff = HTML_FlexyFramework::get(); + if (empty($ff->Pman['event_log_dir'])) { + return false; + } + + // add user (eg. www-data or local user if not..) + if (function_exists('posix_getpwuid')) { + $uinfo = posix_getpwuid( posix_getuid () ); + + $user = $uinfo['name']; + } else { + $user = getenv('USERNAME'); // windows. + } + //print_r($this); + $file = $ff->Pman['event_log_dir']. '/'. $user. date('/Y/m/d/'). $this->id . ".json"; + if (!file_exists(dirname($file))) { + mkdir(dirname($file),0700,true); + } + + // Remove all the password from logs... + $p = empty($_POST) ? array() : $_POST; + foreach(array('passwd', 'password', 'passwd2', 'password2') as $rm) { + if (isset($p[$rm])) { + $p['passwd'] = '******'; + } + } + $i=0; + $files = array(); + foreach ($_FILES as $k=>$f){ + if (empty($f['tmp_name']) || !file_exists($f['tmp_name'])) { + continue; + } + $i++; + $files[$k] = $f; + $files[$k]['tmp_name'] = $this->id . '.file_'. $i.'.jpg'; + $nf = $ff->Pman['event_log_dir']. '/'. $this->id . ".file_$i.jpg"; + if (!copy($f['tmp_name'], $nf)) { + print_r("failed to copy {$f['tmp_name']}...\n"); + } + } + + file_put_contents($file, json_encode(array( + 'REQUEST_URI' => empty($_SERVER['REQUEST_URI']) ? 'cli' : $_SERVER['REQUEST_URI'], + 'GET' => empty($_GET) ? array() : $_GET, + 'POST' =>$p, + 'FILES' => $files, + ))); + + } + + } diff --git a/DataObjects/Group_Members.php b/DataObjects/Group_members.php similarity index 92% rename from DataObjects/Group_Members.php rename to DataObjects/Group_members.php index f0c305d5..a03317f9 100755 --- a/DataObjects/Group_Members.php +++ b/DataObjects/Group_members.php @@ -4,12 +4,12 @@ */ require_once 'DB/DataObject.php'; -class Pman_Core_DataObjects_Group_Members extends DB_DataObject +class Pman_Core_DataObjects_Group_members extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ - public $__table = 'Group_Members'; // table name + public $__table = 'group_members'; // table name public $group_id; // int(11) public $id; // int(11) not_null primary_key auto_increment public $user_id; // int(11) not_null @@ -23,7 +23,7 @@ class Pman_Core_DataObjects_Group_Members extends DB_DataObject function change($person, $group, $state) { - $gm = DB_DataObject::factory('Group_Members'); + $gm = DB_DataObject::factory('group_members'); $gm->group_id = $group->id; $gm->user_id = $person->id; $gm->find(true); diff --git a/DataObjects/Group_Rights.php b/DataObjects/Group_rights.php similarity index 81% rename from DataObjects/Group_Rights.php rename to DataObjects/Group_rights.php index c1748fcb..c84ef9bf 100755 --- a/DataObjects/Group_Rights.php +++ b/DataObjects/Group_rights.php @@ -16,12 +16,12 @@ require_once 'DB/DataObject.php'; -class Pman_Core_DataObjects_Group_Rights extends DB_DataObject +class Pman_Core_DataObjects_Group_rights extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ - public $__table = 'Group_Rights'; // table name + public $__table = 'group_rights'; // table name public $rightname; // string(64) not_null public $group_id; // int(11) not_null public $accessmask; // string(10) not_null @@ -34,13 +34,19 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject var $fullRights = "ADESPIM"; - function listPermsFromGroupIds($grps, $isAdmin=false) { + function listPermsFromGroupIds($grps, $isAdmin=false, $isOwner = false) { $t = clone($this); $t->whereAdd('group_id IN ('. implode(',', $grps).')'); + $t->autoJoin(); $t->find(); - $ret = array(); + + $ret = array(); while($t->fetch()) { + + + + if (isset($ret[$t->rightname])) { $ret[$t->rightname] = $this->mergeMask($ret[$t->rightname], $t->accessmask); continue; @@ -49,9 +55,15 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject } // blank out rights that are disabled by the system.. $defs = $this->defaultPermData(); + + + //echo "
";print_r($defs);
         $r = array();
         foreach($defs as $k=>$v) {
+            
+            
+            
             if (empty($v[0])) { // delete right if not there..
                 $r[$k] = '';
                 continue;
@@ -60,14 +72,18 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject
             
             if (isset($ret[$k])) {
                 if (empty($ret[$k]) && $isAdmin) {
-                    $r[$k] = $v[0];
+                    $r[$k] = $v[0] ; // -- it's admin they get rights... can not be disabled..
                     continue;
                 }
-                
+                // in theory non-owners could sneak in rights here..??
                 $r[$k] = $ret[$k];
                 continue;
             }
             // not set contition...
+            if (!$isOwner) {
+                $r[$k] = '';
+                continue;
+            }
             
             $r[$k] = $isAdmin ? $v[0] : $v[1];
             
@@ -111,12 +127,22 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject
         // M????
         
         
-        
+        $gid = empty($this->group_id) ? 0 : $this->group_id;
         static $Pman_DataObjects_Group_Right = array();
-        if (!empty($Pman_DataObjects_Group_Right)) {
-            return $Pman_DataObjects_Group_Right;
+        
+        
+        if (!empty($Pman_DataObjects_Group_Right[$gid])) {
+            return $Pman_DataObjects_Group_Right[$gid];
+        }
+        $has_admin = true; ///?? not sure..
+        if ($gid) {
+            $g = DB_DataObject::factory('groups');
+            $g->get($this->group_id);
+            $has_admin = $g->type  == 2 ? false : true;
         }
         
+        
+        
         $ff = HTML_FlexyFramework::get();
         //print_R($ff);
         $enabled =  array('Core') ;
@@ -126,6 +152,11 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject
         $ret = array();
          //echo '
';print_r($enabled);
         foreach($enabled as $module) {
+            
+            if (($module == 'Admin') && !$has_admin) {
+                continue;
+            }
+            
             $fn = $pman. $module.  '/'.$module. '.perms.json';
             if (!file_exists($fn)) {
                 continue;
@@ -147,9 +178,9 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject
             }
             
         }
-        $Pman_DataObjects_Group_Right = $ret;
+        $Pman_DataObjects_Group_Right[$gid] = $ret;
        // print_r($ret);
-        return $Pman_DataObjects_Group_Right;
+        return $Pman_DataObjects_Group_Right[$gid];
          
         
     }
@@ -170,7 +201,7 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject
     {
         // all groups must have the minimum privaligess..
         // admin group must have all the privaliges
-        $g = DB_DataObject::Factory('Groups');
+        $g = DB_DataObject::Factory('groups');
         $g->get($this->group_id);
         $defs = $this->defaultPermData();
         switch($g->name) {
@@ -217,7 +248,7 @@ class Pman_Core_DataObjects_Group_Rights extends DB_DataObject
         //echo '
';print_r($defs);
         //$usecol = 1;
         foreach($defs as $rightname => $defdata) {
-            $gr = DB_DataObject::Factory('Group_Rights');
+            $gr = DB_DataObject::Factory('group_rights');
             $gr->rightname  = $rightname;
             $gr->group_id = $g->id;
             if (!$gr->find(true)) {
diff --git a/DataObjects/Groups.php b/DataObjects/Groups.php
index ef4c082e..03786a18 100755
--- a/DataObjects/Groups.php
+++ b/DataObjects/Groups.php
@@ -28,8 +28,8 @@ class Pman_Core_DataObjects_Groups extends DB_DataObject
     function beforeDelete()
     {
         $x = DB_DataObject::factory('Groups');
-        $x->query("DELETE FROM Group_Rights WHERE group_id = {$this->id}");
-        $x->query("DELETE FROM Group_Members WHERE group_id = {$this->id}");
+        $x->query("DELETE FROM group_rights WHERE group_id = {$this->id}");
+        $x->query("DELETE FROM group_members WHERE group_id = {$this->id}");
     }
     /**
      * check who is trying to access this. false == access denied..
@@ -58,7 +58,7 @@ class Pman_Core_DataObjects_Groups extends DB_DataObject
         $pi = DB_DataObject::factory(empty($ff->Pman['authTable']) ? 'Person' : $ff->Pman['authTable']);
         $pi->get($this->leader);
             
-        $p = DB_DataObject::factory('Group_Members');
+        $p = DB_DataObject::factory('group_members');
         $p->group_id = $this->id;
         $p->user_id = $this->leader;
         //$p->type = 1; //???????
@@ -72,7 +72,7 @@ class Pman_Core_DataObjects_Groups extends DB_DataObject
     
     function memberIds()
     {
-        $gm = DB_Dataobject::factory('Group_Members');
+        $gm = DB_Dataobject::factory('group_members');
         $gm->group_id = $this->id;
         return $gm->fetchAll('user_id');
         
@@ -81,7 +81,7 @@ class Pman_Core_DataObjects_Groups extends DB_DataObject
     
     function addMember($person)
     {
-        $gm = DB_Dataobject::factory('Group_Members');
+        $gm = DB_Dataobject::factory('group_members');
         $gm->group_id = $this->id;
         $gm->user_id = $person->id;
         if (!$gm->count()) {
diff --git a/DataObjects/Images.php b/DataObjects/Images.php
index 014e4201..446fda14 100644
--- a/DataObjects/Images.php
+++ b/DataObjects/Images.php
@@ -26,7 +26,6 @@ class Pman_Core_DataObjects_Images extends DB_DataObject
     public $linkurl;                         // string(254)  not_null
     public $descript;                        // blob(65535)  not_null blob
     public $title;                           // string(128)  not_null
-
     
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
@@ -149,7 +148,6 @@ class Pman_Core_DataObjects_Images extends DB_DataObject
         ));
           
     }
-
      
     /**
      * deletes all the image instances of it...
@@ -451,6 +449,17 @@ class Pman_Core_DataObjects_Images extends DB_DataObject
         return $fc;
         
     }
+    
+    function fileExt()
+    {
+        require_once 'File/MimeType.php';
+        
+        $y = new File_MimeType();
+        return  $y->toExt($this->mimetype);
+        
+        
+    }
+    
     /**
      *
      *
diff --git a/DataObjects/Person.php b/DataObjects/Person.php
index 129d9a67..3ab74eb7 100644
--- a/DataObjects/Person.php
+++ b/DataObjects/Person.php
@@ -82,13 +82,22 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
             (isset($ff->HTTP_HOST) ? $ff->HTTP_HOST : 'localhost');
             
         /* use the regex compiler, as it doesnt parse  'Flexy',
             'nonHTML' => true,
             'filters' => array('SimpleTags','Mail'),
             //     'debug'=>1,
-        ));
+        );
+        
+        
+        
+        if (!empty($args['templateDir'])) {
+            $tops['templateDir'] = $args['templateDir'];
+        }
+        
+        require_once 'HTML/Template/Flexy.php';
+        $template = new HTML_Template_Flexy( $tops );
         
      
          
@@ -285,10 +294,10 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
         $g = DB_DataObject::factory('Groups');
         $g->type = 0;
         $g->get('name', 'Administrators');
-        $gm = DB_DataObject::Factory('Group_Members');
+        $gm = DB_DataObject::Factory('group_members');
         if (in_array($g->id,$gm->listGroupMembership($this))) {
             // refresh admin groups.
-            $gr = DB_DataObject::Factory('Group_Rights');
+            $gr = DB_DataObject::Factory('group_rights');
             $gr->applyDefs($g, 0);
         }
              
@@ -347,7 +356,7 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
     }
     
     function active()
-    {
+    { 
         return $this->active;
     }
     function authUserName($n) // set username prior to acheck user exists query.
@@ -410,7 +419,7 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
       
         // perms + groups.
         $aur['perms']  = $this->getPerms();
-        $g = DB_DataObject::Factory('Group_Members');
+        $g = DB_DataObject::Factory('group_members');
         $aur['groups']  = $g->listGroupMembership($this, 'name');
         
         $aur['passwd'] = '';
@@ -429,7 +438,7 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
         
         // ------ INIITIALIZE IF NO GROUPS ARE SET UP.
         
-        $g = DB_DataObject::Factory('Group_Rights');
+        $g = DB_DataObject::Factory('group_rights');
         if (!$g->count()) {
             $g->genDefault();
         }
@@ -438,13 +447,13 @@ class Pman_Core_DataObjects_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('group_members');
         $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');
             if ($g->get('name', 'Administrators')) {
-                $gm = DB_DataObject::Factory('Group_Members');
+                $gm = DB_DataObject::Factory('group_members');
                 $gm->group_id = $g->id;
                 $gm->user_id = $this->id;
                 $gm->insert();
@@ -453,16 +462,16 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
         }
         
         // ------ STANDARD PERMISSION HANDLING.
-        
-        $g = DB_DataObject::Factory('Group_Members');
+        $isOwner = $this->company()->comptype == 'OWNER';
+        $g = DB_DataObject::Factory('group_members');
         $grps = $g->listGroupMembership($this);
        //var_dump($grps);
         $isAdmin = $g->inAdmin;
         //echo '
'; 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');
-        $ret =  $g->listPermsFromGroupIds($grps, $isAdmin);
+        $g = DB_DataObject::Factory('group_rights');
+        $ret =  $g->listPermsFromGroupIds($grps, $isAdmin, $isOwner);
         //echo '
';print_r($ret);
         return $ret;
          
@@ -476,7 +485,7 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
     
     function groups($what=false)
     {
-        $g = DB_DataObject::Factory('Group_Members');
+        $g = DB_DataObject::Factory('group_members');
         $grps = $g->listGroupMembership($this);
         $g = DB_DataObject::Factory('Groups');
         $g->whereAddIn('id', $grps, 'int');
@@ -554,7 +563,7 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
             $this->active = 1;
         }
         $tn_p = $this->tableName();
-        $tn_gm = DB_DataObject::Factory('Group_Members')->tableName();
+        $tn_gm = DB_DataObject::Factory('group_members')->tableName();
         $tn_g = DB_DataObject::Factory('Groups')->tableName();
 
         ///---------------- Group views --------
@@ -766,7 +775,7 @@ class Pman_Core_DataObjects_Person extends DB_DataObject
             $g->type = 0;
             $g->get('name', 'Administrators');
             
-            $p = DB_DataObject::factory('Group_Members');
+            $p = DB_DataObject::factory('group_members');
             $p->group_id = $g->id;
             $p->user_id = $this->id;     
             if (!$p->count()) {
diff --git a/DataObjects/core.sql b/DataObjects/core.sql
index 06db0289..aa0b3eeb 100644
--- a/DataObjects/core.sql
+++ b/DataObjects/core.sql
@@ -16,7 +16,7 @@ ALTER TABLE Companies ADD COLUMN    email varchar(128)  default NULL;
 ALTER TABLE Companies ADD COLUMN    isOwner int(11) default NULL;
 ALTER TABLE Companies ADD COLUMN    logo_id INT(11)  NOT NULL DEFAULT 0;;
 ALTER TABLE Companies ADD COLUMN    background_color varchar(8)  NOT NULL;
-ALTER TABLE Companies ADD COLUMN    comptype varchar(8)  NOT NULL DEFAULT '';
+ALTER TABLE Companies ADD COLUMN    comptype varchar(32)  NOT NULL DEFAULT '';
 ALTER TABLE Companies ADD COLUMN    url varchar(254)  NOT NULL DEFAULT '';
 ALTER TABLE Companies ADD COLUMN    main_office_id int(11)  NOT NULL DEFAULT 0;
 ALTER TABLE Companies ADD COLUMN    created_by int(11)  NOT NULL DEFAULT 0;
@@ -30,6 +30,7 @@ ALTER TABLE Companies ADD COLUMN    country varchar(4) NOT NULL DEFAULT '';
 
 
 ALTER TABLE Companies CHANGE COLUMN isOwner isOwner int(11);
+ALTER TABLE Companies CHANGE COLUMN comptype comptype  VARCHAR(32) DEFAULT '';
 -- postres
 ALTER TABLE Companies ALTER isOwner TYPE int(11);
 ALTER TABLE Companies ALTER owner_id SET DEFAULT 0;
@@ -106,23 +107,30 @@ ALTER TABLE core_event_audit ADD COLUMN       old_audit_id int(11)  NOT NULL DEF
 ALTER TABLE core_event_audit ADD COLUMN       newvalue BLOB  NOT NULL DEFAULT '';
 ALTER TABLE core_event_audit ADD   INDEX lookup(event_id, name, old_audit_id);
 
-CREATE TABLE  Group_Members  (
+-- BC name..
+RENAME TABLE Group_Members TO group_members;
+
+CREATE TABLE  group_members  (
     id int(11)  NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (id)
 );
-ALTER TABLE Group_Members ADD COLUMN  group_id int(11) default NULL;
-ALTER TABLE Group_Members ADD COLUMN   user_id int(11) NOT NULL default 0;
+ALTER TABLE group_members ADD COLUMN  group_id int(11) default NULL;
+ALTER TABLE group_members ADD COLUMN   user_id int(11) NOT NULL default 0;
+
+-- BC name..
+RENAME TABLE Group_Rights TO group_rights;
+
 
-CREATE TABLE  Group_Rights  (
+CREATE TABLE  group_rights  (
     id int(11)  NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (id)
 );
-ALTER TABLE Group_Rights ADD COLUMN    rightname varchar(64)  NOT NULL DEFAULT '';
-ALTER TABLE Group_Rights ADD COLUMN     group_id int(11) NOT NULL DEFAULT 0;
-ALTER TABLE Group_Rights ADD COLUMN   accessmask varchar(10)  NOT NULL DEFAULT '';
+ALTER TABLE group_rights ADD COLUMN    rightname varchar(64)  NOT NULL DEFAULT '';
+ALTER TABLE group_rights ADD COLUMN     group_id int(11) NOT NULL DEFAULT 0;
+ALTER TABLE group_rights ADD COLUMN   accessmask varchar(10)  NOT NULL DEFAULT '';
 
 #old mysql.
-ALTER TABLE Group_Rights CHANGE COLUMN AccessMask accessmask varchar(10)  NOT NULL DEFAULT '';
+ALTER TABLE group_rights CHANGE COLUMN AccessMask accessmask varchar(10)  NOT NULL DEFAULT '';
 
 
 
@@ -310,14 +318,16 @@ CREATE TABLE   core_enum (
  
 );
  
-alter table  core_enum ADD COLUMN etype varchar(32)  NOT NULL DEFAULT '';
+alter table  core_enum ADD COLUMN  etype varchar(32)  NOT NULL DEFAULT '';
 alter table  core_enum ADD COLUMN  name varchar(255)  NOT NULL DEFAULT '';
-alter table  core_enum ADD COLUMN   active int(2)  NOT NULL DEFAULT 1;
+alter table  core_enum ADD COLUMN  active int(2)  NOT NULL DEFAULT 1;
 alter table  core_enum ADD COLUMN  seqid int(11)  NOT NULL DEFAULT 0;
 alter table  core_enum ADD COLUMN  seqmax int(11)  NOT NULL DEFAULT 0;
+alter table  core_enum ADD COLUMN  display_name varchar(255)  NOT NULL DEFAULT '';
 
 alter table  core_enum ADD  INDEX lookup(seqid, active, name, etype);
- 
+
+UPDATE core_enum SET display_name = name WHERE display_name = '';
 
 
 
diff --git a/DataObjects/pman.ini b/DataObjects/pman.ini
index 11106ccd..0ac280cf 100644
--- a/DataObjects/pman.ini
+++ b/DataObjects/pman.ini
@@ -44,21 +44,21 @@ remarks = 66
 [Events__keys]
 id = N
 
-[Group_Members]
+[group_members]
 group_id = 1
 id = 129
 user_id = 129
 
-[Group_Members__keys]
+[group_members__keys]
 id = N
 
-[Group_Rights]
+[group_rights]
 rightname = 130
 group_id = 129
 AccessMask = 130
 id = 129
 
-[Group_Rights__keys]
+[group_rights__keys]
 id = N
 
 [Groups]
diff --git a/DataObjects/pman.links.ini b/DataObjects/pman.links.ini
index cd4f6ecc..a3e602c9 100644
--- a/DataObjects/pman.links.ini
+++ b/DataObjects/pman.links.ini
@@ -13,6 +13,7 @@ logo_id = Images:id
 owner_id = Person:id
 main_office_id = Office:id
 
+
 [Office]
 company_id = Companies:id
 
@@ -31,11 +32,11 @@ project_id = Projects:id
 [Groups]
 leader = Person:id
 
-[Group_Members]
+[group_members]
 group_id = Groups:id
 user_id =  Person:id
 
-[Group_Rights]
+[group_rights]
 group_id = Groups:id
 
 [Events]
diff --git a/GroupMembers.php b/GroupMembers.php
index 576961df..c3428a79 100644
--- a/GroupMembers.php
+++ b/GroupMembers.php
@@ -87,7 +87,7 @@ class Pman_Core_GroupMembers extends Pman
         
         
         
-        $p = DB_DataObject::factory('Group_Members');
+        $p = DB_DataObject::factory('group_members');
         $p->group_id = (int)$_GET['group_id'];
         $p->whereAdd('user_id IN ('. implode(',' ,array_keys($ret) ). ')');
         $p->find();
@@ -126,7 +126,7 @@ class Pman_Core_GroupMembers extends Pman
                 $pi = DB_DataObject::factory('Person');
                 $pi->get($uid);
                     
-                $p = DB_DataObject::factory('Group_Members');
+                $p = DB_DataObject::factory('group_members');
                 $p->group_id = (int)$_POST['group_id'];
                 $p->user_id = $uid;
                 //$p->type = (int)$_POST['type'];
@@ -155,7 +155,7 @@ class Pman_Core_GroupMembers extends Pman
            
             
             foreach($_POST['dataDelete'] as $id => $ac) {
-                $m = DB_DataObject::factory('Group_Members');
+                $m = DB_DataObject::factory('group_members');
                 $m->get($id);
                 $m->delete();
             }
@@ -165,7 +165,7 @@ class Pman_Core_GroupMembers extends Pman
         if (!empty($_POST['dataAdd'])) {
              
             foreach($_POST['dataAdd'] as $id => $ac) {
-                $p = DB_DataObject::factory('Group_Members');
+                $p = DB_DataObject::factory('group_members');
                 $p->group_id = (int)$_POST['group_id'];
                 $p->user_id = $id;
                 $p->insert();
diff --git a/Images.php b/Images.php
index fcae94ee..3e2680fa 100644
--- a/Images.php
+++ b/Images.php
@@ -59,6 +59,7 @@ class Pman_Core_Images extends Pman
         
         $bits= explode('/', $s);
         $id = 0;
+        
         // without id as first part...
         if (!empty($bits[0]) && $bits[0] == 'Thumb') {
             $this->thumb = true;
@@ -76,7 +77,24 @@ class Pman_Core_Images extends Pman
             $this->size = empty($bits[2]) ? '0x0' : $bits[2];
             $id = empty($bits[3]) ? 0 :   $bits[3];
             
+        } else if (!empty($bits[0]) && $bits[0] == 'events') {
+            $popts = PEAR::getStaticProperty('Pman','options');
+            
+            header ('Content-Type: image/jpeg');
+            if(!empty($bits[2]) && $bits[2] == 'download'){
+                $file = "{$popts['event_log_dir']}/{$bits[1]}";
+                header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );
+                ob_clean();
+                flush();
+                readfile($file);
+            }else{
+                $file = "{$popts['event_log_dir']}/{$bits[1]}.jpg";
+                $fh = fopen($file,'r');
+                echo fread($fh,filesize($file));
+            }
+            exit;
         } else {
+        
             $id = empty($bits[0]) ? 0 :  $bits[0];
         }
         
@@ -214,11 +232,19 @@ class Pman_Core_Images extends Pman
         //echo "SKALING?  $this->size";
         // acutally if we generated the image, then we do not need to validate the size..
         
+        
+        
         // if the mimetype is not converted..
         // then the filename should be original.{size}.jpeg
         $fn = $img->getStoreName() . '.'. $this->size . '.jpeg'; // thumbs are currenly all jpeg.!???
-      // var_dump($fn);
+        
         if (!file_exists($fn)) {
+            $fn = $img->getStoreName()  . '.'. $this->size . '.'. $img->fileExt();
+            $this->as_mimetype = $img->mimetype;
+        }
+        
+        if (!file_exists($fn)) {            
+            
             $this->validateSize();
         }
         
@@ -340,7 +366,7 @@ class Pman_Core_Images extends Pman
         $attr_url = $attr[$attr_name];
         $umatch  = false;
         if(!preg_match('#/(Images|Images/Thumb/[a-z0-9]+|Images/Download)/([0-9]+)/(.*)$#', $attr_url, $umatch))  {
-            continue;
+            return $html;
         }
         $id = $umatch[2];
         $img = DB_DataObject::factory('Images');
diff --git a/Notify.php b/Notify.php
index bacad593..15bbc7a2 100644
--- a/Notify.php
+++ b/Notify.php
@@ -123,8 +123,11 @@ class Pman_Core_Notify extends Pman
         $w = DB_DataObject::factory($this->table);
         
         if (!$showold) {
-            $w->whereAdd('act_when > sent'); // eg.. sent is not valid..
             
+            // standard
+            
+            $w->whereAdd('act_when > sent'); // eg.. sent is not valid..
+            $w->whereAdd('act_start > NOW() - INTERVAL 14 DAY'); // ignore the ones stuck in the queue
             if (!$this->force) {
                 $w->whereAdd('act_when < NOW()'); // eg.. not if future..
             }
diff --git a/NotifySend.php b/NotifySend.php
index 90000390..b4a8d2a5 100644
--- a/NotifySend.php
+++ b/NotifySend.php
@@ -109,6 +109,23 @@ class Pman_Core_NotifySend extends Pman
         
         
         $o = $w->object();
+        
+        if ($o === false)  {
+            
+            $ev = $this->addEvent('NOTIFY', $w,
+                            "Notification event cleared (underlying object does not exist)" );;
+            $ww = clone($w);
+            $w->sent = date('Y-m-d H:i:s');
+            $w->msgid = '';
+            $w->event_id = $ev->id;
+            $w->update($ww);
+            die(date('Y-m-d h:i:s ') . 
+                     "Notification event cleared (underlying object does not exist)" 
+                    ."\n");
+        }
+     
+        
+        
         $p = $w->person();
         
         if (isset($p->active) && empty($p->active)) {
@@ -209,10 +226,15 @@ class Pman_Core_NotifySend extends Pman
         //print_r($email);exit;
         // should we fetch the watch that caused it.. - which should contain the method to call..
         // --send-to=test@xxx.com
-        if (!empty($opts['send-to'])) {
+       
+        if (!empty($email['send-to'])) {
+            $p->email = $email['send-to'];
+        }
+         if (!empty($opts['send-to'])) {
             $p->email = $opts['send-to'];
         }
         
+        //print_r($p);
         require_once 'Validate.php';
         if (!Validate::email($p->email, true)) {
             $ev = $this->addEvent('NOTIFY', $w, "INVALID ADDRESS: " . $p->email);
@@ -261,6 +283,17 @@ class Pman_Core_NotifySend extends Pman
             // older that 1 day.
             $retry = 120;
         }
+        if (strtotime($w->act_start) <  strtotime('NOW - 14 DAY')) {
+            $ev = $this->addEvent('NOTIFY', $w, "BAD ADDRESS - ". $p->email );
+            $w->sent = date('Y-m-d H:i:s');
+            $w->msgid = '';
+            $w->event_id = $ev->id;
+            $w->update($ww);
+            die(date('Y-m-d h:i:s') . " - FAILED -  GAVE UP TO OLD - {$p->email} \n");
+        }
+        
+        
+        
         $w->to_email = $p->email; 
         //$this->addEvent('NOTIFY', $w, 'GREYLISTED ' . $p->email . ' ' . $res->toString());
         $w->act_when = date('Y-m-d H:i:s', strtotime('NOW + ' . $retry . ' MINUTES'));
@@ -415,13 +448,16 @@ class Pman_Core_NotifySend extends Pman
     function makeEmail($object, $rcpt, $last_sent_date, $notify, $force =false)
     {
         $m = 'notify'. $notify->evtype;
-        var_dump($m);
+        //var_dump($m);
         
         if (!empty($notify->evtype) && method_exists($object,$m)) {
             return $object->$m($rcpt, $last_sent_date, $notify, $force);
         }
                 
-        
+        if (!method_exists($object, 'toEmail')) {
+            //var_Dump($object);
+            //exit;
+        }
         return $object->toEmail($rcpt, $last_sent_date, $notify, $force);
     }
     
diff --git a/Pman.Dialog.Companies.js b/Pman.Dialog.Companies.js
index 7322d000..960e2860 100644
--- a/Pman.Dialog.Companies.js
+++ b/Pman.Dialog.Companies.js
@@ -1,4 +1,18 @@
+
+
+Pman.Dialog.Companies =   new Roo.util.Observable({
+    
+    show : function (data, callback)
+    {
+        Pman.Dialog.CoreCompanies.show({id:data.id});
+    }
+
+});
+
+
+
 //
-          
+        
+        
          
 {else:}                  
-        
+        
                  
 {end:}                  
         
 
 /**