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->whereAddIn('name', $names, 'string');
34             print_r(11);
35         }
36         
37         
38     }
39     
40     function onUpdate($old, $req)
41     {
42         $x = $this->factory($this->tableName());
43         $x->query("SELECT core_enum_seqmax_update('". $this->escape($this->etype) ."')");
44         if ($old->etype != $this->etype) {
45             $x->query("SELECT core_enum_seqmax_update('". $this->escape($old->etype) ."')");
46         }
47         
48     }
49     function beforeUpdate($old, $request,$roo)
50     {
51         $tn = $this->tableName();
52         $x = $this->factory($tn);
53         if(!($old->etype == $request['etype'] && $old->name == $request['name'])){
54             $x->whereAdd("etype = '{$request['etype']}' AND name = '{$request['name']}'");
55             $x->find(true);
56             if($x->count() > 0){
57                 $roo->jerr('is exsiting');
58             }
59         }
60     }
61     function beforeInsert($req, $roo)
62     {
63         $tn = $this->tableName();
64         $x = $this->factory($tn);
65         
66         if(empty($req['etype'])){
67             if($x->get('name', $req['name'])){
68                 $roo->jerr('name is exsiting');
69             }
70         }else{
71             $x->whereAdd("etype = '{$req['etype']}' AND name = '{$req['name']}'");
72             $x->find(true);
73             if($x->count() > 0){
74                 $roo->jerr('is exsiting');
75             }
76         }
77     }
78     function onInsert($req)
79     {
80         $x = $this->factory($this->tableName());
81         $x->query("SELECT core_enum_seqmax_update('". $this->escape($this->etype) ."')");
82          
83     }
84     
85     function lookup($etype,$name) {
86         $ce = DB_DataObject::Factory('core_enum');
87         $ce->etype = $etype;
88         $ce->name = $name;
89         if ($ce->find(true)) {
90             return $ce->id;
91         }
92         return 0;
93         
94     }
95     
96     function lookupObject($etype,$name, $create= false)
97     {
98         
99         static $cache = array();
100         $key = "$etype:$name";
101         if (isset($cache[$key]) ) {
102             return $cache[$key];
103         }
104         $ce = DB_DataObject::Factory('core_enum');
105         $ce->etype = $etype;
106         $ce->name = $name;
107         if ($ce->find(true)) {
108             $cache[$key] = $ce;
109             return $ce;
110         }
111         if ($create) {
112             $ce->active = 1;
113             $ce->insert();
114             $cache[$key] = $ce;
115             return $ce->id;
116             
117         }
118         
119         
120         return false;
121         
122     }
123     /**
124      * The base enums that the system always needs,
125      * If we need to add modular enums, then this can be extended, and the two
126      * base data applied.
127      *
128      * This might be moved to an external file later? - eg json...
129      *
130      */
131     function baseEnums()
132     {
133         //
134         return array(
135             array(
136                 'etype' => '',
137                 'name' => 'COMPTYPE',
138                 'display_name' =>  'Company Types',
139                 'cn' => array(
140                     array(
141                         'name' => 'OWNER',
142                         'display_name' => 'Owner',
143                         'seqid' => 999, // last...
144                     )
145                     
146                 )
147             )
148         );  
149         
150         
151         
152     }
153     
154     function initEnums($data = false, $base = array())
155     {
156         
157         if ($data === false) {
158             $this->initEnums($this->baseEnums());
159             return;
160         }
161         $seq_id = 0;
162         if (!empty($base['etype'])) {
163             $seq_id = 1;
164             $t = DB_DAtaObject::Factory('core_enum');
165             $t->etype = $base['etype'];
166             $t->selectAdD();
167             $t->selectAdD('max(seqid) as seqid');
168             if ($t->find(true)) {
169                 $seq_id = $t->seqid+1;
170             }
171         }
172         foreach($data as $row) {
173             $t = DB_DAtaObject::Factory('core_enum');
174             
175             $t->setFrom($row);
176             $t->setFrom($base);
177             
178             if (!$t->find(true)) {
179                 if (!empty($base['etype']) && empty($row['seqid'])) {
180                     $t->seqid = $seq_id;
181                     $seq_id++;
182                 }
183                 $t->insert();
184             }
185             if (!empty($row['cn'])) {
186                 $this->initEnums($row['cn'], array('etype' => $t->name));
187             }
188         }
189         
190     }
191     
192     
193 }