admin.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. function ninja_forms_add_menu(){
  3. $page = add_menu_page("Ninja Forms" , __( 'Forms', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_parent_menu_capabilities', 'manage_options' ), "ninja-forms", "ninja_forms_admin", "dashicons-feedback", "35.1337" );
  4. $all_forms = add_submenu_page("ninja-forms", __( 'Forms', 'ninja-forms' ), __( 'All Forms', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_all_forms_capabilities', 'manage_options' ), "ninja-forms", "ninja_forms_admin");
  5. $new_form = add_submenu_page("ninja-forms", __( 'Add New', 'ninja-forms' ), __( 'Add New', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_add_new_capabilities', 'manage_options' ), "ninja-forms&tab=builder&form_id=new", "ninja_forms_admin");
  6. $upgrade = add_submenu_page( null, __( 'Ninja Forms Upgrades', 'ninja-forms' ), __( 'Upgrades', 'ninja-forms' ), 'install_plugins', 'nf-upgrades', 'nf_upgrades_screen' );
  7. add_action('admin_print_styles-' . $page, 'ninja_forms_admin_css');
  8. add_action('admin_print_styles-' . $page, 'ninja_forms_admin_js');
  9. add_action('admin_print_styles-' . $new_form, 'ninja_forms_admin_css');
  10. add_action('admin_print_styles-' . $new_form, 'ninja_forms_admin_js');
  11. add_action( 'load-' . $page, 'ninja_forms_load_screen_options_tab' );
  12. add_action( 'load-' . $all_forms, 'ninja_forms_load_screen_options_tab' );
  13. }
  14. add_action( 'admin_menu', 'ninja_forms_add_menu' );
  15. /**
  16. * Add our submenu pages
  17. *
  18. * @since 2.7
  19. * @return void
  20. */
  21. function nf_add_submenus() {
  22. $import = add_submenu_page("ninja-forms", __( 'Import/Export', 'ninja-forms' ), __( 'Import / Export', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_import_export_capabilities', 'manage_options' ), "ninja-forms-impexp", "ninja_forms_admin");
  23. $settings = add_submenu_page("ninja-forms", __( 'Ninja Form Settings', 'ninja-forms' ), __( 'Settings', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_settings_capabilities', 'manage_options' ), "ninja-forms-settings", "ninja_forms_admin");
  24. $system_status = add_submenu_page("ninja-forms", __( 'System Status', 'ninja-forms' ), __( 'System Status', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_status_capabilities', 'manage_options' ), "ninja-forms-system-status", "ninja_forms_admin");
  25. $extend = add_submenu_page("ninja-forms", __( 'Add-Ons', 'ninja-forms' ), __( 'Add-Ons', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_extend_capabilities', 'manage_options' ), "ninja-forms-extend", "ninja_forms_admin");
  26. add_action('admin_print_styles-' . $settings, 'ninja_forms_admin_js');
  27. add_action('admin_print_styles-' . $settings, 'ninja_forms_admin_css');
  28. add_action('admin_print_styles-' . $import, 'ninja_forms_admin_js');
  29. add_action('admin_print_styles-' . $import, 'ninja_forms_admin_css');
  30. add_action('admin_print_styles-' . $system_status, 'ninja_forms_admin_js');
  31. add_action('admin_print_styles-' . $system_status, 'ninja_forms_admin_css');
  32. add_action('admin_print_styles-' . $extend, 'ninja_forms_admin_js');
  33. add_action('admin_print_styles-' . $extend, 'ninja_forms_admin_css');
  34. add_action( 'load-' . $settings, 'ninja_forms_load_screen_options_tab' );
  35. add_action( 'load-' . $import, 'ninja_forms_load_screen_options_tab' );
  36. add_action( 'load-' . $system_status, 'ninja_forms_load_screen_options_tab' );
  37. add_action( 'load-' . $extend, 'ninja_forms_load_screen_options_tab' );
  38. }
  39. add_action( 'admin_menu', 'nf_add_submenus', 15 );
  40. function ninja_forms_admin(){
  41. global $wpdb, $ninja_forms_tabs, $ninja_forms_sidebars, $current_tab, $ninja_forms_tabs_metaboxes, $ninja_forms_admin_update_message;
  42. $current_tab = ninja_forms_get_current_tab();
  43. $current_page = esc_html( $_REQUEST['page'] );
  44. if( isset ( $_REQUEST['form_id'] ) ) {
  45. $form_id = absint( $_REQUEST['form_id'] );
  46. $data = Ninja_Forms()->form( $form_id )->get_all_settings();
  47. $form_title = isset ( $data['form_title'] ) ? $data['form_title'] : '';
  48. }else{
  49. $form_id = '';
  50. $data = '';
  51. $form_title = '';
  52. }
  53. if( !isset( $ninja_forms_admin_update_message ) AND isset( $_REQUEST['update_message'] ) ){
  54. $ninja_forms_admin_update_message = esc_html( $_REQUEST['update_message'] );
  55. }
  56. $output_form = isset ( $ninja_forms_tabs[$current_page][$current_tab]['output_form'] ) ? $ninja_forms_tabs[$current_page][$current_tab]['output_form'] : true;
  57. $form_method = isset ( $ninja_forms_tabs[$current_page][$current_tab]['form_method'] ) ? $ninja_forms_tabs[$current_page][$current_tab]['form_method'] : 'post';
  58. $hidden_fields = isset ( $ninja_forms_tabs[$current_page][$current_tab]['hidden_fields'] ) ? $ninja_forms_tabs[$current_page][$current_tab]['hidden_fields'] : true;
  59. if ( $output_form ) {
  60. ?>
  61. <form id="ninja_forms_admin" enctype="multipart/form-data" method="<?php echo $form_method; ?>">
  62. <input type="hidden" name="_page" id="_page" value="<?php echo $current_page;?>">
  63. <input type="hidden" name="_tab" id="_tab" value="<?php echo $current_tab;?>">
  64. <input type="hidden" name="_form_id" id="_form_id" value="<?php echo $form_id;?>">
  65. <input type="hidden" name="_fields_order" id="_fields_order" value="same">
  66. <?php
  67. wp_nonce_field('_ninja_forms_save','_ninja_forms_admin_submit');
  68. }
  69. ?>
  70. <div class="wrap">
  71. <?php
  72. screen_icon( 'ninja-custom-forms' );
  73. if(isset($ninja_forms_tabs[$current_page][$current_tab]['title'])){
  74. echo $ninja_forms_tabs[$current_page][$current_tab]['title'];
  75. }
  76. if ( 'form_list' == $current_tab ) {
  77. $builder_url = esc_url( add_query_arg( array( 'form_id' => 'new', 'tab' => 'builder' ) ) );
  78. ?>
  79. <h2><?php _e( 'Forms', 'ninja-forms' ); ?> <a href="<?php echo $builder_url; ?>" class="add-new-h2"><?php _e( 'Add New', 'ninja-forms'); ?></a></h2>
  80. <?php
  81. } else {
  82. ?>
  83. <h2 id="nf-display-form-title"><?php echo $form_title; ?></h2>
  84. <?php
  85. }
  86. if($ninja_forms_tabs[$current_page][$current_tab]['show_tab_links']){
  87. ?>
  88. <h2 class="nav-tab-wrapper">
  89. <?php
  90. ninja_forms_display_tabs();
  91. if ( ! empty ( $form_id ) ) {
  92. $preview_link = ninja_forms_preview_link( $form_id, false );
  93. $subs_link = admin_url( 'edit.php?post_status=all&post_type=nf_sub&action=-1&m=0&form_id=' . $form_id . '&begin_date&end_date&paged=1&mode=list&action2=-1' );
  94. ?>
  95. <a href="<?php echo $preview_link; ?>" target="_blank" class="nf-preview button-secondary"><span class="dashicons dashicons-welcome-view-site"></span><?php _e( 'Preview', 'ninja-forms' ); ?></a>
  96. <a href="<?php echo $subs_link; ?>" target="_blank" class="nf-subs button-secondary"><span class="dashicons dashicons-email-alt"></span><?php _e( 'Submissions', 'ninja-forms' ); ?></a>
  97. <?php } ?>
  98. </h2>
  99. <?php
  100. }
  101. if( isset( $ninja_forms_admin_update_message ) AND $ninja_forms_admin_update_message != '' ){
  102. ?>
  103. <div id="message" class="updated below-h2">
  104. <p>
  105. <?php echo $ninja_forms_admin_update_message;?>
  106. </p>
  107. </div>
  108. <?php
  109. }
  110. if(isset($ninja_forms_sidebars[$current_page][$current_tab]) AND is_array($ninja_forms_sidebars[$current_page][$current_tab])){
  111. ?>
  112. <div id="nav-menus-frame">
  113. <?php ninja_forms_display_sidebars($data); ?>
  114. </div><!-- /#menu-settings-column -->
  115. <?php
  116. }
  117. ?>
  118. <div id="poststuff">
  119. <div id="post-body">
  120. <div id="post-body-content">
  121. <?php
  122. //Check to see if the registered tab has an metaboxes registered to it.
  123. if(isset($ninja_forms_tabs_metaboxes[$current_page][$current_tab]) AND !empty($ninja_forms_tabs_metaboxes[$current_page][$current_tab])){
  124. ?>
  125. <div id="ninja_forms_admin_metaboxes">
  126. <?php
  127. foreach($ninja_forms_tabs_metaboxes[$current_page][$current_tab] as $slug => $metabox){
  128. ninja_forms_output_tab_metabox($form_id, $slug, $metabox);
  129. }
  130. ?>
  131. </div>
  132. <?php
  133. }
  134. //Check to see if the registered tab has a display function registered.
  135. if(isset($ninja_forms_tabs[$current_page][$current_tab]['display_function']) AND $ninja_forms_tabs[$current_page][$current_tab]['display_function'] != ''){
  136. $tab_callback = $ninja_forms_tabs[$current_page][$current_tab]['display_function'];
  137. $arguments = func_get_args();
  138. array_shift($arguments); // We need to remove the first arg ($function_name)
  139. $arguments['form_id'] = $form_id;
  140. $arguments['data'] = $data;
  141. call_user_func_array($tab_callback, $arguments);
  142. }
  143. if(isset($ninja_forms_tabs[$current_page][$current_tab]['show_save']) AND $ninja_forms_tabs[$current_page][$current_tab]['show_save'] === true){ ?>
  144. <br />
  145. <input class="button-primary menu-save ninja-forms-save-data" id="ninja_forms_save_data_top" type="submit" value="<?php _e( 'Save', 'ninja-forms' ); ?>" />
  146. <?php
  147. }
  148. ?>
  149. </div><!-- /#post-body-content -->
  150. </div><!-- /#post-body -->
  151. </div>
  152. </div>
  153. <!-- </div>/.wrap-->
  154. <?php
  155. if ( $output_form ) {
  156. ?>
  157. </form>
  158. <?php
  159. }
  160. ?>
  161. <?php
  162. } //End ninja_edit_forms function
  163. if(is_admin()){
  164. require_once(ABSPATH . 'wp-admin/includes/post.php');
  165. }
  166. function ninja_forms_get_current_tab(){
  167. global $ninja_forms_tabs;
  168. if(isset($_REQUEST['page'])){
  169. $current_page = esc_html( $_REQUEST['page'] );
  170. if(isset($_REQUEST['tab'])){
  171. $current_tab = esc_html( $_REQUEST['tab'] );
  172. }else{
  173. if(isset($ninja_forms_tabs[$current_page]) AND is_array($ninja_forms_tabs[$current_page])){
  174. $first_tab = array_slice($ninja_forms_tabs[$current_page], 0, 1);
  175. foreach($first_tab as $key => $val){
  176. $current_tab = $key;
  177. }
  178. }else{
  179. $current_tab = '';
  180. }
  181. }
  182. return $current_tab;
  183. }else{
  184. return false;
  185. }
  186. }
  187. function ninja_forms_date_to_datepicker($date){
  188. $pattern = array(
  189. //day
  190. 'd', //day of the month
  191. 'j', //3 letter name of the day
  192. 'l', //full name of the day
  193. 'z', //day of the year
  194. //month
  195. 'F', //Month name full
  196. 'M', //Month name short
  197. 'n', //numeric month no leading zeros
  198. 'm', //numeric month leading zeros
  199. //year
  200. 'Y', //full numeric year
  201. 'y' //numeric year: 2 digit
  202. );
  203. $replace = array(
  204. 'dd','d','DD','o',
  205. 'MM','M','m','mm',
  206. 'yy','y'
  207. );
  208. foreach($pattern as &$p) {
  209. $p = '/'.$p.'/';
  210. }
  211. return preg_replace($pattern,$replace,$date);
  212. }
  213. function str_putcsv( $array, $delimiter = ',', $enclosure = '"', $terminator = "\n" ) {
  214. // First convert associative array to numeric indexed array
  215. $workArray = array();
  216. foreach ($array as $key => $value) {
  217. $workArray[] = $value;
  218. }
  219. $returnString = ''; # Initialize return string
  220. $arraySize = count( $workArray ); # Get size of array
  221. for ( $i=0; $i<$arraySize; $i++ ) {
  222. // Nested array, process nest item
  223. if ( is_array( $workArray[$i] ) ) {
  224. $returnString .= str_putcsv( $workArray[$i], $delimiter, $enclosure, $terminator );
  225. } else {
  226. switch ( gettype( $workArray[$i] ) ) {
  227. // Manually set some strings
  228. case "NULL": $_spFormat = ''; break;
  229. case "boolean": $_spFormat = ($workArray[$i] == true) ? 'true': 'false'; break;
  230. // Make sure sprintf has a good datatype to work with
  231. case "integer": $_spFormat = '%i'; break;
  232. case "double": $_spFormat = '%0.2f'; break;
  233. case "string": $_spFormat = '%s'; $workArray[$i] = str_replace("$enclosure", "$enclosure$enclosure", $workArray[$i]); break;
  234. // Unknown or invalid items for a csv - note: the datatype of array is already handled above, assuming the data is nested
  235. case "object":
  236. case "resource":
  237. default: $_spFormat = ''; break;
  238. }
  239. $returnString .= sprintf('%2$s'.$_spFormat.'%2$s', $workArray[$i], $enclosure);
  240. $returnString .= ($i < ($arraySize-1)) ? $delimiter : $terminator;
  241. }
  242. }
  243. // Done the workload, return the output information
  244. return $returnString;
  245. }