user_fields_add.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <?php // $Id: user_fields_add.php 20845 2009-05-19 17:27:22Z cfasanando $
  2. /* For licensing terms, see /dokeos_license.txt */
  3. /**
  4. ==============================================================================
  5. * @package dokeos.admin
  6. ==============================================================================
  7. */
  8. // name of the language file that needs to be included
  9. $language_file = array('admin','registration');
  10. $cidReset = true;
  11. // including necessary libraries
  12. require ('../inc/global.inc.php');
  13. $libpath = api_get_path(LIBRARY_PATH);
  14. include_once ($libpath.'usermanager.lib.php');
  15. require_once ($libpath.'formvalidator/FormValidator.class.php');
  16. // section for the tabs
  17. $this_section=SECTION_PLATFORM_ADMIN;
  18. // user permissions
  19. api_protect_admin_script();
  20. $htmlHeadXtra[] = '<script src="../inc/lib/javascript/jquery.js" type="text/javascript" language="javascript"></script>'; //jQuery
  21. $htmlHeadXtra[] = '<script type="text/javascript">
  22. function change_image_user_field (image_value) {
  23. if (image_value==1) {
  24. document.getElementById(\'options\').style.display = \'none\';
  25. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  26. $("div#id_image_user_field").html("&nbsp;");
  27. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_text.png', get_lang('AddUserFields'))."'".');
  28. } else if (image_value==2) {
  29. document.getElementById(\'options\').style.display = \'none\';
  30. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  31. $("div#id_image_user_field").html("&nbsp;");
  32. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_text_area.png', get_lang('AddUserFields'))."'".');
  33. } else if (image_value==3) {
  34. document.getElementById(\'options\').style.display = \'block\';
  35. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  36. $("div#id_image_user_field").html("&nbsp;");
  37. $("div#id_image_user_field").html('."'<br />".Display::return_icon('add_user_field_howto.png', get_lang('AddUserFields'))."'".');
  38. } else if (image_value==4) {
  39. document.getElementById(\'options\').style.display = \'block\';
  40. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  41. $("div#id_image_user_field").html("&nbsp;");
  42. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_drop_down.png', get_lang('AddUserFields'))."'".');
  43. } else if (image_value==5) {
  44. document.getElementById(\'options\').style.display = \'block\';
  45. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  46. $("div#id_image_user_field").html("&nbsp;");
  47. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_multidropdown.png', get_lang('AddUserFields'))."'".');
  48. } else if (image_value==6) {
  49. document.getElementById(\'options\').style.display = \'none\';
  50. $("div#id_image_user_field").html("&nbsp;");
  51. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_data.png', get_lang('AddUserFields'))."'".');
  52. } else if (image_value==7) {
  53. document.getElementById(\'options\').style.display = \'none\';
  54. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  55. $("div#id_image_user_field").html("&nbsp;");
  56. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_date_time.png', get_lang('AddUserFields'))."'".');
  57. } else if (image_value==8) {
  58. document.getElementById(\'options\').style.display = \'block\';
  59. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  60. $("div#id_image_user_field").html("&nbsp;");
  61. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_doubleselect.png', get_lang('AddUserFields'))."'".');
  62. } else if (image_value==9) {
  63. document.getElementById(\'options\').style.display = \'none\';
  64. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  65. $("div#id_image_user_field").html("&nbsp;");
  66. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_divider.png', get_lang('AddUserFields'))."'".');
  67. } else if (image_value==10) {
  68. document.getElementById(\'options\').style.display = \'none\';
  69. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  70. $("div#id_image_user_field").html("&nbsp;");
  71. $("div#id_image_user_field").html('."'<br />".Display::return_icon('userfield_user_tag.png', get_lang('UserTag'))."'".');
  72. }
  73. }
  74. function advanced_parameters() {
  75. if(document.getElementById(\'options\').style.display == \'none\') {
  76. document.getElementById(\'options\').style.display = \'block\';
  77. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_hide.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  78. } else {
  79. document.getElementById(\'options\').style.display = \'none\';
  80. document.getElementById(\'img_plus_and_minus\').innerHTML=\'&nbsp;<img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'\';
  81. }
  82. }
  83. </script>';
  84. // Database table definitions
  85. $table_admin = Database :: get_main_table(TABLE_MAIN_ADMIN);
  86. $table_user = Database :: get_main_table(TABLE_MAIN_USER);
  87. $table_uf = Database :: get_main_table(TABLE_MAIN_USER_FIELD);
  88. $table_uf_opt = Database :: get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
  89. $table_uf_val = Database :: get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
  90. $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
  91. $interbreadcrumb[] = array ('url' => 'user_fields.php', 'name' => get_lang('UserFields'));
  92. if ($_GET['action']<>'edit')
  93. {
  94. $tool_name = get_lang('AddUserFields');
  95. }
  96. else
  97. {
  98. $tool_name = get_lang('EditUserFields');
  99. }
  100. // Create the form
  101. $form = new FormValidator('user_fields_add');
  102. $form->addElement('header', '', $tool_name);
  103. // Field display name
  104. $form->addElement('text','fieldtitle',get_lang('FieldTitle'));
  105. $form->applyFilter('fieldtitle','html_filter');
  106. $form->applyFilter('fieldtitle','trim');
  107. $form->addRule('fieldtitle', get_lang('ThisFieldIsRequired'), 'required');
  108. // Field type
  109. $types = array();
  110. $types[USER_FIELD_TYPE_TEXT] = get_lang('FieldTypeText');
  111. $types[USER_FIELD_TYPE_TEXTAREA] = get_lang('FieldTypeTextarea');
  112. $types[USER_FIELD_TYPE_RADIO] = get_lang('FieldTypeRadio');
  113. $types[USER_FIELD_TYPE_SELECT] = get_lang('FieldTypeSelect');
  114. $types[USER_FIELD_TYPE_SELECT_MULTIPLE] = get_lang('FieldTypeSelectMultiple');
  115. $types[USER_FIELD_TYPE_DATE] = get_lang('FieldTypeDate');
  116. $types[USER_FIELD_TYPE_DATETIME] = get_lang('FieldTypeDatetime');
  117. $types[USER_FIELD_TYPE_DOUBLE_SELECT] = get_lang('FieldTypeDoubleSelect');
  118. $types[USER_FIELD_TYPE_DIVIDER] = get_lang('FieldTypeDivider');
  119. $types[USER_FIELD_TYPE_TAG] = get_lang('FieldTypeTag');
  120. $types[USER_FIELD_TYPE_TIMEZONE] = get_lang('FieldTypeTimezone');
  121. $form->addElement('select','fieldtype',get_lang('FieldType'),$types,array('onchange'=>'change_image_user_field(this.value)'));
  122. $form->addRule('fieldtype', get_lang('ThisFieldIsRequired'), 'required');
  123. //Advanced parameters
  124. $form -> addElement('html','<div class="row">
  125. <div class="label">&nbsp;</div>
  126. <div class="formw">
  127. <a href="javascript://" onclick=" return advanced_parameters()"><span id="img_plus_and_minus"><div style="vertical-align:top;" ><img style="vertical-align:middle;" src="../img/div_show.gif" alt="" />&nbsp;'.get_lang('AdvancedParameters').'</div></span></a>
  128. </div>
  129. </div>');
  130. //When edit, the combobox displey the field type displeyed else none
  131. if ( (isset($_GET['action']) && $_GET['action'] == 'edit') && in_array($_GET['field_type'],array(3,4,5,8))) {
  132. $form -> addElement('html','<div id="options" style="display:block">');
  133. } else {
  134. $form -> addElement('html','<div id="options" style="display:none">');
  135. }
  136. //field label
  137. $form->addElement('hidden','fieldid',Security::remove_XSS($_GET['field_id']));
  138. $form->addElement('text','fieldlabel',get_lang('FieldLabel'));
  139. $form->applyFilter('fieldlabel','html_filter');
  140. $form->addRule('fieldlabel', get_lang('OnlyLettersAndNumbersAllowed'), 'username');
  141. $form->addRule('fieldlabel', '', 'maxlength',20);
  142. //$form->addRule('fieldlabel', get_lang('FieldTaken'), 'fieldlabel_available');
  143. // Field options possible
  144. $form->addElement('text','fieldoptions',get_lang('FieldPossibleValues').Display::return_icon('info3.gif', get_lang('FieldPossibleValuesComment'), array('align' => 'absmiddle', 'hspace' => '3px')));
  145. $form->applyFilter('fieldoptions','trim');
  146. if (is_numeric($_GET['field_id']))
  147. {
  148. $form->addElement('static', 'option_reorder', '', '<a href="user_fields_options.php?field_id='.Security::remove_XSS($_GET['field_id']).'">'.get_lang('ReorderOptions').'</a>');
  149. }
  150. // Field default value
  151. $form->addElement('text','fielddefaultvalue',get_lang('FieldDefaultValue'));
  152. $form->applyFilter('fielddefaultvalue','trim');
  153. // Set default values (only not empty when editing)
  154. $defaults = array();
  155. if (is_numeric($_GET['field_id']))
  156. {
  157. $form_information = UserManager::get_extra_field_information((int)$_GET['field_id']);
  158. $defaults['fieldtitle'] = $form_information['field_display_text'];
  159. $defaults['fieldlabel'] = $form_information['field_variable'];
  160. $defaults['fieldtype'] = $form_information['field_type'];
  161. $defaults['fielddefaultvalue'] = $form_information['field_default_value'];
  162. $count = 0;
  163. // we have to concatenate the options
  164. if (count($form_information['options'])>0) {
  165. foreach ($form_information['options'] as $option_id=>$option)
  166. {
  167. if ($count<>0)
  168. {
  169. $defaults['fieldoptions'] = $defaults['fieldoptions'].'; '.$option['option_display_text'];
  170. }
  171. else
  172. {
  173. $defaults['fieldoptions'] = $option['option_display_text'];
  174. }
  175. $count++;
  176. }
  177. }
  178. }
  179. $form->setDefaults($defaults);
  180. if(isset($_GET['field_id']) && !empty($_GET['field_id'])) {
  181. $class="save";
  182. $text=get_lang('buttonEditUserField');
  183. } else {
  184. $class="add";
  185. $text=get_lang('buttonAddUserField');
  186. }
  187. $form -> addElement('html','</div>');
  188. // Submit button
  189. $form->addElement('style_submit_button', 'submit',$text, 'class='.$class.'');
  190. // Validate form
  191. if( $form->validate())
  192. {
  193. $check = Security::check_token('post');
  194. if($check) {
  195. $field = $form->exportValues();
  196. $fieldlabel = empty($field['fieldlabel'])?$field['fieldtitle']:$field['fieldlabel'];
  197. $fieldlabel = trim(strtolower(str_replace(" ","_",$fieldlabel)));
  198. $fieldtype = $field['fieldtype'];
  199. $fieldtitle = $field['fieldtitle'];
  200. $fielddefault = $field['fielddefaultvalue'];
  201. $fieldoptions = $field['fieldoptions']; //comma-separated list of options
  202. if (is_numeric($field['fieldid']) AND !empty($field['fieldid']))
  203. {
  204. UserManager:: save_extra_field_changes($field['fieldid'],$fieldlabel,$fieldtype,$fieldtitle,$fielddefault,$fieldoptions);
  205. $message = get_lang('FieldEdited');
  206. }
  207. else
  208. {
  209. $field_id = UserManager::create_extra_field($fieldlabel,$fieldtype,$fieldtitle,$fielddefault,$fieldoptions);
  210. $message = get_lang('FieldAdded');
  211. }
  212. Security::clear_token();
  213. header('Location: user_fields.php?action=show_message&message='.urlencode(get_lang('FieldAdded')));
  214. exit ();
  215. }
  216. }else{
  217. if(isset($_POST['submit'])){
  218. Security::clear_token();
  219. }
  220. $token = Security::get_token();
  221. $form->addElement('hidden','sec_token');
  222. $form->setConstants(array('sec_token' => $token));
  223. }
  224. // Display form
  225. Display::display_header($tool_name);
  226. //api_display_tool_title($tool_name);
  227. if(!empty($_GET['message'])) {
  228. Display::display_normal_message($_GET['message']);
  229. }
  230. //else
  231. //{
  232. //Display::display_normal_message(get_lang('UserFieldsAddHelp'),false);
  233. //}
  234. $form->display();
  235. echo '<div id="id_image_user_field">';
  236. if(!empty($defaults['fieldtype'])) {
  237. $image_value = $defaults['fieldtype'];
  238. if ($image_value==1) {
  239. echo '<br />'.Display::return_icon('userfield_text.png', get_lang('AddUserFields'));
  240. } else if ($image_value==2) {
  241. echo '<br />'.Display::return_icon('userfield_text_area.png', get_lang('AddUserFields'));
  242. } else if ($image_value==3) {
  243. echo '<br />'.Display::return_icon('add_user_field_howto.png', get_lang('AddUserFields'));
  244. } else if ($image_value==4) {
  245. echo '<br />'.Display::return_icon('userfield_drop_down.png', get_lang('AddUserFields'));
  246. } else if ($image_value==5) {
  247. echo '<br />'.Display::return_icon('userfield_multidropdown.png', get_lang('AddUserFields'));
  248. } else if ($image_value==6) {
  249. echo '<br />'.Display::return_icon('userfield_data.png', get_lang('AddUserFields'));
  250. } else if ($image_value==7) {
  251. echo '<br />'.Display::return_icon('userfield_date_time.png', get_lang('AddUserFields'));
  252. } else if ($image_value==8) {
  253. echo '<br />'.Display::return_icon('userfield_doubleselect.png', get_lang('AddUserFields'));
  254. } else if ($image_value==9) {
  255. echo '<br />'.Display::return_icon('userfield_divider.png', get_lang('AddUserFields'));
  256. } else if ($image_value==10) {
  257. echo '<br />'.Display::return_icon('userfield_user_tag.png', get_lang('UserTag'));
  258. }
  259. } else {
  260. echo '<br />'.Display::return_icon('userfield_text.png', get_lang('AddUserFields'));
  261. }
  262. echo '</div>';
  263. // footer
  264. Display::display_footer();
  265. ?>