DataObjects/Core_enum.php
[Pman.Core] / DataObjects / Core_enum.php
1 <?php
2 /**
3  * Table Definition for core company
4  */
5 require_once 'DB/DataObject.php';
6
7 class Pman_Core_DataObjects_Core_enum extends DB_DataObject 
8 {
9     ###START_AUTOCODE
10     /* the code below is auto generated do not remove the above tag */
11
12     public $__table = 'core_enum';                       // table name
13     public $id;                              // int(11)  not_null primary_key auto_increment
14     public $etype;                           // string(32)  not_null
15     public $name;                            // string(255)  not_null
16     public $active;                          // int(2)  not_null
17     public $seqid;                           // int(11)  not_null multiple_key
18     public $seqmax;                           // int(11)  not_null multiple_key
19     public $display_name;
20     
21     /* the code above is auto generated do not remove the tag below */
22     ###END_AUTOCODE
23     function applyFilters($q, $au)
24     {
25         
26         //DB_DataObject::debugLevel(1);
27         if (!empty($q['query']['empty_etype'])) {
28             $this->whereAdd("etype = ''");
29         }
30         
31         if(!empty($q['!name'])){
32             $names = explode(',', $q['!name']);
33             $this->whereAdd("
34                     core_enum.name NOT IN ({$q['!name']})
35                 ");
36             //$this->whereAddIn('name', $names, 'string', 'NOT');
37             
38             //print_r(11);
39         }
40         
41         
42     }
43     
44     function onUpdate($old, $req)
45     {
46         $x = $this->factory($this->tableName());
47         $x->query("SELECT core_enum_seqmax_update('". $this->escape($this->etype) ."')");
48         if ($old->etype != $this->etype) {
49             $x->query("SELECT core_enum_seqmax_update('". $this->escape($old->etype) ."')");
50         }
51         
52     }
53     function beforeUpdate($old, $request,$roo)
54     {
55         $tn = $this->tableName();
56         $x = $this->factory($tn);
57         if(!($old->etype == $request['etype'] && $old->name == $request['name'])){
58             $x->whereAdd("etype = '{$request['etype']}' AND name = '{$request['name']}'");
59             $x->find(true);
60             if($x->count() > 0){
61                 $roo->jerr('is exsiting');
62             }
63         }
64     }
65     function beforeInsert($req, $roo)
66     {
67         $tn = $this->tableName();
68         $x = $this->factory($tn);
69         
70         if(empty($req['etype'])){
71             if($x->get('name', $req['name'])){
72                 $roo->jerr('name is exsiting');
73             }
74         }else{
75             $x->whereAdd("etype = '{$req['etype']}' AND name = '{$req['name']}'");
76             $x->find(true);
77             if($x->count() > 0){
78                 $roo->jerr('is exsiting');
79             }
80         }
81     }
82     function onInsert($req)
83     {
84         $x = $this->factory($this->tableName());
85         $x->query("SELECT core_enum_seqmax_update('". $this->escape($this->etype) ."')");
86          
87     }
88     
89     function lookup($etype,$name) {
90         $ce = DB_DataObject::Factory('core_enum');
91         $ce->etype = $etype;
92         $ce->name = $name;
93         if ($ce->find(true)) {
94             return $ce->id;
95         }
96         return 0;
97         
98     }
99     
100     function lookupObject($etype,$name, $create= false)
101     {
102         
103         static $cache = array();
104         $key = "$etype:$name";
105         if (isset($cache[$key]) ) {
106             return $cache[$key];
107         }
108         $ce = DB_DataObject::Factory('core_enum');
109         $ce->etype = $etype;
110         $ce->name = $name;
111         if ($ce->find(true)) {
112             $cache[$key] = $ce;
113             return $ce;
114         }
115         if ($create) {
116             $ce->active = 1;
117             $ce->insert();
118             $cache[$key] = $ce;
119             return $ce->id;
120             
121         }
122         
123         
124         return false;
125         
126     }
127     /**
128      * The base enums that the system always needs,
129      * If we need to add modular enums, then this can be extended, and the two
130      * base data applied.
131      *
132      * This might be moved to an external file later? - eg json...
133      *
134      */
135     function baseEnums()
136     {
137         //
138         return array(
139             array(
140                 'etype' => '',
141                 'name' => 'COMPTYPE',
142                 'display_name' =>  'Company Types',
143                 'cn' => array(
144                     array(
145                         'name' => 'OWNER',
146                         'display_name' => 'Owner',
147                         'seqid' => 999, // last...
148                     )
149                     
150                 )
151             )
152         );  
153         
154         
155         
156     }
157     
158     function initEnums($data = false, $base = array())
159     {
160         
161         if ($data === false) {
162             $this->initEnums($this->baseEnums());
163             return;
164         }
165         $seq_id = 0;
166         if (!empty($base['etype'])) {
167             $seq_id = 1;
168             $t = DB_DAtaObject::Factory('core_enum');
169             $t->etype = $base['etype'];
170             $t->selectAdD();
171             $t->selectAdD('max(seqid) as seqid');
172             if ($t->find(true)) {
173                 $seq_id = $t->seqid+1;
174             }
175         }
176         foreach($data as $row) {
177             $t = DB_DAtaObject::Factory('core_enum');
178             
179             $t->setFrom($row);
180             $t->setFrom($base);
181             
182             if (!$t->find(true)) {
183                 if (!empty($base['etype']) && empty($row['seqid'])) {
184                     $t->seqid = $seq_id;
185                     $seq_id++;
186                 }
187                 $t->insert();
188             }
189             if (!empty($row['cn'])) {
190                 $this->initEnums($row['cn'], array('etype' => $t->name));
191             }
192         }
193         
194     }
195     
196     
197 }