1 <?php
2
3 class Profile extends UActiveRecord
4 {
5 6 7 8 9
10 public static $regMode = false;
11
12 private static $_model;
13 private static $_modelReg;
14 private static $_rules = array();
15
16 17 18 19
20 public static function model($className=__CLASS__)
21 {
22 return parent::model($className);
23 }
24
25 26 27
28 public function tableName()
29 {
30 return Yii::app()->getModule('user')->tableProfiles;
31 }
32
33 34 35
36 public function rules()
37 {
38 if (!self::$_rules) {
39 $required = array();
40 $numerical = array();
41 $float = array();
42 $decimal = array();
43 $rules = array();
44
45 $model=self::getFields();
46
47 foreach ($model as $field) {
48 $field_rule = array();
49 if ($field->required==ProfileField::REQUIRED_YES_NOT_SHOW_REG||$field->required==ProfileField::REQUIRED_YES_SHOW_REG)
50 array_push($required,$field->varname);
51 if ($field->field_type=='FLOAT')
52 array_push($float,$field->varname);
53 if ($field->field_type=='DECIMAL')
54 array_push($decimal,$field->varname);
55 if ($field->field_type=='INTEGER')
56 array_push($numerical,$field->varname);
57 if ($field->field_type=='VARCHAR'||$field->field_type=='TEXT') {
58 $field_rule = array($field->varname, 'length', 'max'=>$field->field_size, 'min' => $field->field_size_min);
59 if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message);
60 array_push($rules,$field_rule);
61 }
62 if ($field->other_validator) {
63 if (strpos($field->other_validator,'{')===0) {
64 $validator = (array)CJavaScript::jsonDecode($field->other_validator);
65 foreach ($validator as $name=>$val) {
66 $field_rule = array($field->varname, $name);
67 $field_rule = array_merge($field_rule,(array)$validator[$name]);
68 if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message);
69 array_push($rules,$field_rule);
70 }
71 } else {
72 $field_rule = array($field->varname, $field->other_validator);
73 if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message);
74 array_push($rules,$field_rule);
75 }
76 } elseif ($field->field_type=='DATE') {
77 if ($field->required)
78 $field_rule = array($field->varname, 'date', 'format' => array('yyyy-mm-dd'));
79 else
80 $field_rule = array($field->varname, 'date', 'format' => array('yyyy-mm-dd','0000-00-00'), 'allowEmpty'=>true);
81
82 if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message);
83 array_push($rules,$field_rule);
84 }
85 if ($field->match) {
86 $field_rule = array($field->varname, 'match', 'pattern' => $field->match);
87 if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message);
88 array_push($rules,$field_rule);
89 }
90 if ($field->range) {
91 $field_rule = array($field->varname, 'in', 'range' => self::rangeRules($field->range));
92 if ($field->error_message) $field_rule['message'] = UserModule::t($field->error_message);
93 array_push($rules,$field_rule);
94 }
95 }
96
97 array_push($rules,array(implode(',',$required), 'required'));
98 array_push($rules,array(implode(',',$numerical), 'numerical', 'integerOnly'=>true));
99 array_push($rules,array(implode(',',$float), 'type', 'type'=>'float'));
100 array_push($rules,array(implode(',',$decimal), 'match', 'pattern' => '/^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/'));
101 self::$_rules = $rules;
102 }
103 return self::$_rules;
104 }
105
106 107 108
109 public function relations()
110 {
111
112
113 $relations = array(
114 'user'=>array(self::HAS_ONE, 'User', 'id'),
115 );
116 if (isset(Yii::app()->getModule('user')->profileRelations)) $relations = array_merge($relations,Yii::app()->getModule('user')->profileRelations);
117 return $relations;
118 }
119
120 121 122
123 public function attributeLabels()
124 {
125 $labels = array(
126 'user_id' => UserModule::t('User ID'),
127 );
128 $model=self::getFields();
129
130 foreach ($model as $field)
131 $labels[$field->varname] = ((Yii::app()->getModule('user')->fieldsMessage)?UserModule::t($field->title,array(),Yii::app()->getModule('user')->fieldsMessage):UserModule::t($field->title));
132
133 return $labels;
134 }
135
136 private function rangeRules($str) {
137 $rules = explode(';',$str);
138 for ($i=0;$i<count($rules);$i++)
139 $rules[$i] = current(explode("==",$rules[$i]));
140 return $rules;
141 }
142
143 static public function range($str,$fieldValue=NULL) {
144 $rules = explode(';',$str);
145 $array = array();
146 for ($i=0;$i<count($rules);$i++) {
147 $item = explode("==",$rules[$i]);
148 if (isset($item[0])) $array[$item[0]] = ((isset($item[1]))?$item[1]:$item[0]);
149 }
150 if (isset($fieldValue))
151 if (isset($array[$fieldValue])) return $array[$fieldValue]; else return '';
152 else
153 return $array;
154 }
155
156 public function widgetAttributes() {
157 $data = array();
158 $model=self::getFields();
159
160 foreach ($model as $field) {
161 if ($field->widget) $data[$field->varname]=$field->widget;
162 }
163 return $data;
164 }
165
166 public function widgetParams($fieldName) {
167 $data = array();
168 $model=self::getFields();
169
170 foreach ($model as $field) {
171 if ($field->widget) $data[$field->varname]=$field->widgetparams;
172 }
173 return $data[$fieldName];
174 }
175
176 public static function getFields() {
177 if (self::$regMode) {
178 if (!self::$_modelReg)
179 self::$_modelReg=ProfileField::model()->forRegistration()->findAll();
180 return self::$_modelReg;
181 } else {
182 if (!self::$_model)
183 self::$_model=ProfileField::model()->forOwner()->findAll();
184 return self::$_model;
185 }
186 }
187
188 public function afterSave() {
189 if (get_class(Yii::app())=='CWebApplication'&&Profile::$regMode==false) {
190 Yii::app()->user->updateSession();
191 }
192 return parent::afterSave();
193 }
194 }