10 public $regMode =
false;
19 public static function model($className = __CLASS__)
29 return Yii::app()->getModule(
'user')->tableProfiles;
43 $model = $this->getFields();
45 foreach ($model as $field) {
46 $field_rule = array();
47 if ($field->required == ProfileField::REQUIRED_YES_NOT_SHOW_REG || $field->required == ProfileField::REQUIRED_YES_SHOW_REG)
48 array_push($required, $field->varname);
49 if ($field->field_type ==
'FLOAT' || $field->field_type ==
'INTEGER')
50 array_push($numerical, $field->varname);
51 if ($field->field_type ==
'VARCHAR' || $field->field_type ==
'TEXT') {
52 array_push($rules, array($field->varname,
'common.components.NotContainsTagsValidator'));
53 $field_rule = array($field->varname,
'length',
'max' => $field->field_size,
'min' => $field->field_size_min);
54 if ($field->error_message) $field_rule[
'message'] =
UserModule::t($field->error_message);
55 array_push($rules, $field_rule);
57 if ($field->other_validator) {
58 if (strpos($field->other_validator,
'{') === 0) {
59 $validator = (array)CJavaScript::jsonDecode($field->other_validator);
60 foreach ($validator as $name => $val) {
61 $field_rule = array($field->varname, $name);
62 $field_rule = array_merge($field_rule, (array)$validator[$name]);
63 if ($field->error_message) $field_rule[
'message'] =
UserModule::t($field->error_message);
64 array_push($rules, $field_rule);
67 $field_rule = array($field->varname, $field->other_validator);
68 if ($field->error_message) $field_rule[
'message'] =
UserModule::t($field->error_message);
69 array_push($rules, $field_rule);
71 } elseif ($field->field_type ==
'DATE') {
72 $field_rule = array($field->varname,
'type',
'type' =>
'date',
'dateFormat' =>
'yyyy-mm-dd',
'allowEmpty' =>
true);
73 if ($field->error_message) $field_rule[
'message'] =
UserModule::t($field->error_message);
74 array_push($rules, $field_rule);
76 $field_rule = array($field->varname,
'castToNull');
77 array_push($rules, $field_rule);
80 $field_rule = array($field->varname,
'match',
'pattern' => $field->match);
81 if ($field->error_message) $field_rule[
'message'] =
UserModule::t($field->error_message);
82 array_push($rules, $field_rule);
87 if ($field->required == ProfileField::REQUIRED_YES_NOT_SHOW_REG || $field->required == ProfileField::REQUIRED_YES_SHOW_REG) {
88 $field_rule = array($field->varname,
'in',
'range' => self::rangeRules($field->range));
90 $field_rule = array($field->varname,
'in',
'range' => self::rangeRules($field->range),
'allowEmpty' =>
true);
92 if ($field->error_message) $field_rule[
'message'] =
UserModule::t($field->error_message);
93 array_push($rules, $field_rule);
97 array_push($rules, array(implode(
',', $required),
'required'));
98 array_push($rules, array(implode(
',', $numerical),
'numerical',
'integerOnly' =>
true));
102 public function castToNull($attribute)
104 if (empty($this->$attribute)) {
105 $this->$attribute = null;
117 'user' => array(self::HAS_ONE,
'User',
'id'),
119 if (isset(Yii::app()->getModule(
'user')->profileRelations)) $relations = array_merge($relations, Yii::app()->getModule(
'user')->profileRelations);
131 $model = $this->getFields();
133 foreach ($model as $field)
134 $labels[$field->varname] = ((Yii::app()->getModule(
'user')->fieldsMessage) ?
UserModule::t($field->title, array(), Yii::app()->getModule(
'user')->fieldsMessage) :
UserModule::t($field->title));
139 private function rangeRules($str)
141 $pos = strpos($str,
'-');
142 if ($pos !==
false) {
143 $str = substr($str, $pos + 1);
146 $rules = explode(
';', $str);
147 for ($i = 0; $i < count($rules); $i++) {
148 $rules[$i] = current(explode(
"==", $rules[$i]));
154 static public function range($str, $fieldValue = NULL)
156 $rules = explode(
';', $str);
158 for ($i = 0; $i < count($rules); $i++) {
159 $item = explode(
"==", $rules[$i]);
163 if (isset($fieldValue))
164 if (isset($array[$fieldValue]))
return $array[$fieldValue];
else return '';
169 public function widgetAttributes()
172 $model = $this->getFields();
174 foreach ($model as $field) {
175 if ($field->widget) $data[$field->varname] = $field->widget;
180 public function widgetParams($fieldName)
183 $model = $this->getFields();
185 foreach ($model as $field) {
186 if ($field->widget) $data[$field->varname] = $field->widgetparams;
188 return $data[$fieldName];
191 public function getFields()
193 if ($this->regMode) {
194 if (!$this->_modelReg)
196 return $this->_modelReg;
200 return $this->_model;
212 foreach ($this->widgetAttributes() as $fieldName => $className) {
213 if (isset($values[$fieldName]) && class_exists($className)) {
214 $class =
new $className;
215 $arr = $this->widgetParams($fieldName);
217 $newParams = $class->params;
218 $arr = (array)CJavaScript::jsonDecode($arr);
219 foreach ($arr as $p => $v) {
220 if (isset($newParams[$p])) $newParams[$p] = $v;
222 $class->params = $newParams;
224 if (method_exists($class,
'setAttributes')) {
225 $values[$fieldName] = $class->setAttributes($values[$fieldName], $this, $fieldName);
232 public function behaviors()
234 return Yii::app()->getModule(
'user')->getBehaviorsFor(get_class($this));