1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10:
11:
12: 13: 14: 15: 16: 17:
18:
19: class ProfileFieldForm extends Xoops\Form\ThemeForm
20: {
21: 22: 23:
24: public function __construct(ProfileField $obj)
25: {
26: $xoops = Xoops::getInstance();
27:
28: $title = $obj->isNew() ? sprintf(_PROFILE_AM_ADD, _PROFILE_AM_FIELD)
29: : sprintf(_PROFILE_AM_EDIT, _PROFILE_AM_FIELD);
30:
31: parent::__construct($title, 'form', '', 'post', true);
32:
33: $this->addElement(new Xoops\Form\Text(_PROFILE_AM_TITLE, 'field_title', 5, 255, $obj->getVar('field_title', 'e')), true);
34: $this->addElement(new Xoops\Form\TextArea(_PROFILE_AM_DESCRIPTION, 'field_description', $obj->getVar('field_description', 'e'), 5, 5));
35:
36: if (!$obj->isNew()) {
37: $fieldcat_id = $obj->getVar('cat_id');
38: } else {
39: $fieldcat_id = 0;
40: }
41: $category_handler = \Xoops::getModuleHelper('profile')->getHandler('category');
42: $cat_select = new Xoops\Form\Select(_PROFILE_AM_CATEGORY, 'field_category', $fieldcat_id);
43: $cat_select->addOption(0, _PROFILE_AM_DEFAULT);
44: $cat_select->addOptionArray($category_handler->getList());
45: $this->addElement($cat_select);
46: $weight = new Xoops\Form\Text(_PROFILE_AM_WEIGHT, 'field_weight', 1, 10, $obj->getVar('field_weight', 'e'), '');
47: $weight->setPattern('^\d+$', _PROFILE_AM_ERROR_WEIGHT);
48: $this->addElement($weight, true);
49: if ($obj->getVar('field_config') || $obj->isNew()) {
50: if (!$obj->isNew()) {
51: $this->addElement(new Xoops\Form\Label(_PROFILE_AM_NAME, $obj->getVar('field_name')));
52: $this->addElement(new Xoops\Form\Hidden('id', $obj->getVar('field_id')));
53: } else {
54: $this->addElement(new Xoops\Form\Text(_PROFILE_AM_NAME, 'field_name', 5, 255, $obj->getVar('field_name', 'e')), true);
55: }
56:
57:
58: $fieldtypes = array(
59: 'checkbox' => _PROFILE_AM_CHECKBOX, 'date' => _PROFILE_AM_DATE, 'datetime' => _PROFILE_AM_DATETIME,
60: 'longdate' => _PROFILE_AM_LONGDATE, 'group' => _PROFILE_AM_GROUP,
61: 'group_multi' => _PROFILE_AM_GROUPMULTI, 'language' => _PROFILE_AM_LANGUAGE,
62: 'radio' => _PROFILE_AM_RADIO, 'select' => _PROFILE_AM_SELECT, 'select_multi' => _PROFILE_AM_SELECTMULTI,
63: 'textarea' => _PROFILE_AM_TEXTAREA, 'dhtml' => _PROFILE_AM_DHTMLTEXTAREA,
64: 'textbox' => _PROFILE_AM_TEXTBOX, 'timezone' => _PROFILE_AM_TIMEZONE, 'yesno' => _PROFILE_AM_YESNO
65: );
66:
67: $element_select = new Xoops\Form\Select(_PROFILE_AM_TYPE, 'field_type', $obj->getVar('field_type', 'e'));
68: $element_select->addOptionArray($fieldtypes);
69:
70: $this->addElement($element_select);
71:
72: switch ($obj->getVar('field_type')) {
73: case "textbox":
74: $valuetypes = array(
75: XOBJ_DTYPE_ARRAY => _PROFILE_AM_ARRAY, XOBJ_DTYPE_EMAIL => _PROFILE_AM_EMAIL,
76: XOBJ_DTYPE_INT => _PROFILE_AM_INT, XOBJ_DTYPE_FLOAT => _PROFILE_AM_FLOAT,
77: XOBJ_DTYPE_DECIMAL => _PROFILE_AM_DECIMAL, XOBJ_DTYPE_TXTAREA => _PROFILE_AM_TXTAREA,
78: XOBJ_DTYPE_TXTBOX => _PROFILE_AM_TXTBOX, XOBJ_DTYPE_URL => _PROFILE_AM_URL,
79: XOBJ_DTYPE_OTHER => _PROFILE_AM_OTHER
80: );
81:
82: $type_select = new Xoops\Form\Select(_PROFILE_AM_VALUETYPE, 'field_valuetype', $obj->getVar('field_valuetype', 'e'), 5, 5);
83: $type_select->addOptionArray($valuetypes);
84: $this->addElement($type_select);
85: break;
86:
87: case "select":
88: case "radio":
89: $valuetypes = array(
90: XOBJ_DTYPE_ARRAY => _PROFILE_AM_ARRAY, XOBJ_DTYPE_EMAIL => _PROFILE_AM_EMAIL,
91: XOBJ_DTYPE_INT => _PROFILE_AM_INT, XOBJ_DTYPE_FLOAT => _PROFILE_AM_FLOAT,
92: XOBJ_DTYPE_DECIMAL => _PROFILE_AM_DECIMAL, XOBJ_DTYPE_TXTAREA => _PROFILE_AM_TXTAREA,
93: XOBJ_DTYPE_TXTBOX => _PROFILE_AM_TXTBOX, XOBJ_DTYPE_URL => _PROFILE_AM_URL,
94: XOBJ_DTYPE_OTHER => _PROFILE_AM_OTHER
95: );
96:
97: $type_select = new Xoops\Form\Select(_PROFILE_AM_VALUETYPE, 'field_valuetype', $obj->getVar('field_valuetype', 'e'));
98: $type_select->addOptionArray($valuetypes);
99: $this->addElement($type_select);
100: break;
101: }
102:
103:
104:
105: if ($obj->getVar('field_type') === "select" || $obj->getVar('field_type') === "select_multi" || $obj->getVar('field_type') === "radio" || $obj->getVar('field_type') === "checkbox") {
106: $options = $obj->getVar('field_options');
107: if (count($options) > 0) {
108: $remove_options = new Xoops\Form\Checkbox(_PROFILE_AM_REMOVEOPTIONS, 'removeOptions');
109:
110: asort($options);
111: foreach (array_keys($options) as $key) {
112: $options[$key] .= "[{$key}]";
113: }
114: $remove_options->addOptionArray($options);
115: $this->addElement($remove_options);
116: }
117:
118: $option_text = "<table cellspacing='1'><tr><td class='width20'>" . _PROFILE_AM_KEY . "</td><td>" . _PROFILE_AM_VALUE . "</td></tr>";
119: for ($i = 0; $i < 3; ++$i) {
120: $option_text .= "<tr><td><input type='text' name='addOption[{$i}][key]' id='addOption[{$i}][key]' size='15' /></td><td><input type='text' name='addOption[{$i}][value]' id='addOption[{$i}][value]' size='35' /></td></tr>";
121: $option_text .= "<tr height='3px'><td colspan='2'> </td></tr>";
122: }
123: $option_text .= "</table>";
124: $this->addElement(new Xoops\Form\Label(_PROFILE_AM_ADDOPTION, $option_text));
125: }
126: }
127:
128: if ($obj->getVar('field_edit')) {
129: switch ($obj->getVar('field_type')) {
130: case "textbox":
131: case "textarea":
132: case "dhtml":
133: $this->addElement(new Xoops\Form\Text(_PROFILE_AM_MAXLENGTH, 'field_maxlength', 5, 5, $obj->getVar('field_maxlength', 'e')));
134: $this->addElement(new Xoops\Form\TextArea(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
135: break;
136:
137: case "checkbox":
138: case "select_multi":
139: $def_value = $obj->getVar('field_default', 'e') != null
140: ? unserialize($obj->getVar('field_default', 'n')) : null;
141: $element = new Xoops\Form\Select(_PROFILE_AM_DEFAULT, 'field_default', $def_value, 8, true);
142: $options = $obj->getVar('field_options');
143: asort($options);
144:
145: if (!in_array('', array_keys($options))) {
146: $element->addOption('', XoopsLocale::NONE);
147: }
148: $element->addOptionArray($options);
149: $this->addElement($element);
150: break;
151:
152: case "select":
153: case "radio":
154: $def_value = $obj->getVar('field_default', 'e') != null ? $obj->getVar('field_default') : null;
155: $element = new Xoops\Form\Select(_PROFILE_AM_DEFAULT, 'field_default', $def_value);
156: $options = $obj->getVar('field_options');
157: asort($options);
158:
159: if (!in_array('', array_keys($options))) {
160: $element->addOption('', XoopsLocale::NONE);
161: }
162: $element->addOptionArray($options);
163: $this->addElement($element);
164: break;
165:
166: case "date":
167: $this->addElement(new Xoops\Form\DateSelect(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
168: break;
169:
170: case "longdate":
171: $this->addElement(new Xoops\Form\DateSelect(_PROFILE_AM_DEFAULT, 'field_default', strtotime($obj->getVar('field_default', 'e'))));
172: break;
173:
174: case "datetime":
175: $this->addElement(new Xoops\Form\DateTime(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
176: break;
177:
178: case "yesno":
179: $this->addElement(new Xoops\Form\RadioYesNo(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
180: break;
181:
182: case "timezone":
183: $this->addElement(new Xoops\Form\SelectTimeZone(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
184: break;
185:
186: case "language":
187: $this->addElement(new Xoops\Form\SelectLanguage(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
188: break;
189:
190: case "group":
191: $this->addElement(new Xoops\Form\SelectGroup(_PROFILE_AM_DEFAULT, 'field_default', true, $obj->getVar('field_default', 'e')));
192: break;
193:
194: case "group_multi":
195: $this->addElement(new Xoops\Form\SelectGroup(_PROFILE_AM_DEFAULT, 'field_default', true, unserialize($obj->getVar('field_default', 'n')), 5, true));
196: break;
197:
198: case "theme":
199: $this->addElement(new Xoops\Form\SelectTheme(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
200: break;
201:
202: case "autotext":
203: $this->addElement(new Xoops\Form\TextArea(_PROFILE_AM_DEFAULT, 'field_default', $obj->getVar('field_default', 'e')));
204: break;
205: }
206: }
207:
208: $groupperm_handler = $xoops->getHandlerGroupPermission();
209: $searchable_types = array(
210: 'textbox', 'select', 'radio', 'yesno', 'date', 'datetime', 'timezone', 'language'
211: );
212: if (in_array($obj->getVar('field_type'), $searchable_types)) {
213: $search_groups = $groupperm_handler->getGroupIds('profile_search', $obj->getVar('field_id'), $xoops->module->getVar('mid'));
214: $this->addElement(new Xoops\Form\SelectGroup(_PROFILE_AM_PROF_SEARCH, 'profile_search', true, $search_groups, 5, true));
215: }
216: if ($obj->getVar('field_edit') || $obj->isNew()) {
217: if (!$obj->isNew()) {
218:
219: $editable_groups = $groupperm_handler->getGroupIds('profile_edit', $obj->getVar('field_id'), $xoops->module->getVar('mid'));
220: } else {
221: $editable_groups = array();
222: }
223: $this->addElement(new Xoops\Form\SelectGroup(_PROFILE_AM_PROF_EDITABLE, 'profile_edit', false, $editable_groups, 5, true));
224: $this->addElement(new Xoops\Form\RadioYesNo(_PROFILE_AM_REQUIRED, 'field_required', $obj->getVar('field_required', 'e')));
225: $regstep_select = new Xoops\Form\Select(_PROFILE_AM_PROF_REGISTER, 'step_id', $obj->getVar('step_id', 'e'));
226: $regstep_select->addOption(0, XoopsLocale::NO);
227: $regstep_handler = \Xoops::getModuleHelper('profile')->getHandler('regstep');
228: $regstep_select->addOptionArray($regstep_handler->getList());
229: $this->addElement($regstep_select);
230: }
231: $this->addElement(new Xoops\Form\Hidden('op', 'save'));
232: $this->addElement(new Xoops\Form\Button('', 'submit', XoopsLocale::A_SUBMIT, 'submit'));
233: }
234: }
235: