1: <?php
2: 3: 4: 5: 6:
7:
8: if (!defined('XOOPS_ROOT_PATH')) exit();
9:
10: class Profile_DefinitionsObject extends XoopsSimpleObject
11: {
12: public $mFieldType = null;
13:
14: 15: 16:
17: public function Profile_DefinitionsObject()
18: {
19: $this->initVar('field_id', XOBJ_DTYPE_INT, '', false);
20: $this->initVar('field_name', XOBJ_DTYPE_STRING, '', false, 32);
21: $this->initVar('label', XOBJ_DTYPE_STRING, '', false, 255);
22: $this->initVar('type', XOBJ_DTYPE_STRING, '', false, 32);
23: $this->initVar('validation', XOBJ_DTYPE_STRING, '', false, 255);
24: $this->initVar('required', XOBJ_DTYPE_BOOL, 0, false);
25: $this->initVar('show_form', XOBJ_DTYPE_BOOL, 1, false);
26: $this->initVar('weight', XOBJ_DTYPE_INT, 10, false);
27: $this->initVar('description', XOBJ_DTYPE_TEXT, '', false);
28: $this->initVar('access', XOBJ_DTYPE_TEXT, '', false);
29: $this->initVar('options', XOBJ_DTYPE_TEXT, '', false);
30: }
31:
32: 33: 34:
35: public function getFields()
36: {
37: $cri = new Criteria('1', '1');
38: $cri->setSort('weight');
39:
40: return $this->getObjects($cri);
41: }
42:
43: public function setFieldTypeObject()
44: {
45: if(! $this->mFieldType){
46: $className = 'Profile_FieldType'.ucfirst($this->get('type'));
47: $this->mFieldType = new $className();
48: }
49: }
50:
51: public function getDefault()
52: {
53: return $this->mFieldType->getDefault($this->get('options'));
54: }
55: }
56:
57: class Profile_DefinitionsHandler extends XoopsObjectGenericHandler
58: {
59: var $mTable = 'profile_definitions';
60: var $mPrimary = 'field_id';
61: var $mClass = 'Profile_DefinitionsObject';
62:
63: 64: 65:
66: public function getFields4DataEdit()
67: {
68: $criteria = new CriteriaCompo();
69: $criteria->add(new Criteria('show_form', '1'));
70: $criteria->setSort('weight');
71:
72: return $this->getObjects($criteria);
73: }
74:
75: 76: 77:
78: public function getFields4DataShow($uid=0)
79: {
80: $uid = ($uid>0) ? $uid : Legacy_Utils::getUid();
81: $lHandler =& xoops_getmodulehandler('groups_users_link', 'user');
82:
83: $criteria = new CriteriaCompo();
84: $criteria->setSort('weight');
85: $fieldArr = $this->getObjects($criteria);
86: foreach(array_keys($fieldArr) as $keyF){
87: $flag = false;
88: $accessArr = explode(',', $fieldArr[$keyF]->get('access'));
89: if($uid===0){
90: if(in_array(XOOPS_GROUP_ANONYMOUS, $accessArr)){
91: $flag = true;
92: }
93: }
94: else{
95: foreach(array_keys($accessArr) as $keyA){
96: if($lHandler->isUserOfGroup($uid, $accessArr[$keyA])){
97: $flag = true;
98: }
99: }
100: }
101: if(! $flag){
102: unset($fieldArr[$keyF]);
103: }
104: }
105:
106: return $fieldArr;
107: }
108:
109: 110: 111:
112: public function insert(&$obj, $force = false)
113: {
114: global $xoopsDB;
115: $obj->setFieldTypeObject();
116: if ($obj->isNew()) {
117: $sql = 'ALTER TABLE '. $xoopsDB->prefix('profile_data') .' ADD `'. $obj->get('field_name') .'` '. $obj->mFieldType->getTableQuery();
118: $xoopsDB->query($sql);
119: }
120: else {
121: $oldObj = $this->get($obj->get('field_id'));
122: if($oldObj->get('field_name')!=$obj->get('field_name')){
123: $sql = 'ALTER TABLE '. $xoopsDB->prefix('profile_data') .' CHANGE `'. $oldObj->get('field_name') .'` `'. $obj->get('field_name') .'` '. $oldObj->mFieldType->getTableQuery();
124: $xoopsDB->query($sql);
125: }
126: }
127:
128: return parent::insert($obj, $force);
129: }
130:
131: 132: 133:
134: public function delete(&$obj, $force = false)
135: {
136: global $xoopsDB;
137: $sql = 'ALTER TABLE '. $xoopsDB->prefix('profile_data') .' DROP `'. $obj->get('field_name') .'`';
138: $xoopsDB->query($sql);
139:
140: return parent::delete($obj, $force);
141: }
142:
143: public function getDefinitions($show_form=true)
144: {
145: $criteria = new CriteriaCompo();
146: $criteria->setSort('weight', 'ASC');
147: if($show_form==true){
148: $criteria->add(new Criteria('show_form', 1));
149: }
150: $definitions = $this->getObjects($criteria);
151: $defArr = array();
152: foreach($definitions as $def){
153: $defArr[$def->get('field_name')] = $def;
154: }
155: return $defArr;
156: }
157:
158: 159: 160:
161: public function getTypeList()
162: {
163: return array(
164: Profile_FormType::STRING,
165: Profile_FormType::TEXT,
166: Profile_FormType::INT,
167: Profile_FormType::FLOAT,
168: Profile_FormType::DATE,
169: Profile_FormType::CHECKBOX,
170: Profile_FormType::SELECTBOX,
171: Profile_FormType::URI
172: );
173: }
174:
175: public static function getReservedNameList()
176: {
177: return array('uid','name','uname','email','url','user_avatar','user_regdate','user_icq','user_from','user_sig','user_viewemail','actkey','user_aim','user_yim','user_msnm','pass','posts','attachsig','rank','level','theme','timezone_offset','last_login','umode','uorder','notify_method','notify_mode','user_occ','bio','user_intrest','user_mailok', 'user_name');
178: }
179:
180: 181: 182:
183: public function getValidationList()
184: {
185: return array("email");
186: }
187:
188: public function &getObjects($criteria = null, $limit = null, $start = null, $id_as_key = false)
189: {
190: $objs = parent::getObjects($criteria, $limit, $start, $id_as_key);
191:
192: foreach(array_keys($objs) as $key){
193: $objs[$key]->setFieldTypeObject();
194: }
195: return $objs;
196: }
197: }
198: ?>
199: