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     
24     function applyFilters($q, $au)
25     {
26         
27         //DB_DataObject::debugLevel(1);
28         if (!empty($q['query']['empty_etype'])) {
29             $this->whereAdd("etype = ''");
30         }
31         
32         if(!empty($q['!name'])){
33             $names = explode(',', $q['!name']);
34             foreach($names as $name){
35                 $this->whereAdd("
36                     core_enum.name NOT IN ('$name')
37                 ");
38             }
39         }
40     }
41     
42     function postListFilter($data, $authUser, $q) {
43         
44         if(!empty($q['cmsTab'])){
45             $ret = array();
46             foreach($data as $k=>$v){
47                 if($v['name'] != 'element'){
48                     $ary = $v;
49                 }
50                 if($ary['name'] == 'page'){
51                     $ary['display_name'] = $v['display_name'].' / Elements';
52                 }
53                 $ret[] = $ary;
54             }
55         }
56         
57         return $data;
58         
59     }
60     
61     function onUpdate($old, $req)
62     {
63         $x = $this->factory($this->tableName());
64         $x->query("SELECT core_enum_seqmax_update('". $this->escape($this->etype) ."')");
65         if ($old->etype != $this->etype) {
66             $x->query("SELECT core_enum_seqmax_update('". $this->escape($old->etype) ."')");
67         }
68         
69     }
70     function beforeUpdate($old, $request,$roo)
71     {
72         $tn = $this->tableName();
73         $x = $this->factory($tn);
74         if(!($old->etype == $request['etype'] && $old->name == $request['name'])){
75             $x->whereAdd("etype = '{$request['etype']}' AND name = '{$request['name']}'");
76             $x->find(true);
77             if($x->count() > 0){
78                 $roo->jerr('is exsiting');
79             }
80         }
81     }
82     function beforeInsert($req, $roo)
83     {
84         $tn = $this->tableName();
85         $x = $this->factory($tn);
86         
87         if(empty($req['etype'])){
88             if($x->get('name', $req['name'])){
89                 $roo->jerr('name is exsiting');
90             }
91         }else{
92             $x->whereAdd("etype = '{$req['etype']}' AND name = '{$req['name']}'");
93             $x->find(true);
94             if($x->count() > 0){
95                 $roo->jerr('is exsiting');
96             }
97         }
98     }
99     function onInsert($req)
100     {
101         $x = $this->factory($this->tableName());
102         $x->query("SELECT core_enum_seqmax_update('". $this->escape($this->etype) ."')");
103          
104     }
105     
106     function lookup($etype,$name) {
107         $ce = DB_DataObject::Factory('core_enum');
108         $ce->etype = $etype;
109         $ce->name = $name;
110         if ($ce->find(true)) {
111             return $ce->id;
112         }
113         return 0;
114         
115     }
116     
117     function fetchAllByType($etype, $fetchArg1=false, $fetchArg2=false, $fetchArg3=false)
118     {
119         $x = DB_DataObject::factory('core_enum');
120         $x->etype = $etype;
121         $x->active = 1;
122         return $x->fetchAll($fetchArg1, $fetchArg2, $fetchArg3);
123     }
124     
125     function lookupObject($etype,$name, $create= false)
126     {
127         
128         static $cache = array();
129         $key = "$etype:$name";
130         if (isset($cache[$key]) ) {
131             return $cache[$key];
132         }
133         $ce = DB_DataObject::Factory('core_enum');
134         $ce->etype = $etype;
135         $ce->name = $name;
136         if ($ce->find(true)) {
137             $cache[$key] = $ce;
138             return $ce;
139         }
140         if ($create) {
141             $ce->active = 1;
142             $ce->insert();
143             $cache[$key] = $ce;
144             return $ce->id;
145             
146         }
147         
148         
149         return false;
150         
151     }
152     /**
153      * The base enums that the system always needs,
154      * If we need to add modular enums, then this can be extended, and the two
155      * base data applied.
156      *
157      * This might be moved to an external file later? - eg json...
158      *
159      */
160     function baseEnums()
161     {
162         //
163         return array(
164             array(
165                 'etype' => '',
166                 'name' => 'COMPTYPE',
167                 'display_name' =>  'Company Types',
168                 'cn' => array(
169                     array(
170                         'name' => 'OWNER',
171                         'display_name' => 'Owner',
172                         'seqid' => 999, // last...
173                     )
174                     
175                 )
176             )
177         );  
178         
179         
180         
181     }
182     
183     function initEnums($data, $base = array())
184     {
185         
186          
187         $seq_id = 0;
188         if (!empty($base['etype'])) {
189             $seq_id = 1;
190             $t = DB_DAtaObject::Factory('core_enum');
191             $t->etype = $base['etype'];
192             $t->selectAdD();
193             $t->selectAdD('max(seqid) as seqid');
194             if ($t->find(true)) {
195                 $seq_id = $t->seqid+1;
196             }
197         }
198         foreach($data as $row) {
199             $t = DB_DAtaObject::Factory('core_enum');
200             
201             $t->setFrom($row);
202             $t->setFrom($base);
203             unset($t->seqid); // these might have been changed
204             unset($t->display_name); // these might have been changed
205             
206             
207             if (!$t->find(true))
208             {
209                 $t->setFrom($row);
210                 $t->setFrom($base);
211             
212                 if (!empty($base['etype']) && empty($row['seqid'])) {
213                     $t->seqid = $seq_id;
214                     $seq_id++;
215                 }
216                 $t->insert();
217             }
218             if (!empty($row['cn'])) {
219                 $this->initEnums($row['cn'], array('etype' => $t->name));
220             }
221         }
222         
223     }
224     
225     
226 }