<?php if ( ! defined( 'ABSPATH' ) ) exit;
function ninja_forms_add_menu(){
$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" );
$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");
$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");
$upgrade = add_submenu_page( null, __( 'Ninja Forms Upgrades', 'ninja-forms' ), __( 'Upgrades', 'ninja-forms' ), 'install_plugins', 'nf-upgrades', 'nf_upgrades_screen' );
add_action('admin_print_styles-' . $page, 'ninja_forms_admin_css');
add_action('admin_print_styles-' . $page, 'ninja_forms_admin_js');
add_action('admin_print_styles-' . $new_form, 'ninja_forms_admin_css');
add_action('admin_print_styles-' . $new_form, 'ninja_forms_admin_js');
add_action( 'load-' . $page, 'ninja_forms_load_screen_options_tab' );
add_action( 'load-' . $all_forms, 'ninja_forms_load_screen_options_tab' );
add_action( 'admin_menu', 'ninja_forms_add_menu' );
function nf_add_submenus() {
$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");
$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");
$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");
$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");
add_action('admin_print_styles-' . $settings, 'ninja_forms_admin_js');
add_action('admin_print_styles-' . $settings, 'ninja_forms_admin_css');
add_action('admin_print_styles-' . $import, 'ninja_forms_admin_js');
add_action('admin_print_styles-' . $import, 'ninja_forms_admin_css');
add_action('admin_print_styles-' . $system_status, 'ninja_forms_admin_js');
add_action('admin_print_styles-' . $system_status, 'ninja_forms_admin_css');
add_action('admin_print_styles-' . $extend, 'ninja_forms_admin_js');
add_action('admin_print_styles-' . $extend, 'ninja_forms_admin_css');
add_action( 'load-' . $settings, 'ninja_forms_load_screen_options_tab' );
add_action( 'load-' . $import, 'ninja_forms_load_screen_options_tab' );
add_action( 'load-' . $system_status, 'ninja_forms_load_screen_options_tab' );
add_action( 'load-' . $extend, 'ninja_forms_load_screen_options_tab' );
add_action( 'admin_menu', 'nf_add_submenus', 15 );
function ninja_forms_admin(){
global $wpdb, $ninja_forms_tabs, $ninja_forms_sidebars, $current_tab, $ninja_forms_tabs_metaboxes, $ninja_forms_admin_update_message;
$current_tab = ninja_forms_get_current_tab();
$current_page = esc_html( $_REQUEST['page'] );
if( isset ( $_REQUEST['form_id'] ) ) {
$form_id = absint( $_REQUEST['form_id'] );
$data = Ninja_Forms()->form( $form_id )->get_all_settings();
$form_title = isset ( $data['form_title'] ) ? $data['form_title'] : '';
if( !isset( $ninja_forms_admin_update_message ) AND isset( $_REQUEST['update_message'] ) ){
$ninja_forms_admin_update_message = esc_html( $_REQUEST['update_message'] );
$output_form = isset ( $ninja_forms_tabs[$current_page][$current_tab]['output_form'] ) ? $ninja_forms_tabs[$current_page][$current_tab]['output_form'] : true;
$form_method = isset ( $ninja_forms_tabs[$current_page][$current_tab]['form_method'] ) ? $ninja_forms_tabs[$current_page][$current_tab]['form_method'] : 'post';
$hidden_fields = isset ( $ninja_forms_tabs[$current_page][$current_tab]['hidden_fields'] ) ? $ninja_forms_tabs[$current_page][$current_tab]['hidden_fields'] : true;
<form id="ninja_forms_admin" enctype="multipart/form-data" method="<?php echo $form_method; ?>">
<input type="hidden" name="_page" id="_page" value="<?php echo $current_page;?>">
<input type="hidden" name="_tab" id="_tab" value="<?php echo $current_tab;?>">
<input type="hidden" name="_form_id" id="_form_id" value="<?php echo $form_id;?>">
<input type="hidden" name="_fields_order" id="_fields_order" value="same">
wp_nonce_field('_ninja_forms_save','_ninja_forms_admin_submit');
screen_icon( 'ninja-custom-forms' );
if(isset($ninja_forms_tabs[$current_page][$current_tab]['title'])){
echo $ninja_forms_tabs[$current_page][$current_tab]['title'];
if ( 'form_list' == $current_tab ) {
$builder_url = esc_url( add_query_arg( array( 'form_id' => 'new', 'tab' => 'builder' ) ) );
<h2><?php _e( 'Forms', 'ninja-forms' ); ?> <a href="<?php echo $builder_url; ?>" class="add-new-h2"><?php _e( 'Add New', 'ninja-forms'); ?></a></h2>
<h2 id="nf-display-form-title"><?php echo $form_title; ?></h2>
if($ninja_forms_tabs[$current_page][$current_tab]['show_tab_links']){
<h2 class="nav-tab-wrapper">
ninja_forms_display_tabs();
if ( ! empty ( $form_id ) ) {
$preview_link = ninja_forms_preview_link( $form_id, false );
$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' );
<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>
<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>
if( isset( $ninja_forms_admin_update_message ) AND $ninja_forms_admin_update_message != '' ){
<div id="message" class="updated below-h2">
<?php echo $ninja_forms_admin_update_message;?>
if(isset($ninja_forms_sidebars[$current_page][$current_tab]) AND is_array($ninja_forms_sidebars[$current_page][$current_tab])){
<div id="nav-menus-frame">
<?php ninja_forms_display_sidebars($data); ?>
</div><!-- /#menu-settings-column -->
<div id="post-body-content">
//Check to see if the registered tab has an metaboxes registered to it.
if(isset($ninja_forms_tabs_metaboxes[$current_page][$current_tab]) AND !empty($ninja_forms_tabs_metaboxes[$current_page][$current_tab])){
<div id="ninja_forms_admin_metaboxes">
foreach($ninja_forms_tabs_metaboxes[$current_page][$current_tab] as $slug => $metabox){
ninja_forms_output_tab_metabox($form_id, $slug, $metabox);
//Check to see if the registered tab has a display function registered.
if(isset($ninja_forms_tabs[$current_page][$current_tab]['display_function']) AND $ninja_forms_tabs[$current_page][$current_tab]['display_function'] != ''){
$tab_callback = $ninja_forms_tabs[$current_page][$current_tab]['display_function'];
$arguments = func_get_args();
array_shift($arguments); // We need to remove the first arg ($function_name)
$arguments['form_id'] = $form_id;
$arguments['data'] = $data;
call_user_func_array($tab_callback, $arguments);
if(isset($ninja_forms_tabs[$current_page][$current_tab]['show_save']) AND $ninja_forms_tabs[$current_page][$current_tab]['show_save'] === true){ ?>
<input class="button-primary menu-save ninja-forms-save-data" id="ninja_forms_save_data_top" type="submit" value="<?php _e( 'Save', 'ninja-forms' ); ?>" />
</div><!-- /#post-body-content -->
</div><!-- /#post-body -->
} //End ninja_edit_forms function
require_once(ABSPATH . 'wp-admin/includes/post.php');
function ninja_forms_get_current_tab(){
global $ninja_forms_tabs;
if(isset($_REQUEST['page'])){
$current_page = esc_html( $_REQUEST['page'] );
if(isset($_REQUEST['tab'])){
$current_tab = esc_html( $_REQUEST['tab'] );
if(isset($ninja_forms_tabs[$current_page]) AND is_array($ninja_forms_tabs[$current_page])){
$first_tab = array_slice($ninja_forms_tabs[$current_page], 0, 1);
foreach($first_tab as $key => $val){
function ninja_forms_date_to_datepicker($date){
'j', //3 letter name of the day
'l', //full name of the day
'n', //numeric month no leading zeros
'm', //numeric month leading zeros
'y' //numeric year: 2 digit
foreach($pattern as &$p) {
return preg_replace($pattern,$replace,$date);
function str_putcsv( $array, $delimiter = ',', $enclosure = '"', $terminator = "\n" ) {
// First convert associative array to numeric indexed array
foreach ($array as $key => $value) {
$returnString = ''; # Initialize return string
$arraySize = count( $workArray ); # Get size of array
for ( $i=0; $i<$arraySize; $i++ ) {
// Nested array, process nest item
if ( is_array( $workArray[$i] ) ) {
$returnString .= str_putcsv( $workArray[$i], $delimiter, $enclosure, $terminator );
switch ( gettype( $workArray[$i] ) ) {
// Manually set some strings
case "NULL": $_spFormat = ''; break;
case "boolean": $_spFormat = ($workArray[$i] == true) ? 'true': 'false'; break;
// Make sure sprintf has a good datatype to work with
case "integer": $_spFormat = '%i'; break;
case "double": $_spFormat = '%0.2f'; break;
case "string": $_spFormat = '%s'; $workArray[$i] = str_replace("$enclosure", "$enclosure$enclosure", $workArray[$i]); break;
// Unknown or invalid items for a csv - note: the datatype of array is already handled above, assuming the data is nested
default: $_spFormat = ''; break;
$returnString .= sprintf('%2$s'.$_spFormat.'%2$s', $workArray[$i], $enclosure);
$returnString .= ($i < ($arraySize-1)) ? $delimiter : $terminator;
// Done the workload, return the output information