class-simple-job-board-settings-application-form-fields.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php if (!defined('ABSPATH')) { exit; } // Exit if accessed directly
  2. /**
  3. * Simple_Job_Board_Settings_Application_Form_Fields Class
  4. *
  5. * This file used to define the settings for the job application form. User can create
  6. * generic job application form that will only add to the newly created job.
  7. *
  8. * @link https://wordpress.org/plugins/simple-job-board
  9. * @since 2.2.3
  10. * @since 2.4.0 Added Application Name Column Option on SJB Form Builder & Revised Sanitization & Escaping of Form Fields' Inputs & Outputs
  11. * @since 2.5.0 Added before & after action hooks for application form fields section.
  12. *
  13. * @package Simple_Job_Board
  14. * @subpackage Simple_Job_Board/admin/settings
  15. * @author PressTigers <support@presstigers.com>
  16. */
  17. class Simple_Job_Board_Settings_Application_Form_Fields {
  18. /**
  19. * Initialize the class and set its properties.
  20. *
  21. * @since 2.2.3
  22. */
  23. public function __construct() {
  24. // Filter -> Add Settings Application Form Fields Tab
  25. add_filter('sjb_settings_tab_menus', array($this, 'sjb_add_settings_tab'), 50);
  26. // Action -> Add Settings Application Form Fields Section
  27. add_action('sjb_settings_tab_section', array($this, 'sjb_add_settings_section'), 50);
  28. // Action -> Save Settings Application Form Fields Section
  29. add_action('sjb_save_setting_sections', array($this, 'sjb_save_settings_section'));
  30. }
  31. /**
  32. * Add Settings Application Form Fields Tab.
  33. *
  34. * @since 2.2.3
  35. *
  36. * @param array $tabs Settings Tab
  37. * @return array $tabs Merge array of Settings Tab with Application Form Fields Tab.
  38. */
  39. public function sjb_add_settings_tab($tabs) {
  40. $tabs['application_form_fields'] = esc_html__('Application Form Fields', 'simple-job-board');
  41. return $tabs;
  42. }
  43. /**
  44. * Add Settings Application Form Fields Section.
  45. *
  46. * @since 2.2.3
  47. */
  48. public function sjb_add_settings_section() {
  49. ?>
  50. <!-- Application Form Fields -->
  51. <div id="settings-application_form_fields" class="sjb-admin-settings" style="display: none;">
  52. <?php
  53. $field_types = array(
  54. 'text' => esc_html__('Text Field', 'simple-job-board'),
  55. 'text_area' => esc_html__('Text Area', 'simple-job-board'),
  56. 'email' => esc_html__('Email', 'simple-job-board'),
  57. 'phone' => esc_html__('Phone', 'simple-job-board'),
  58. 'date' => esc_html__('Date', 'simple-job-board'),
  59. 'checkbox' => esc_html__('Check Box', 'simple-job-board'),
  60. 'dropdown' => esc_html__('Drop Down', 'simple-job-board'),
  61. 'radio' => esc_html__('Radio', 'simple-job-board'),
  62. );
  63. $field_types = apply_filters( 'sjb_form_field_types', $field_types );
  64. ?>
  65. <h4 class="first"><?php esc_html_e('Default Application Form Fields', 'simple-job-board'); ?></h4>
  66. <div class="sjb-section settings-fields">
  67. <?php
  68. /**
  69. * Action -> Add new section before application fields section.
  70. *
  71. * @since 2.5.0
  72. */
  73. do_action('sjb_jobapp_fields_before');
  74. ?>
  75. <form method="post" id="job_app_form">
  76. <ul id="settings_app_form_fields">
  77. <?php
  78. // Get Application Form Data
  79. $jobapp_fields = unserialize(get_option('jobapp_settings_options'));
  80. // Display Job Application From DB
  81. if (NULL != $jobapp_fields):
  82. foreach ($jobapp_fields as $key => $val):
  83. if (isset($val['type']) && isset($val['option'])):
  84. if (substr($key, 0, 7) == 'jobapp_'):
  85. // Escaping all array value
  86. $val = ( is_array($val) ) ? array_map('esc_attr', $val) : esc_attr($val);
  87. $key = preg_replace('/[^\p{L} 0-9]/u', '_', $key);
  88. $select_option = NULL;
  89. // Job Application Form Select Options
  90. foreach ($field_types as $field_key => $field_val) {
  91. if ($val['type'] == $field_key) {
  92. $select_option .= '<option value="' . $field_key . '" selected="selected">' . $field_val . '</option>';
  93. } else {
  94. $select_option .= '<option value="' . $field_key . '" >' . $field_val . '</option>';
  95. }
  96. }
  97. // Retrieve Radio Button, Checkbox & Dropdown Option's Value
  98. $val['option'] = isset($val['option']) ? $val['option'] : '';
  99. // Options for [Checkbox],[Radio],[Drop Down] Fields
  100. if ('checkbox' === $val['type'] or 'radio' === $val['type'] or 'dropdown' === $val['type']):
  101. $field_options = '<input type="text" class="settings-field-options" name="' . $key . '[option]" value="' . $val['option'] . '" placeholder="Option1, option2, option3" />';
  102. else:
  103. $field_options = '<input type="text" class="settings-field-options" name="' . $key . '[option]" value="' . $val['option'] . '" placeholder="Option1, option2, option3" style="display:none;" />';
  104. endif;
  105. /**
  106. * New Label Index Insertion:
  107. *
  108. * - Addition of new index "label"
  109. * - Data Legacy Checking
  110. */
  111. $label = isset($val['label']) ? $val['label'] : ucwords(str_replace('_', ' ', substr($key, 7)));
  112. // List Application Form Fields
  113. echo '<li class="' . $key . '">'
  114. . '<div class="col-lg-2 col-md-2">'
  115. . '<label class="sjb-editable-label" for="">' . $label . '</label>'
  116. . '<input type="hidden" name="' . $key . '[label]" value="' . $label . '" />'
  117. . '</div><div class="col-lg-2 col-md-2">'
  118. . '<select class="settings_jobapp_field_type" name="' . $key . '[type]">' . $select_option . '</select>'
  119. . '' . $field_options . ''
  120. . '</div>';
  121. // Set Fields as Optional or Required
  122. $val['optional'] = isset($val['optional']) ? $val['optional'] : 'checked';
  123. echo '<div class="col-lg-5 col-md-5"><label>'
  124. . '<input type="checkbox" value="' . $val['optional'] . '" class="settings-jobapp-required-field" ' . $val['optional'] . ' />' . esc_html__('Required', 'simple-job-board') . ' &nbsp; '
  125. . '<input type="hidden" name="' . $key . '[optional]" value="' . $val['optional'] . '" class="settings-jobapp-optional-field" />'
  126. . '</label>';
  127. echo '&nbsp;&nbsp;<div class="button removeField">' . esc_html__('Delete', 'simple-job-board') . '</div>&nbsp;&nbsp;';
  128. /**
  129. * Set Applicant Name Field
  130. *
  131. * Select field to show column under Applicant section
  132. *
  133. * @since 2.4.0
  134. */
  135. $is_applicant_column = isset($val['applicant_column']) ? $val['applicant_column'] : 'unchecked';
  136. echo '<label>'
  137. . '<input type="radio" class="settings-applicant-columns" name="[applicant_column]" ' . $is_applicant_column . ' />' . esc_html__('Expose in Applicant Listing', 'simple-job-board') . ' &nbsp; '
  138. . '<input type="hidden" class="settings-jobapp-applicant-column" name="' . $key . '[applicant_column]" value="' . $is_applicant_column . '" />'
  139. . '</label>'
  140. . '<div>'
  141. . '</li>';
  142. endif;
  143. endif;
  144. endforeach;
  145. endif;
  146. ?>
  147. </ul>
  148. <input type="hidden" name="empty_jobapp" value="empty_jobapp">
  149. <input type="hidden" value="1" name="admin_notices">
  150. </form>
  151. </div>
  152. <div class="clearfix clear"></div>
  153. <!-- Add Application Form Fields -->
  154. <div class="sjb-section sjb-input-data">
  155. <div class="col-lg-2 col-md-2">
  156. <label class="sjb-featured-label"><?php esc_html_e('Field', 'simple-job-board'); ?></label>
  157. <input type="text" id="setting_jobapp_name">
  158. </div>
  159. <div class="col-lg-2 col-md-2">
  160. <label class="sjb-featured-label"><?php esc_html_e('Type', 'simple-job-board'); ?></label>
  161. <select id="settings-jobapp-field-types">
  162. <?php
  163. foreach ($field_types as $key => $val):
  164. echo '<option value="' . $key . '" class="' . $key . '">' . esc_attr($val) . '</option>';
  165. endforeach;
  166. ?>
  167. </select>
  168. <input id="settings_jobapp_field_options" class="jobapp_field_type" type="text" style="display: none;" placeholder="Option1, Option2, Option3" />
  169. </div>
  170. <div class="col-lg-5 col-md-5">
  171. <div class="sjb-required">
  172. <label>
  173. <input type="checkbox" id="settings-jobapp-required-field" checked="checked" />
  174. <span><?php esc_html_e('Required', 'simple-job-board'); ?></span>
  175. </label>
  176. <label>
  177. <input type="radio" id="settings-jobapp-applicant-columns" />
  178. <span><?php esc_html_e('Expose in Applicant Listing', 'simple-job-board'); ?></span>
  179. </label>
  180. <input type="submit" class="button" id="app_add_field" value="<?php esc_html_e('Add Field', 'simple-job-board'); ?>">
  181. </div>
  182. </div>
  183. </div>
  184. <?php
  185. /**
  186. * Action -> Add new section after application fields section.
  187. *
  188. * @since 2.5.0
  189. */
  190. do_action('sjb_jobapp_fields_after');
  191. ?>
  192. <input type="submit" name="jobapp_submit" id="jobapp_btn" class="button button-primary" value="<?php echo esc_html__('Save Changes', 'simple-job-board'); ?>" />
  193. </div>
  194. <?php
  195. }
  196. /**
  197. * Save Settings Application Form Fields Section.
  198. *
  199. * This function is used to save the generic job application form. This form
  200. * is visible to job detail page in admin on creation of new job.
  201. *
  202. * @since 2.2.3
  203. */
  204. public function sjb_save_settings_section() {
  205. $POST_data = filter_input_array(INPUT_POST);
  206. $empty_jobapp = filter_input(INPUT_POST, 'empty_jobapp');
  207. if (!empty($POST_data) && ( NULL != $empty_jobapp )) {
  208. $job_data = serialize($POST_data);
  209. // Save Application Form in WP Options || Add Option if not exist.
  210. ( FALSE !== get_option('jobapp_settings_options') ) ?
  211. update_option('jobapp_settings_options', $job_data) :
  212. add_option('jobapp_settings_options', $job_data, '', 'no');
  213. }
  214. }
  215. }