li.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. function ninja_forms_edit_field_output_li( $field_id, $new = false ) {
  3. global $wpdb, $ninja_forms_fields, $nf_rte_editors;
  4. $field_row = ninja_forms_get_field_by_id( $field_id );
  5. $current_tab = ninja_forms_get_current_tab();
  6. if ( isset ( $_REQUEST['page'] ) ) {
  7. $current_page = esc_html( $_REQUEST['page'] );
  8. } else {
  9. $current_page = '';
  10. }
  11. $field_type = $field_row['type'];
  12. $field_data = $field_row['data'];
  13. $plugin_settings = nf_get_settings();
  14. if ( isset( $ninja_forms_fields[$field_type]['use_li'] ) && $ninja_forms_fields[$field_type]['use_li'] ) {
  15. if ( isset( $field_row['fav_id'] ) && $field_row['fav_id'] != 0 ) {
  16. $fav_id = $field_row['fav_id'];
  17. $fav_row = ninja_forms_get_fav_by_id( $fav_id );
  18. if ( empty( $fav_row['name'] ) ) {
  19. $args = array(
  20. 'update_array' => array(
  21. 'fav_id' => '',
  22. ),
  23. 'where' => array(
  24. 'id' => $field_id,
  25. ),
  26. );
  27. ninja_forms_update_field( $args );
  28. $fav_id = '';
  29. }
  30. } else {
  31. $fav_id = '';
  32. }
  33. if ( isset( $field_row['def_id'] ) && $field_row['def_id'] != 0 ) {
  34. $def_id = $field_row['def_id'];
  35. } else {
  36. $def_id = '';
  37. }
  38. $form_id = $field_row['form_id'];
  39. if ( isset( $ninja_forms_fields[$field_type] ) ) {
  40. $reg_field = $ninja_forms_fields[$field_type];
  41. $type_name = $reg_field['name'];
  42. $edit_function = $reg_field['edit_function'];
  43. $edit_options = $reg_field['edit_options'];
  44. $li_class = $reg_field['li_class'];
  45. if ( $reg_field['nesting'] ) {
  46. $nesting_class = 'ninja-forms-nest';
  47. } else {
  48. $nesting_class = 'ninja-forms-no-nest';
  49. }
  50. $conditional = $reg_field['conditional'];
  51. $type_class = $field_type.'-li';
  52. if ( $def_id != 0 && $def_id != '' ) {
  53. $def_row = ninja_forms_get_def_by_id( $def_id );
  54. if ( !empty( $def_row['name'] ) ) {
  55. $type_name = $def_row['name'];
  56. }
  57. }
  58. if ( $fav_id != 0 && $fav_id != '' ) {
  59. $fav_row = ninja_forms_get_fav_by_id( $fav_id );
  60. if ( !empty( $fav_row['name'] ) ) {
  61. $fav_class = 'ninja-forms-field-remove-fav';
  62. $type_name = $fav_row['name'];
  63. }
  64. } else {
  65. $fav_class = 'ninja-forms-field-add-fav';
  66. }
  67. if ( isset( $field_data['label'] ) && $field_data['label'] != '' ) {
  68. $li_label = $field_data['label'];
  69. } else {
  70. $li_label = $type_name;
  71. }
  72. $li_label = apply_filters( 'ninja_forms_edit_field_li_label', $li_label, $field_id );
  73. $li_label = stripslashes( $li_label );
  74. $li_label = ninja_forms_esc_html_deep( $li_label );
  75. if (
  76. isset( $reg_field ) &&
  77. isset( $reg_field['conditional'] ) &&
  78. isset( $reg_field['conditional']['value'] ) &&
  79. isset( $reg_field['conditional']['value']['type'] ) ) {
  80. $conditional_value_type = $reg_field['conditional']['value']['type'];
  81. } else {
  82. $conditional_value_type = '';
  83. }
  84. ?>
  85. <li id="ninja_forms_field_<?php echo $field_id;?>" class="<?php echo $li_class; ?> <?php echo $nesting_class;?> <?php echo $type_class;?>">
  86. <input type="hidden" id="ninja_forms_field_<?php echo $field_id;?>_conditional_value_type" value="<?php echo $conditional_value_type;?>">
  87. <input type="hidden" id="ninja_forms_field_<?php echo $field_id;?>_fav_id" name="" class="ninja-forms-field-fav-id" value="<?php echo $fav_id;?>">
  88. <dl class="menu-item-bar">
  89. <dt class="menu-item-handle" id="ninja_forms_metabox_field_<?php echo $field_id;?>" >
  90. <span class="item-title ninja-forms-field-title" id="ninja_forms_field_<?php echo $field_id;?>_title"><?php echo $li_label;?></span>
  91. <span class="item-controls">
  92. <span class="item-type"><span class="spinner" style="margin-top:-2px;float:left;"></span><span class="item-type-name"><?php echo $type_name;?></span></span>
  93. <a class="item-edit nf-edit-field" id="ninja_forms_field_<?php echo $field_id;?>_toggle" title="<?php _e( 'Edit Menu Item', 'ninja-forms' ); ?>" href="#" data-field="<?php echo $field_id; ?>"><?php _e( 'Edit Menu Item' , 'ninja-forms' ); ?></a>
  94. </span>
  95. </dt>
  96. </dl>
  97. <?php
  98. if ( $new ) {
  99. $padding = '';
  100. } else {
  101. $padding = 'no-padding';
  102. }
  103. ?>
  104. <div class="menu-item-settings type-class inside <?php echo $padding?>" id="ninja_forms_field_<?php echo $field_id;?>_inside" >
  105. <?php
  106. if ( $new ) {
  107. nf_output_registered_field_settings( $field_id );
  108. }
  109. }
  110. } else {
  111. if ( isset( $ninja_forms_fields[$field_type] ) ) {
  112. $reg_field = $ninja_forms_fields[$field_type];
  113. $edit_function = $reg_field['edit_function'];
  114. $arguments = array();
  115. $arguments['field_id'] = $field_id;
  116. $arguments['data'] = $field_data;
  117. if ( $edit_function != '' ) {
  118. call_user_func_array( $edit_function, $arguments );
  119. }
  120. }
  121. }
  122. }
  123. add_action( 'ninja_forms_edit_field_li', 'ninja_forms_edit_field_output_li', 10, 2 );
  124. function ninja_forms_edit_field_close_li( $field_id ) {
  125. global $ninja_forms_fields;
  126. $field_row = ninja_forms_get_field_by_id( $field_id );
  127. $field_type = $field_row['type'];
  128. if ( isset( $ninja_forms_fields[$field_type]['use_li'] ) and $ninja_forms_fields[$field_type]['use_li'] ) {
  129. do_action( 'ninja_forms_edit_field_before_closing_li', $field_id );
  130. ?>
  131. </div><!-- .menu-item-settings-->
  132. </li>
  133. <?php
  134. }
  135. }
  136. add_action( 'ninja_forms_edit_field_after_li', 'ninja_forms_edit_field_close_li' );
  137. /**
  138. * Test fixes for adding dynamic tinyMCE editors
  139. *
  140. */
  141. // used to capture javascript settings generated by the editor
  142. add_filter( 'tiny_mce_before_init', 'NF_WP_Editor_Ajax::tiny_mce_before_init', 10, 2 );
  143. add_filter( 'quicktags_settings', 'NF_WP_Editor_Ajax::quicktags_settings', 10, 2 );
  144. class NF_WP_Editor_Ajax {
  145. /*
  146. * AJAX Call Used to Generate the WP Editor
  147. */
  148. public static function output_js( $field_id = '', $editors = array() ) {
  149. if ( empty( $field_id ) or empty( $editors ) )
  150. return false;
  151. $mce_init = '';
  152. $qt_init = '';
  153. foreach ( $editors as $id ) {
  154. $mce_init .= self::get_mce_init($id);
  155. $qt_init .= self::get_qt_init($id);
  156. }
  157. $mce_init = '{' . trim( $mce_init, ',' ) . '}';
  158. $qt_init = '{' . trim( $qt_init, ',' ) . '}';
  159. ?>
  160. <script type="text/javascript">
  161. tinyMCEPreInit.mceInit = jQuery.extend( tinyMCEPreInit.mceInit, <?php echo $mce_init ?>);
  162. tinyMCEPreInit.qtInit = jQuery.extend( tinyMCEPreInit.qtInit, <?php echo $qt_init ?>);
  163. nf_ajax_rte_editors = <?php echo json_encode( $editors ); ?>;
  164. </script>
  165. <?php
  166. }
  167. /*
  168. * Used to retrieve the javascript settings that the editor generates
  169. */
  170. private static $mce_settings = array();
  171. private static $qt_settings = array();
  172. public static function quicktags_settings( $qtInit, $editor_id ) {
  173. self::$qt_settings[ $editor_id ] = $qtInit;
  174. return $qtInit;
  175. }
  176. public static function tiny_mce_before_init( $mceInit, $editor_id ) {
  177. self::$mce_settings[ $editor_id ] = $mceInit;
  178. return $mceInit;
  179. }
  180. /*
  181. * Code copied from _WP_Editors class (modified a little)
  182. */
  183. private static function get_qt_init($editor_id) {
  184. if ( ! empty( self::$qt_settings[ $editor_id ] ) ) {
  185. $options = self::_parse_init( self::$qt_settings[ $editor_id ] );
  186. $qtInit = "'$editor_id':{$options},";
  187. } else {
  188. $qtInit = '{}';
  189. }
  190. return $qtInit;
  191. }
  192. private static function get_mce_init($editor_id) {
  193. if ( !empty(self::$mce_settings[ $editor_id ]) ) {
  194. $options = self::_parse_init( self::$mce_settings[ $editor_id ] );
  195. $mceInit = "'$editor_id':{$options},";
  196. } else {
  197. $mceInit = '{}';
  198. }
  199. return $mceInit;
  200. }
  201. private static function _parse_init($init) {
  202. $options = '';
  203. foreach ( $init as $k => $v ) {
  204. if ( is_bool($v) ) {
  205. $val = $v ? 'true' : 'false';
  206. $options .= $k . ':' . $val . ',';
  207. continue;
  208. } elseif ( !empty($v) && is_string($v) && ( ('{' == $v{0} && '}' == $v{strlen($v) - 1}) || ('[' == $v{0} && ']' == $v{strlen($v) - 1}) || preg_match('/^\(?function ?\(/', $v) ) ) {
  209. $options .= $k . ':' . $v . ',';
  210. continue;
  211. }
  212. $options .= $k . ':"' . $v . '",';
  213. }
  214. return '{' . trim( $options, ' ,' ) . '}';
  215. }
  216. }
  217. function nf_output_registered_field_settings( $field_id, $data = array() ) {
  218. global $ninja_forms_fields, $nf_rte_editors;
  219. $field_row = ninja_forms_get_field_by_id( $field_id );
  220. $field_type = $field_row['type'];
  221. $field_data = empty ( $data ) ? $field_row['data'] : $data;
  222. $current_tab = ninja_forms_get_current_tab();
  223. if ( isset ( $_REQUEST['page'] ) ) {
  224. $current_page = esc_html( $_REQUEST['page'] );
  225. } else {
  226. $current_page = '';
  227. }
  228. $reg_field = $ninja_forms_fields[$field_type];
  229. $type_name = $reg_field['name'];
  230. $edit_function = $reg_field['edit_function'];
  231. $edit_options = $reg_field['edit_options'];
  232. $edit_settings = $reg_field['edit_settings'];
  233. if ( $reg_field['nesting'] ) {
  234. $nesting_class = 'ninja-forms-nest';
  235. } else {
  236. $nesting_class = 'ninja-forms-no-nest';
  237. }
  238. $conditional = $reg_field['conditional'];
  239. if ( isset( $field_row['fav_id'] ) && $field_row['fav_id'] != 0 ) {
  240. $fav_id = $field_row['fav_id'];
  241. $fav_row = ninja_forms_get_fav_by_id( $fav_id );
  242. if ( empty( $fav_row['name'] ) ) {
  243. $args = array(
  244. 'update_array' => array(
  245. 'fav_id' => '',
  246. ),
  247. 'where' => array(
  248. 'id' => $field_id,
  249. ),
  250. );
  251. ninja_forms_update_field( $args );
  252. $fav_id = '';
  253. }
  254. } else {
  255. $fav_id = '';
  256. }
  257. if ( isset( $field_row['def_id'] ) && $field_row['def_id'] != 0 ) {
  258. $def_id = $field_row['def_id'];
  259. } else {
  260. $def_id = '';
  261. }
  262. if ( $fav_id != 0 && $fav_id != '' ) {
  263. $fav_row = ninja_forms_get_fav_by_id( $fav_id );
  264. if ( !empty( $fav_row['name'] ) ) {
  265. $fav_class = 'ninja-forms-field-remove-fav';
  266. $type_name = $fav_row['name'];
  267. $icon_class = 'filled';
  268. }
  269. } else {
  270. $fav_class = 'ninja-forms-field-add-fav';
  271. $icon_class = 'empty';
  272. }
  273. if ( $reg_field['show_field_id'] || $reg_field['show_fav'] ) {
  274. ?>
  275. <table id="field-info">
  276. <tr>
  277. <?php
  278. if ( $reg_field['show_field_id'] ) {
  279. ?>
  280. <td width="65%"><?php _e( 'Field ID', 'ninja-forms' ); ?>: <strong><?php echo $field_id;?></strong></td>
  281. <?php
  282. }
  283. ?>
  284. <!-- <td width="15%"><a href="#" class="ninja-forms-field-add-def" id="ninja_forms_field_<?php echo $field_id;?>_def" class="ninja-forms-field-add-def">Add Defined</a></td><td width="15%"><a href="#" class="ninja-forms-field-remove-def" id="ninja_forms_field_<?php echo $field_id;?>_def">Remove Defined</a></td> -->
  285. <?php
  286. if ( $reg_field['show_fav'] ) {
  287. ?>
  288. <td width="5%"><a href="#" class="<?php echo $fav_class;?>" id="ninja_forms_field_<?php echo $field_id;?>_fav"><span class="dashicons dashicons-star-<?php echo $icon_class; ?>"></span></a></td>
  289. <?php
  290. }
  291. ?>
  292. </tr>
  293. </table>
  294. <?php
  295. }
  296. do_action( 'ninja_forms_edit_field_before_registered', $field_id, $field_data );
  297. $arguments = array( 'field_id' => $field_id, 'data' => $field_data );
  298. if ( $edit_function != '' ) {
  299. call_user_func_array( $edit_function, $arguments );
  300. }
  301. /**
  302. * We need to get a list of all of our RTEs.
  303. * If we're submitting via ajax, we'll need to use this list.
  304. */
  305. if ( ! isset ( $nf_rte_editors ) )
  306. $nf_rte_editors = array();
  307. $editors = new NF_WP_Editor_Ajax();
  308. if ( is_array( $edit_options ) and !empty( $edit_options ) ) {
  309. foreach ( $edit_options as $opt ) {
  310. $type = $opt['type'];
  311. $label_class = '';
  312. if ( isset( $opt['label'] ) ) {
  313. $label = $opt['label'];
  314. } else {
  315. $label = '';
  316. }
  317. if ( isset( $opt['name'] ) ) {
  318. $name = $opt['name'];
  319. } else {
  320. $name = '';
  321. }
  322. if ( isset( $opt['width'] ) ) {
  323. $width = $opt['width'];
  324. } else {
  325. $width = '';
  326. }
  327. if ( isset( $opt['options'] ) ) {
  328. $options = $opt['options'];
  329. } else {
  330. $options = '';
  331. }
  332. if ( isset( $opt['class'] ) ) {
  333. $class = $opt['class'];
  334. } else {
  335. $class = '';
  336. }
  337. if ( isset( $opt['default'] ) ) {
  338. $default = $opt['default'];
  339. } else {
  340. $default = '';
  341. }
  342. if ( isset( $opt['desc'] ) ) {
  343. $desc = $opt['desc'];
  344. } else {
  345. $desc = '';
  346. }
  347. if ( isset( $field_data[$name] ) ) {
  348. $value = $field_data[$name];
  349. } else {
  350. $value = $default;
  351. }
  352. ninja_forms_edit_field_el_output( $field_id, $type, $label, $name, $value, $width, $options, $class, $desc, $label_class );
  353. }
  354. }
  355. add_action( 'nf_edit_field_advanced', 'nf_test', 10, 2 );
  356. $settings_sections = apply_filters( 'nf_edit_field_settings_sections', array(
  357. 'restrictions' => __( 'Restriction Settings', 'ninja-forms' ),
  358. 'calculations' => __( 'Calculation Settings', 'ninja-forms' ),
  359. 'advanced' => __( 'Advanced Settings', 'ninja-forms' ),
  360. ) );
  361. foreach ( $settings_sections as $key => $name ) {
  362. ?>
  363. <div class="nf-field-settings description-wide description">
  364. <div class="title">
  365. <?php echo $name; ?><span class="dashicons dashicons-arrow-down nf-field-sub-section-toggle"></span>
  366. </div>
  367. <div class="inside" style="display:none;">
  368. <?php
  369. if ( ! empty ( $edit_settings[ $key ] ) ) {
  370. foreach ( $edit_settings[ $key ] as $opt ) {
  371. $type = $opt['type'];
  372. $label_class = '';
  373. if ( isset( $opt['label'] ) ) {
  374. $label = $opt['label'];
  375. } else {
  376. $label = '';
  377. }
  378. if ( isset( $opt['name'] ) ) {
  379. $name = $opt['name'];
  380. } else {
  381. $name = '';
  382. }
  383. if ( isset( $opt['width'] ) ) {
  384. $width = $opt['width'];
  385. } else {
  386. $width = '';
  387. }
  388. if ( isset( $opt['options'] ) ) {
  389. $options = $opt['options'];
  390. } else {
  391. $options = '';
  392. }
  393. if ( isset( $opt['class'] ) ) {
  394. $class = $opt['class'];
  395. } else {
  396. $class = '';
  397. }
  398. if ( isset( $opt['default'] ) ) {
  399. $default = $opt['default'];
  400. } else {
  401. $default = '';
  402. }
  403. if ( isset( $opt['desc'] ) ) {
  404. $desc = $opt['desc'];
  405. } else {
  406. $desc = '';
  407. }
  408. if ( isset( $field_data[$name] ) ) {
  409. $value = $field_data[$name];
  410. } else {
  411. $value = $default;
  412. }
  413. ninja_forms_edit_field_el_output( $field_id, $type, $label, $name, $value, $width, $options, $class, $desc, $label_class );
  414. }
  415. }
  416. do_action( 'nf_edit_field_' . $key, $field_id, $field_data );
  417. ?>
  418. </div>
  419. </div>
  420. <?php
  421. }
  422. ?>
  423. <div class="menu-item-actions description-wide submitbox">
  424. <a class="submitdelete deletion nf-remove-field" id="ninja_forms_field_<?php echo $field_id;?>_remove" data-field="<?php echo $field_id; ?>" href="#"><?php _e('Remove', 'ninja-forms'); ?></a>
  425. </div>
  426. <?php
  427. if ( ! empty ( $nf_rte_editors ) && isset ( $editors ) && is_object( $editors ) ) {
  428. $editors->output_js( $field_id, $nf_rte_editors );
  429. }
  430. }
  431. function nf_test( $field_id, $field_data ) {
  432. do_action( 'ninja_forms_edit_field_after_registered', $field_id, $field_data );
  433. }