Commit fa932d17 authored by Kevin Stover's avatar Kevin Stover

Merge branch 'release/v2.7.7'

parents 6d18b1a3 790bc207
......@@ -3,8 +3,8 @@
Tags: form, forms, contact form, custom form, form builder, form creator, form manager, form creation, contact forms, custom forms, forms builder, forms creator, forms manager, forms creation, form administration,
Requires at least: 3.6
Tested up to: 3.9
Stable tag: 2.7.6
Tested up to: 3.9.2
Stable tag: 2.7.7
License: GPLv2 or later
Forms created with a simple drag and drop interface. Contact forms, Email collection forms, or any other form you want on your WordPress site.
......
......@@ -59,10 +59,13 @@
.nf-sub-edit-value {
position: relative;
}
.type-_upload input[type=text] {
.nf-sub-edit-upload {
position: relative;
}
.nf-sub-edit-upload input[type=text] {
padding-right: 48px;
}
.type-_upload a {
.nf-sub-edit-upload a {
background: #333;
color: #fff;
height: 27px;
......@@ -73,6 +76,6 @@
top: 8px;
right: -8px;
}
.type-_upload a:hover {
.nf-sub-edit-upload a:hover {
background: #f1f1f1;
color: #333;
......@@ -53,7 +53,7 @@ class NF_Step_Processing
ignore_user_abort( true );
if ( ! nf_is_func_disabled( 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
set_time_limit( 0 );
//set_time_limit( 0 );
}
add_action( 'wp_ajax_nf_' . $this->action, array( $this, 'processing' ) );
......
......@@ -75,19 +75,6 @@ class NF_Sub {
// Set our sub id
$this->sub_id = $sub_id;
// Setup our form id var
$this->form_id = $this->get_meta( '_form_id' );
// Setup our action var
$this->action = $this->get_meta( '_action' );
// Setup our sequential id
$this->seq_num = $this->get_meta( '_seq_num' );
// Setup our user_id var
$this->user_id = $sub->post_author;
// Setup our date submitted var
$this->date_submitted = get_the_time( 'Y-m-d G:i:s', $sub_id );
// Setup our date modified var
$this->date_modified = get_post_modified_time( 'Y-m-d G:i:s', false, $sub_id );
// Setup our fields and meta vars.
$post_meta = get_post_custom( $this->sub_id );
$this->fields = array();
......@@ -118,6 +105,21 @@ class NF_Sub {
$this->meta[ $key ] = $meta_value;
}
}
// Setup our form id var
$this->form_id = $this->get_meta( '_form_id' );
// Setup our action var
$this->action = $this->get_meta( '_action' );
// Setup our sequential id
$this->seq_num = $this->get_meta( '_seq_num' );
// Setup our user_id var
$this->user_id = $sub->post_author;
// Setup our date submitted var
$this->date_submitted = get_the_time( 'Y-m-d G:i:s', $sub_id );
// Setup our date modified var
$this->date_modified = get_post_modified_time( 'Y-m-d G:i:s', false, $sub_id );
}
/**
......@@ -300,11 +302,11 @@ class NF_Sub {
* @return array|bool
*/
public function get_meta( $meta_key ) {
if ( isset ( $this->meta[ $meta_key ] ) ) {
return $this->meta[ $meta_key ];
} else {
return get_post_meta( $this->sub_id, $meta_key, true );
if ( ! isset ( $this->meta[ $meta_key ] ) ) {
$this->meta[ $meta_key ] = get_post_meta( $this->sub_id, $meta_key, true );
}
return $this->meta[ $meta_key ];
}
/**
......
......@@ -86,6 +86,9 @@ class NF_Subs_CPT {
// Listen for our exports button.
add_action( 'load-edit.php', array( $this, 'export_listen' ) );
// Filter our submission capabilities
add_filter( 'user_has_cap', array( $this, 'cap_filter' ), 10, 3 );
}
/**
......@@ -122,20 +125,28 @@ class NF_Subs_CPT {
'show_ui' => true,
'_builtin' => false, // It's a custom post type, not built in!
'query_var' => true,
'capability_type' => 'post',
'has_archive' => false,
'show_in_menu' => false,
// 'capabilities' => array(
// 'create_posts' => false, // Removes support for the "Add New" function
// ),
'hierarchical' => false,
'menu_events' => null,
'rewrite' => array( 'slug' => 'nf_sub' ), // Permalinks format
//'taxonomies' => array( 'novel_genre', 'novel_series', 'novel_author', 'post_tag'),
'supports' => array( 'custom-fields' ),
'capability_type' => 'nf_sub',
'capabilities' => array(
'publish_posts' => 'nf_sub',
'edit_posts' => 'nf_sub',
'edit_others_posts' => 'nf_sub',
'delete_posts' => 'nf_sub',
'delete_others_posts' => 'nf_sub',
'read_private_posts' => 'nf_sub',
'edit_post' => 'nf_sub',
'delete_post' => 'nf_sub',
'read_post' => 'nf_sub',
),
);
register_post_type('nf_sub',$args);
register_post_type( 'nf_sub',$args );
}
/**
......@@ -173,7 +184,7 @@ class NF_Subs_CPT {
*/
public function add_submenu() {
// Add our submissions submenu
$sub_page = add_submenu_page( 'ninja-forms', __( 'Submissions', 'ninja-forms' ), __( 'Submissions', 'ninja-forms' ), apply_filters( 'nf_admin_menu_subs_capabilities', 'manage_options' ), 'edit.php?post_type=nf_sub' );
$sub_page = add_submenu_page( 'ninja-forms', __( 'Submissions', 'ninja-forms' ), __( 'Submissions', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_submissions_capabilities', 'manage_options' ), 'edit.php?post_type=nf_sub' );
// Enqueue our JS on the edit page.
//add_action( 'load-' . $sub_page, array( $this, 'load_js' ) );
add_action( 'admin_print_styles', array( $this, 'load_js' ) );
......@@ -193,7 +204,7 @@ class NF_Subs_CPT {
public function load_js() {
global $pagenow, $typenow;
// Bail if we aren't on the edit.php page or we aren't editing our custom post type.
if ( ( $pagenow != 'edit.php' && $pagenow != 'post.php' ) && $typenow != 'nf_sub' )
if ( ( $pagenow != 'edit.php' && $pagenow != 'post.php' ) || $typenow != 'nf_sub' )
return false;
$form_id = isset ( $_REQUEST['form_id'] ) ? $_REQUEST['form_id'] : '';
......@@ -228,11 +239,12 @@ class NF_Subs_CPT {
* @return void
*/
public function load_css() {
global $pagenow;
global $pagenow, $typenow;
// Bail if we aren't on the edit.php page or the post.php page.
if ( $pagenow != 'edit.php' && $pagenow != 'post.php' )
if ( ( $pagenow != 'edit.php' && $pagenow != 'post.php' ) || $typenow != 'nf_sub' )
return false;
wp_enqueue_style( 'nf-sub', NF_PLUGIN_URL .'assets/css/cpt.css' );
wp_enqueue_style( 'nf-jquery-ui-freshness', NF_PLUGIN_URL .'assets/css/jquery-ui-fresh.min.css' );
}
......@@ -409,6 +421,9 @@ class NF_Subs_CPT {
else
$h_time = mysql2date( __( 'Y/m/d' ), $m_time );
}
$t_time = apply_filters( 'nf_sub_title_time', $t_time );
$h_time = apply_filters( 'nf_sub_human_time', $h_time );
/** This filter is documented in wp-admin/includes/class-wp-posts-list-table.php */
echo '<abbr title="' . $t_time . '">' . $h_time . '</abbr>';
......@@ -1211,6 +1226,23 @@ class NF_Subs_CPT {
die();
}
}
/**
* Filter user capabilities
*
* @access public
* @since 2.7.7
* @return void
*/
public function cap_filter( $allcaps, $cap, $args ) {
$sub_cap = apply_filters( 'ninja_forms_admin_submissions_capabilities', 'manage_options' );
if ( ! empty( $allcaps[ $sub_cap ] ) ) {
$allcaps['nf_sub'] = true;
}
return $allcaps;
}
}
\ No newline at end of file
......@@ -52,7 +52,7 @@ class NF_Subs {
$seq_num = apply_filters( 'nf_sub_seq_num', $seq_num, $form_id );
// Add the sequential ID to the post meta
Ninja_Forms()->sub( $sub_id )->update_meta( '_seq_num', $seq_num );
Ninja_Forms()->sub( $sub_id )->update_seq_num( $seq_num );
// Update our form data with the new "last seq id."
$form['data']['last_sub'] = $seq_num;
......
<?php
function ninja_forms_add_menu(){
$page = add_menu_page("Ninja Forms" , __( 'Forms', 'ninja-forms' ), apply_filters( 'ninja_forms_admin_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_menu_capabilities', 'manage_options' ), "ninja-forms", "ninja_forms_admin");
$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=form_settings&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' );
......
......@@ -8,8 +8,8 @@ function ninja_forms_edit_field($field_id){
}
function ninja_forms_edit_field_el_output($field_id, $type, $label = '', $name = '', $value = '', $width = 'wide', $options = '', $class = '', $desc = '', $label_class = ''){
global $ninja_forms_fields;
function ninja_forms_edit_field_el_output($field_id, $type, $label = '', $name = '', $value = '', $width = 'wide', $options = '', $class = '', $desc = '', $label_class = '' ){
global $ninja_forms_fields, $nf_rte_editors;
$field_row = ninja_forms_get_field_by_id($field_id);
$field_type = $field_row['type'];
......@@ -114,6 +114,9 @@ function ninja_forms_edit_field_el_output($field_id, $type, $label = '', $name =
<?php
break;
case 'rte':
$editor_id = str_replace( '[', '_', $name );
$editor_id = str_replace( ']', '', $editor_id );
$plugin_settings = nf_get_settings();
if ( !isset( $plugin_settings['version_2_2_25_rte_fix'] ) OR $plugin_settings['version_2_2_25_rte_fix'] == '' ) {
$value = html_entity_decode( $value );
......@@ -121,10 +124,13 @@ function ninja_forms_edit_field_el_output($field_id, $type, $label = '', $name =
update_option( 'ninja_forms_settings', $plugin_settings );
}
$editor_id = str_replace( '[', '-', $name );
$editor_id = str_replace( ']', '-', $editor_id );
$args = apply_filters( 'ninja_forms_edit_field_rte', array( 'textarea_name' => $name ) );
wp_editor( $value, $editor_id, $args );
wp_editor( $value, $editor_id, $args );
// If we're using ajax, add this editor ID to our global var so that we can instantiate it on the front-end.
if ( isset ( $_POST['action'] ) && $_POST['action'] == 'ninja_forms_new_field' )
$nf_rte_editors[] = $editor_id;
break;
}
......
<?php
function ninja_forms_edit_field_output_li( $field_id ) {
global $wpdb, $ninja_forms_fields;
global $wpdb, $ninja_forms_fields, $nf_rte_editors;
$field_row = ninja_forms_get_field_by_id( $field_id );
$current_tab = ninja_forms_get_current_tab();
if ( isset ( $_REQUEST['page'] ) ) {
......@@ -134,10 +134,21 @@ function ninja_forms_edit_field_output_li( $field_id ) {
call_user_func_array( $edit_function, $arguments );
}
/**
* We need to get a list of all of our RTEs.
* If we're submitting via ajax, we'll need to use this list.
*/
if ( ! isset ( $nf_rte_editors ) )
$nf_rte_editors = array();
$editors = new NF_WP_Editor_Ajax();
if ( is_array( $edit_options ) and !empty( $edit_options ) ) {
foreach ( $edit_options as $opt ) {
$type = $opt['type'];
$label_class = '';
if ( isset( $opt['label'] ) ) {
$label = $opt['label'];
} else {
......@@ -186,7 +197,7 @@ function ninja_forms_edit_field_output_li( $field_id ) {
$value = $default;
}
ninja_forms_edit_field_el_output( $field_id, $type, $label, $name, $value, $width, $options, $class, $desc );
ninja_forms_edit_field_el_output( $field_id, $type, $label, $name, $value, $width, $options, $class, $desc, $label_class );
}
}
......@@ -206,7 +217,17 @@ function ninja_forms_edit_field_output_li( $field_id ) {
}
}
}
/**
* We need to get a list of all of our RTEs.
* If we're submitting via ajax, we'll need to use this list.
*/
if ( isset ( $_POST['action'] ) && $_POST['action'] == 'ninja_forms_new_field' ) {
if ( ! empty ( $nf_rte_editors ) ) {
$editors->output_js( $field_id, $nf_rte_editors );
}
}
}
add_action( 'ninja_forms_edit_field_li', 'ninja_forms_edit_field_output_li' );
function ninja_forms_edit_field_close_li( $field_id ) {
......@@ -224,3 +245,102 @@ function ninja_forms_edit_field_close_li( $field_id ) {
}
}
add_action( 'ninja_forms_edit_field_after_li', 'ninja_forms_edit_field_close_li' );
/**
* Test fixes for adding dynamic tinyMCE editors
*
*/
// used to capture javascript settings generated by the editor
add_filter( 'tiny_mce_before_init', 'NF_WP_Editor_Ajax::tiny_mce_before_init', 10, 2 );
add_filter( 'quicktags_settings', 'NF_WP_Editor_Ajax::quicktags_settings', 10, 2 );
class NF_WP_Editor_Ajax {
/*
* AJAX Call Used to Generate the WP Editor
*/
public static function output_js( $field_id = '', $editors = array() ) {
if ( empty( $field_id ) or empty( $editors ) )
return false;
$mce_init = '';
$qt_init = '';
foreach ( $editors as $id ) {
$mce_init .= self::get_mce_init($id);
$qt_init .= self::get_qt_init($id);
}
$mce_init = '{' . trim( $mce_init, ',' ) . '}';
$qt_init = '{' . trim( $qt_init, ',' ) . '}';
?>
<script type="text/javascript">
tinyMCEPreInit.mceInit = jQuery.extend( tinyMCEPreInit.mceInit, <?php echo $mce_init ?>);
tinyMCEPreInit.qtInit = jQuery.extend( tinyMCEPreInit.qtInit, <?php echo $qt_init ?>);
nf_ajax_rte_editors = <?php echo json_encode( $editors ); ?>;
</script>
<?php
}
/*
* Used to retrieve the javascript settings that the editor generates
*/
private static $mce_settings = array();
private static $qt_settings = array();
public static function quicktags_settings( $qtInit, $editor_id ) {
self::$qt_settings[ $editor_id ] = $qtInit;
return $qtInit;
}
public static function tiny_mce_before_init( $mceInit, $editor_id ) {
self::$mce_settings[ $editor_id ] = $mceInit;
return $mceInit;
}
/*
* Code copied from _WP_Editors class (modified a little)
*/
private static function get_qt_init($editor_id) {
if ( ! empty( self::$qt_settings[ $editor_id ] ) ) {
$options = self::_parse_init( self::$qt_settings[ $editor_id ] );
$qtInit = "'$editor_id':{$options},";
} else {
$qtInit = '{}';
}
return $qtInit;
}
private static function get_mce_init($editor_id) {
if ( !empty(self::$mce_settings[ $editor_id ]) ) {
$options = self::_parse_init( self::$mce_settings[ $editor_id ] );
$mceInit = "'$editor_id':{$options},";
} else {
$mceInit = '{}';
}
return $mceInit;
}
private static function _parse_init($init) {
$options = '';
foreach ( $init as $k => $v ) {
if ( is_bool($v) ) {
$val = $v ? 'true' : 'false';
$options .= $k . ':' . $val . ',';
continue;
} elseif ( !empty($v) && is_string($v) && ( ('{' == $v{0} && '}' == $v{strlen($v) - 1}) || ('[' == $v{0} && ']' == $v{strlen($v) - 1}) || preg_match('/^\(?function ?\(/', $v) ) ) {
$options .= $k . ':' . $v . ',';
continue;
}
$options .= $k . ':"' . $v . '",';
}
return '{' . trim( $options, ' ,' ) . '}';
}
}
......@@ -16,5 +16,6 @@ function ninja_forms_edit_field_output_ul( $form_id ){
?>
</ul>
</div>
<?php
<?php
}
\ No newline at end of file
......@@ -90,7 +90,7 @@ function nf_v27_upgrade_subs_to_cpt() {
ignore_user_abort( true );
if ( ! nf_is_func_disabled( 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
set_time_limit( 0 );
//set_time_limit( 0 );
}
$step = isset( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
......
......@@ -375,4 +375,16 @@ function ninja_forms_get_csv_terminator() {
*/
function ninja_forms_save_sub() {
nf_save_sub();
}
\ No newline at end of file
}
function nf_change_all_forms_filter( $cap ) {
return apply_filters( 'ninja_forms_admin_menu_capabilities', $cap );
}
add_filter( 'ninja_forms_admin_all_forms_capabilities', 'nf_change_all_forms_filter' );
function nf_change_admin_menu_filter( $cap ) {
return apply_filters( 'ninja_forms_admin_menu_capabilities', $cap );
}
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'nf_change_admin_menu_filter' );
\ No newline at end of file
......@@ -57,14 +57,26 @@ add_filter('the_content', 'ninja_forms_pre_process_shortcode', 9999);
* @since 2.7
* @return string $content
*/
function nf_sub_seq_num_shortcode( $atts = array() ) {
function nf_sub_seq_num_shortcode( $sub_id ) {
global $ninja_forms_processing;
$sub_id = $ninja_forms_processing->get_form_setting( 'sub_id' );
if ( $sub_id == '' ) {
return '';
} else {
return Ninja_Forms()->sub( $sub_id )->get_seq_num();
}
$seq_num = Ninja_Forms()->sub( $sub_id )->get_seq_num();
//Get the form settings for the form currently being processed.
$admin_subject = $ninja_forms_processing->get_form_setting( 'admin_subject' );
$user_subject = $ninja_forms_processing->get_form_setting( 'user_subject' );
$success_msg = $ninja_forms_processing->get_form_setting( 'success_msg' );
$admin_email_msg = $ninja_forms_processing->get_form_setting( 'admin_email_msg' );
$user_email_msg = $ninja_forms_processing->get_form_setting( 'user_email_msg' );
$save_msg = $ninja_forms_processing->get_form_setting( 'save_msg' );
$ninja_forms_processing->update_form_setting( 'admin_subject', str_replace( '[nf_sub_seq_num]', $seq_num, $admin_subject ) );
$ninja_forms_processing->update_form_setting( 'user_subject', str_replace( '[nf_sub_seq_num]', $seq_num, $user_subject ) );
$ninja_forms_processing->update_form_setting( 'success_msg', str_replace( '[nf_sub_seq_num]', $seq_num, $success_msg ) );
$ninja_forms_processing->update_form_setting( 'admin_email_msg', str_replace( '[nf_sub_seq_num]', $seq_num, $admin_email_msg ) );
$ninja_forms_processing->update_form_setting( 'user_email_msg', str_replace( '[nf_sub_seq_num]', $seq_num, $user_email_msg ) );
$ninja_forms_processing->update_form_setting( 'save_msg', str_replace( '[nf_sub_seq_num]', $seq_num, $save_msg ) );
}
add_shortcode( 'nf_sub_seq_num', 'nf_sub_seq_num_shortcode' );
\ No newline at end of file
add_action( 'nf_save_sub', 'nf_sub_seq_num_shortcode' );
\ No newline at end of file
......@@ -1031,16 +1031,14 @@ function ninja_forms_new_field_response( response ){
placeholder: "ui-state-highlight",
});
}
if(typeof response.edit_options != 'undefined'){
for(var i = 0; i < response.edit_options.length; i++){
if(response.edit_options[i].type == 'rte'){
var editor_id = 'ninja_forms_field_' + response.new_id + '[' + response.edit_options[i].name + ']';
tinyMCE.execCommand( 'mceRemoveControl', false, editor_id );
tinyMCE.execCommand( 'mceAddControl', true, editor_id );
}
}
if ( typeof nf_ajax_rte_editors !== 'undefined' ) {
for (var x = nf_ajax_rte_editors.length - 1; x >= 0; x--) {
var editor_id = nf_ajax_rte_editors[x];
tinyMCE.init( tinyMCEPreInit.mceInit[ editor_id ] );
try { quicktags( tinyMCEPreInit.qtInit[ editor_id ] ); } catch(e){}
};
}
jQuery(".ninja-forms-field-conditional-cr-field").each(function(){
jQuery(this).append('<option value="' + response.new_id + '">' + response.new_type + '</option>');
});
......
This diff is collapsed.
......@@ -3,7 +3,7 @@
Plugin Name: Ninja Forms
Plugin URI: http://ninjaforms.com/
Description: Ninja Forms is a webform builder with unparalleled ease of use and features.
Version: 2.7.6
Version: 2.7.7
Author: The WP Ninjas
Author URI: http://ninjaforms.com
Text Domain: ninja-forms
......@@ -222,7 +222,7 @@ class Ninja_Forms {
// Plugin version
if ( ! defined( 'NF_PLUGIN_VERSION' ) ) {
define( 'NF_PLUGIN_VERSION', '2.7.6' );
define( 'NF_PLUGIN_VERSION', '2.7.7' );
}
// Plugin Folder Path
......
......@@ -3,7 +3,7 @@ Contributors: kstover, jameslaws, daveshine, mordauk, bftrick, helgatheviking
Tags: form, forms, contact form, custom form, form builder, form creator, form manager, form creation, contact forms, custom forms, forms builder, forms creator, forms manager, forms creation, form administration,
Requires at least: 3.7
Tested up to: 3.9.2
Stable tag: 2.7.6
Stable tag: 2.7.7
License: GPLv2 or later
Forms created with a simple drag and drop interface. Contact forms, Email collection forms, or any other form you want on your WordPress site.
......@@ -76,19 +76,27 @@ For help and video tutorials, please visit our website: [Ninja Forms Documentati
== Upgrade Notice ==
= 2.7.6 (12 August 2014) =
= 2.7.7 (19 August 2014) =
*Bugs:*
* On the submissions table, the filter will now use the earliest date as the begin date.
* Fixing a bug with editing submissions with specific field combinations.
*Changes:*
* Submission CSS should now only enqueue on the submission page.
* Added the ability to download all submissions for a particular form.
* Fixed a bug with the submissions permissions filter. It should now function properly.
* Added a step processor that can be extended and used by developers.
* Fixed a bug with some servers caused by calling the set_time_limit() function.
* Added new extensions to the add-ons page.
* The [nf_sub_seq_num] shortcode should now always function properly.
* Fixed an invalid argument error when viewing a the submissions table.
* Rich Text Editors should now render properly when they are added to a form.
*Changes:*
* Added a new filter to the admin menu capabilities. Deprecated older versions.
== Requested Features ==
......@@ -96,6 +104,28 @@ If you have any feature requests, please feel free to visit [ninjaforms.com](htt
== Changelog ==
= 2.7.7 (19 August 2014) =
*Bugs:*
* Fixing a bug with editing submissions with specific field combinations.
* Submission CSS should now only enqueue on the submission page.
* Fixed a bug with the submissions permissions filter. It should now function properly.
* Fixed a bug with some servers caused by calling the set_time_limit() function.
* The [nf_sub_seq_num] shortcode should now always function properly.
* Fixed an invalid argument error when viewing a the submissions table.
* Rich Text Editors should now render properly when they are added to a form.
*Changes:*
* Added a new filter to the admin menu capabilities. Deprecated older versions.
= 2.7.6 (12 August 2014) =
*Bugs:*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment