MOVED DataObjects/Companies.php to DataObjects/Core_company.php
authorAlan Knowles <alan@roojs.com>
Fri, 7 Oct 2016 05:48:51 +0000 (13:48 +0800)
committerAlan Knowles <alan@roojs.com>
Fri, 7 Oct 2016 05:48:51 +0000 (13:48 +0800)
DataObjects/Core_company.php [new file with mode: 0644]

diff --git a/DataObjects/Core_company.php b/DataObjects/Core_company.php
new file mode 100644 (file)
index 0000000..a7830f6
--- /dev/null
@@ -0,0 +1,424 @@
+<?php
+/**
+ * Table Definition for Companies
+ */
+require_once 'DB/DataObject.php';
+
+class Pman_Core_DataObjects_Companies extends DB_DataObject 
+{
+    ###START_AUTOCODE
+    /* the code below is auto generated do not remove the above tag */
+
+    public $__table = 'Companies';                       // table name
+    public $code;                            // string(32)  not_null
+    public $name;                            // string(128)  
+    public $remarks;                         // blob(65535)  blob
+    public $owner_id;                        // int(11)  not_null
+    public $address;                         // blob(65535)  blob
+    public $tel;                             // string(32)  
+    public $fax;                             // string(32)  
+    public $email;                           // string(128)  
+    public $id;                              // int(11)  not_null primary_key auto_increment
+    public $isOwner;                         // int(11)  
+    public $logo_id;                         // int(11)  not_null
+    public $background_color;                // string(8)  not_null
+    public $comptype;                        // string(8)  not_null
+    public $url;                             // string(254)  not_null
+    public $main_office_id;                  // int(11)  not_null
+    public $created_by;                      // int(11)  not_null
+    public $created_dt;                      // datetime(19)  not_null binary
+    public $updated_by;                      // int(11)  not_null
+    public $updated_dt;                      // datetime(19)  not_null binary
+    public $passwd;                          // string(64)  not_null
+    public $dispatch_port;                   // string(255)  not_null
+    public $province;                        // string(255)  not_null
+    public $country;                         // string(4)  not_null
+    public $is_system;                       // int(2)
+    
+    /* the code above is auto generated do not remove the tag below */
+    ###END_AUTOCODE
+    
+    function applyFilters($q, $au)
+    {
+       $tn = $this->tableName();
+        $this->selectAdd("i18n_translate('c' , {$tn}.country, 'en') as country_display_name ");
+      
+        $tn = $this->tableName();
+        //DB_DataObject::debugLevel(1);
+        $x = DB_DataObject::factory('Companies');
+        $x->comptype= 'OWNER';
+        $x->find(true);
+        
+        if (!empty($q['query']['company_project_id'])) {
+            $add = '';
+            if (!empty($q['query']['company_include_self'])) {
+                $add = " OR {$tn}.id = {$x->id}";
+            }
+            if (!empty($q['query']['company_not_self'])) {
+                $add = " AND {$tn}.id != {$x->id}";
+            }
+            $pids = array();
+            $pid = $q['query']['company_project_id'];
+            if (strpos($pid, ',')) {
+                $bits = explode(',', $pid);
+                foreach($bits as $b) {
+                    $pids[] = (int)$b;
+                }
+            } else {
+                $pids = array($pid);
+            }
+            
+            
+            $pids = implode(',', $pids);
+            $this->whereAdd("{$tn}.id IN (
+                SELECT distinct(company_id) FROM ProjectDirectory where project_id IN ($pids)
+            ) $add" );
+             
+        }
+        if (!empty($q['query']['comptype'])) {
+           
+            $this->whereAddIn('comptype', explode(',', $q['query']['comptype']), 'string');
+            
+        }
+        
+        // depricated - should be moved to module specific (texon afair)
+        
+         if (!empty($q['query']['province'])) {
+             $prov = $this->escape($q['query']['province']);
+            $this->whereAdd("province LIKE '$prov%'");
+            
+            
+        }
+        // ADD comptype_display name.. = for combos..
+        $this->selectAdd("
+            (SELECT display_name
+                FROM
+                    core_enum
+                WHERE
+                    etype='comptype'
+                    AND
+                    name={$tn}.comptype
+                LIMIT 1
+                ) as comptype_display_name
+        ");
+        
+        if(!empty($q['search']['name'])){
+            $s = $this->escape($q['search']['name']);
+            $this->whereAdd("
+                {$tn}.name LIKE '%$s%'
+            ");
+        }
+        if(!empty($q['search']['name_starts'])){
+            $s = $this->escape($q['search']['name_starts']);
+            $this->whereAdd("
+                {$tn}.name LIKE '$s%'
+            ");
+        }
+    }
+    
+    function toEventString() {
+        return $this->name;
+    }
+    
+    // ---------- AUTHENTICATION
+     function isAuth()
+    {
+        $db = $this->getDatabaseConnection();
+        $sesPrefix = $db->dsn['database'];
+        @session_start();
+        if (!empty($_SESSION[__CLASS__][$sesPrefix .'-auth'])) {
+            // in session...
+            $a = unserialize($_SESSION[__CLASS__][$sesPrefix .'-auth']);
+            $u = DB_DataObject::factory('Companies');
+            if ($u->get($a->id)) { //&& strlen($u->passwd)) {
+                return true;
+            }
+            $_SESSION[__CLASS__][$sesPrefix .'-auth'] = '';
+            
+        }
+        // not in session or not matched...
+        
+        
+        return false;
+        
+    }
+    function getAuthUser()
+    {
+        if (!$this->isAuth()) {
+            return false;
+        }
+        $db = $this->getDatabaseConnection();
+        $sesPrefix = $db->dsn['database'];
+        if (!empty($_SESSION[__CLASS__][$sesPrefix .'-auth'])) {
+            $a = unserialize($_SESSION[__CLASS__][$sesPrefix .'-auth']);
+            
+            $u = DB_DataObject::factory('Companies');
+            if ($u->get($a->id)) { /// && strlen($u->passwd)) {
+                return clone($u);
+            }
+             
+        }
+        
+        
+        return false;
+    }     
+    function login()
+    {
+        $this->isAuth(); // force session start..
+         $db = $this->getDatabaseConnection();
+        $sesPrefix = $db->dsn['database'];
+        $_SESSION[__CLASS__][$sesPrefix .'-auth'] = serialize($this);
+        
+    }
+    function logout()
+    {
+        $this->isAuth(); // force session start..
+        $db = $this->getDatabaseConnection();
+        $sesPrefix = $db->dsn['database'];
+        $_SESSION[__CLASS__][$sesPrefix .'-auth'] = "";
+        
+    }    
+    // ---------- AUTHENTICATION
+    function checkPassword($val)
+    {
+        //echo '<pre>'.$val .  print_R($this,true);
+        if (substr($this->passwd,0,1) == '$') {
+            return crypt($val,$this->passwd) == $this->passwd ;
+        }
+        // old style md5 passwords...- cant be used with courier....
+        return md5($val) == $this->passwd;
+    }
+    function setPassword($value) 
+    {
+        $salt='';
+        while(strlen($salt)<9) {
+            $salt.=chr(rand(64,126));
+            //php -r var_dump(crypt('testpassword', '$1$'. (rand(64,126)). '$'));
+        }
+        $this->passwd = crypt($value, '$1$'. $salt. '$');
+       
+    }      
+    function onUpload($controller)
+    {
+        $image = DB_DataObject::factory('Images');
+        return $image->onUploadWithTbl($this, 'logo_id');
+         
+    }
+    function  onUpdate($old, $req,$roo) 
+    {
+        if (!empty($req['password1'])) {
+            $this->setPassword($req['password1']);
+            $this->update();
+        }
+    }
+    function onInsert($req, $roo)
+    {
+        if (!empty($this->logo_id)) { // update images table to sycn with this..
+            $img = DB_DataObject::factory('Images');
+            if ($img->get($this->logo_id) && ($img->onid != $this->id)) {
+                $img->onid = $this->id;
+                $img->update();
+            }
+        }
+        if (!empty($req['password1'])) {
+            $this->setPassword($req['password1']);
+            $this->update();
+        }
+        $img = DB_DataObject::factory('Images');
+        $img->onid= 0;
+        
+        $img->ontable = 'Companies';
+        $img->imgtype = 'LOGO';
+        // should check uploader!!!
+        if ($img->find()) {
+            while($img->fetch()) {
+                $ii = clone($img);
+                $ii->onid = $this->id;
+                $ii->update();
+                $this->logo_id = $ii->id;
+            }
+            $this->update();
+        }
+        
+        
+        
+        
+    }
+    
+    function beforeUpdate($old, $q,$roo)
+    {
+        if(!empty($this->is_system) && 
+            ($old->code != $this->code  ) // used to be not allowed to change name..
+        ){
+            $roo->jerr('This company is not allow to editing Ref. or Company Name...');
+        }
+    }
+    
+    function beforeDelete($req, $roo)
+    {
+        // should check for members....
+        if(!empty($this->is_system) && 
+            ($old->code != $this->code || $old->name != $this->name)
+        ){
+            $roo->jerr('This company is not allow to delete');
+        }
+        $img = DB_DataObject::factory('Images');
+        $img->ontable = 'Companies';
+        $img->onid = $this->id;
+        $img->find();
+        while ($img->fetch()) {
+            $img->beforeDelete();
+            $img->delete();
+        }
+        return true;
+        
+         
+    }
+    /**
+     * check who is trying to access this. false == access denied..
+     */
+    function checkPerm($lvl, $au, $changes = false) 
+    {
+        
+        // do we have an empty system..
+        if ($au && $au->id == -1) {
+            return true;
+        }
+        
+        
+        
+        if ($au->company()->comptype != 'OWNER') {
+            
+            // hacking!
+            if ($changes && isset($changes['comptype']) && $changes['comptype'] != $this->comptype) {
+                return false;
+            }
+            
+            return $this->id == $au->company_id;
+        }
+        
+        return $au->hasPerm("Core.Companies", $lvl);    
+    }
+    
+    function logoImageToHTML($size)
+    {
+        $i = DB_DataObject::factory('Images');
+        if (!$this->logo_id || !$i->get($this->logo_id)) {
+            return '';
+        }
+        return $i->toHTML($size);
+        
+    }
+     function firstImage($filter='image/%')
+    {
+        $i = DB_DataObject::factory('Images');
+        //DB_DataObject::debugLevel(1);
+        $im = $i->gather($this, $filter);
+        if (empty($im)) {
+            return false;
+        }
+        return $im[0];
+    }
+    
+    function firstImageTag($size =-1, $base="/Images/Thumb", $filter='image/%')
+    {
+        $fm = $this->firstImage($filter);
+         if (empty($fm)) {
+            return '';
+        }
+        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')->lookupObject('COMPTYPE', $this->comptype);
+        
+        $ret['comptype_display'] = $ret['comptype'];
+        if ($e   && !empty($e->name_display)) {
+            $ret['comptype_display'] = $e->name_display;
+        }
+        
+        
+        return $ret;
+    }
+    
+    /**
+     * # 2028 
+     * create the suppliers...
+     * 
+     * @param object $roo
+     * @param array $data
+     * 
+     */
+    function initCompaniesArray($roo, $data)
+    {
+        $tn = $this->tableName();
+        
+        foreach($data as $d){
+            $com = DB_DataObject::factory($tn);
+            $com->setFrom($d);
+            if(!$com->find(true)){
+                $com->created_dt = Date('Y-m-d H:i:s');
+                $com->updated_dt = Date('Y-m-d H:i:s');
+                $com->is_system = 1;// new column.. block the user changing the code and name..
+                $com->insert();
+            }
+        }
+        
+        
+    }
+    
+    
+    function initCompanies($roo, $opts)
+    {
+        $companies = DB_DataObject::factory('companies');
+        
+        $ctype = empty($opts['add-company-with-type']) ? 'OWNER' : $opts['add-company-with-type'];
+        
+        $enum = DB_DataObject::Factory('core_enum')->lookup('COMPTYPE', $ctype  );
+        
+        if (empty($enum)) {
+            $roo->jerr("invalid company type '$ctype'");
+        }
+        if ($ctype =='OWNER') {
+            $companies = DB_DataObject::factory('companies');
+            $companies->comptype_id = $enum;
+            if ($companies->count()) {
+                $roo->jerr("Owner  company already exists");
+            }
+        }
+        $companies = DB_DataObject::factory('companies');
+        
+        // check that 
+        $companies->setFrom(array(
+            'name' => $opts['add-company'],
+            'comptype' => $ctype,
+            'comptype_id' => $enum,
+        ));
+        if ($companies->find(true)) {
+            $roo->jerr("company already exists");
+        }
+        $companies->setFrom(array(
+            'background_color' => '',
+            'created_dt' => $this->sqlValue('NOW()'),
+            'updated_dt' => $this->sqlValue('NOW()')
+        ));
+        
+        
+        $companies->insert();
+        $companies->onInsert(array(), $roo);
+    }
+    function lookupOwner()
+    {
+        $enum = DB_DataObject::Factory('core_enum')->lookup('COMPTYPE', 'OWNER'  );
+        $companies = DB_DataObject::factory('companies');
+        $companies->comptype_id = $enum;
+        if ($companies->find(true)) {
+            return $companies;
+        }
+        return false;
+    }
+}