Created
February 26, 2013 23:37
-
-
Save thinkstylestudio/5043417 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
Plugin Name: Gravity Forms - Orange44 Customizations | |
Plugin URI: | |
Description: | |
Version: 0.1 | |
Author: Think Style Studio | |
Author URI: http://thinkstylestudio.com | |
License: GPL2 | |
------------------------------------------------------------------------ | |
Copyright 2012 Think Style Studio | |
This program is free software; you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
the Free Software Foundation; either version 2 of the License, or | |
(at your option) any later version. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU General Public License for more details. | |
You should have received a copy of the GNU General Public License | |
along with this program; if not, write to the Free Software | |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
*/ | |
use Validator\FormValidator; | |
include_once __DIR__ . '/packages/autoload.php'; | |
/**************************************** | |
* Global Variables | |
*****************************************/ | |
/**************************************** | |
* Includes | |
*****************************************/ | |
//require_once dirname( __FILE__ ) . '/includes/capabilities.php'; | |
if (!class_exists('RGForms')) { | |
@include_once(WP_PLUGIN_DIR . '/gravityforms/gravityforms.php'); // this is gravity forms main class | |
} | |
if (!class_exists('RGFormsModel')) { | |
@include_once(WP_PLUGIN_DIR . '/gravityforms/forms_model.php'); // this is for retreiving all forms | |
} | |
if (!class_exists('GFCommon')) { | |
@include_once(WP_PLUGIN_DIR . '/gravityforms/common.php'); | |
} | |
if (!class_exists('GFExport')) { | |
@include_once(WP_PLUGIN_DIR . '/gravityforms/export.php'); // this exports entries | |
} | |
@include_once( | |
WP_PLUGIN_DIR . '/gravityforms/tooltips.php'); // this isso the tool tips work outside of the gravity form plugin | |
if (!class_exists('gravity_forms_orange44_customizations')) { | |
/* view_render.php */ | |
class gravity_forms_orange44_customizations | |
{ | |
private static $orange44_options; | |
private static $slug_to_email = "orange44_settings_to_email"; | |
private static $slug_export = "orange44_settings_export"; | |
private static $version = "1.3"; | |
private static $min_gravityforms_version = "1.3.9"; | |
private static $plugin_id = "orange44"; | |
function __construct() | |
{ | |
add_action('admin_init', 'register_settings'); | |
//load plugin settings | |
if (!self::is_gravityforms_supported()) { | |
return; | |
} | |
if (FALSE !== strpos(__FILE__, MUPLUGINDIR)) { | |
add_action('admin_init', array($this, 'um_unfilter_roles_one_time'), 100); | |
} | |
add_action( | |
"gform_notification_email", | |
array($this, "change_notification_email"), | |
10, | |
2 | |
); | |
add_filter('map_meta_cap', 'um_unfilter_multisite', 10, 4); | |
//set the priority so this is called after the menu had been built | |
if (is_admin()) { | |
self::$orange44_options = get_option(self::$plugin_id . '_settings'); | |
add_filter( | |
"gform_addon_navigation", | |
array($this, 'create_export_page_menu') | |
); | |
add_filter( | |
"gform_addon_navigation", | |
array($this, 'create_to_email_page_menu') | |
); | |
add_action('admin_menu', 'remove_admin_sub_menu'); | |
add_action('admin_print_scripts', array($this, 'enqueue_scripts')); | |
} | |
} | |
// Add the unfiltered_html capability back in to WordPress 3.0 multisite. | |
function um_unfilter_multisite($caps, $cap, $user_id, $args) | |
{ | |
switch ($cap) { | |
case "orange44_export": | |
$caps = $this->unset_caps($caps, $cap); | |
break; | |
case "orange44_email_to_overide": | |
$caps = $this->unset_caps($caps, $cap); | |
break; | |
case "gravityforms_view_entries": | |
$caps = $this->unset_caps($caps, $cap); | |
break; | |
} | |
return $caps; | |
} | |
/** | |
* @param $caps | |
* @param $cap | |
* | |
* @return array | |
*/ | |
protected function unset_caps($caps, $cap) | |
{ | |
unset($caps); | |
$caps[] = $cap; | |
return $caps; | |
} | |
function set_roles_and_capabilities() | |
{ | |
global $wp_roles; | |
$wp_roles->remove_cap('clientexport', 'orange44_export'); | |
$wp_roles->remove_cap('clientexport', 'orange44_email_to_overide'); | |
$wp_roles->remove_cap('clientexport', 'gravityforms_view_entries'); | |
$wp_roles->remove_cap('clientexport', 'read'); | |
$wp_roles->remove_cap('clientexport', 'gravityforms_edit_settings'); | |
$wp_roles->add_cap('clientexport', 'orange44_export'); | |
$wp_roles->add_cap('clientexport', 'orange44_email_to_overide'); | |
$wp_roles->add_cap('clientexport', 'gravityforms_view_entries'); | |
$wp_roles->add_cap('clientexport', 'read'); | |
$user = wp_get_current_user(); | |
$user->get_role_caps(); | |
// var_dump($wp_roles->role_objects["clientexport"],$wp_roles->roles["clientexport"],$user); | |
} | |
// function run_once($key){ | |
// $test_case = get_option('run_once'); | |
// if (isset($test_case[$key]) && $test_case[$key]){ | |
// return false; | |
// }else{ | |
// $test_case[$key] = true; | |
// update_option('run_once',$test_case); | |
// return true; | |
// } | |
// } | |
function um_unfilter_roles_one_time() | |
{ | |
get_role('clientexport'); | |
global $wp_roles, $current_user; | |
// $use_db = $wp_roles->use_db; | |
// $wp_roles->use_db = TRUE; // Don't store in db. Just do a one off mod to the role. | |
$this->set_roles_and_capabilities(); // Add caps for this page load only: - ^^^^^^^ | |
// $wp_roles->use_db = $use_db; | |
if (is_user_logged_in()) { // Re-prime the current user's caps | |
$current_user->_init_caps(); | |
} | |
} | |
public static function create_to_email_page_menu($menus) | |
{ | |
// Adding submenu if user has access | |
$permission = self::has_access("orange44_email_to_overide"); // TODO: Add Capability | |
if (!empty($permission)) { | |
$menus[] = array( | |
"name" => "orange44_settings_email_to", | |
"label" => __("Email To", "gravityformscustomized"), | |
"callback" => array('gravity_forms_orange44_customizations', "orange44_email_to_page"), | |
"permission" => $permission | |
); | |
} | |
return $menus; | |
} | |
//Creates Orange44 left nav menu under Forms | |
public static function create_export_page_menu($menus) | |
{ | |
// Adding submenu if user has access | |
$permission = self::has_access("orange44_export"); // TODO: Add Capability | |
if (!empty($permission)) { | |
$menus[] = array( | |
"name" => "orange44_settings_export", | |
"label" => __("Export Entries", "gravityformscustomized"), | |
"callback" => array('gravity_forms_orange44_customizations', "export_page"), | |
"permission" => $permission | |
); | |
} | |
return $menus; | |
} | |
public static function orange44_email_to_page() | |
{ | |
$forms = RGFormsModel::get_forms(NULL, "title"); | |
$array_directory = "orange44_settings"; | |
$array_label = "orange44_to_email"; | |
if (isset($_POST['my_submit'])) { | |
if (is_array($forms)) { | |
foreach ($forms as $form) { | |
$form_id = absint($form->id); | |
$field_label = $array_label . "_" . $form_id; | |
$notification_emails = $_POST[$field_label]; | |
if (empty($notification_emails)) { | |
self::update_notification_form_meta( | |
$form_id, | |
$array_label, | |
$notification_emails, | |
$array_directory | |
); | |
} else if (self::is_valid_notification_email($notification_emails)) { | |
$notification_emails = sanitize_text_field($notification_emails); | |
self::update_notification_form_meta( | |
$form_id, | |
$array_label, | |
$notification_emails, | |
$array_directory | |
); | |
} | |
} | |
} else { | |
echo "error loading forms"; | |
} | |
} | |
?> | |
<div class="wrap"> | |
<h2>Orange44 Email Notification Settings</h2> | |
<?php if (isset($_POST['my_submit'])) : ?> | |
<div id="message" class="updated fade"> | |
<p> | |
<?php _e('Settings Saved', 'my') ?> | |
</p> | |
</div> | |
<?php endif; ?> | |
<form method="post" action=""> | |
<?php settings_fields(self::$slug_to_email); | |
foreach ($forms as $form) : | |
$form_id = absint($form->id); | |
$field_label = "orange44_to_email_" . $form_id; ?> | |
<hr> | |
<h3 style="text-transform: capitalize; "><?= esc_html($form->title) . " Form" ?> | |
</h3> | |
<?php do_settings_sections(self::$slug_to_email); | |
$form_meta_value = RGFormsModel::get_form_meta($form_id); | |
$field_value = $form_meta_value[$array_directory][$array_label]; | |
?> | |
<p> | |
<?php if ($form_meta_value["notification"]["to"]) { ?> | |
Currently Notification is set to: | |
<strong><?= $form_meta_value["notification"]["to"]; ?> </strong> | |
<?php | |
} else { | |
?> | |
Currently Notification is not set. | |
<?php } ?> | |
</p> | |
<p> | |
<label for='<?=$field_label?>'>Email To:</label> | |
<input style='width:75%;' value='<?=$field_value?>' name='<?=$field_label?>' type='text'> | |
</p> | |
<?php endforeach; ?> | |
<p> | |
<input name="my_submit" type="submit" class="button-primary" value="<?php _e( | |
'Save Changes' | |
) ?>" /> | |
</p> | |
</form> | |
</div><!-- /.wrap --> | |
<?php | |
} | |
private static function update_notification_form_meta( | |
$form_id, | |
$array_label, | |
$notification_emails, | |
$array_directory | |
) { | |
$form_meta = RGFormsModel::get_form_meta($form_id); | |
$form_meta[$array_directory] = array($array_label => $notification_emails); | |
//Add more orange44_form_meta[FIELDNAME] to form for more fields | |
RGFormsModel::update_form_meta($form_id, $form_meta); | |
} | |
public static function export_page() | |
{ | |
?> | |
<div class="wrap"> | |
<h2>Orange44 Email Notification Settings</h2> | |
<?php self::export_lead_page(); ?> | |
</div><!-- /.wrap --> | |
<?php | |
} | |
//Returns true if the current page is an Feed pages. Returns false if not | |
private static function is_custom_export_entries_page() | |
{ | |
$current_page = trim(strtolower(rgget("page"))); | |
$orange44_setting_pages = array("orange44_settings_export", "orange44_settings_email_to"); | |
return in_array($current_page, $orange44_setting_pages); | |
} | |
private static function is_gravityforms_supported() | |
{ | |
if (class_exists("GFCommon")) { | |
$is_correct_version = version_compare( | |
GFCommon::$version, | |
self::$min_gravityforms_version, | |
">=" | |
); | |
return $is_correct_version; | |
} else { | |
return FALSE; | |
} | |
} | |
protected static function has_access($required_permission) | |
{ | |
// _log("required permission" . $required_permission); | |
$has_members_plugin = function_exists( 'members_get_capabilities'); | |
// _log("has member plugin" . $has_members_plugin); | |
// TODO: Check what this is spitting out. | |
$has_access = $has_members_plugin | |
? current_user_can($required_permission) | |
: current_user_can( | |
"level_7" | |
); | |
// _log("has access" . $has_access) ; | |
if ($has_access) { | |
return $has_members_plugin ? $required_permission | |
: "level_7"; // if members plugin exists send required permission otherwise send level_7 | |
} else { | |
return FALSE; | |
} | |
} | |
public function enqueue_scripts() | |
{ | |
wp_enqueue_script("sack"); | |
} | |
protected static function register_settings() | |
{ | |
register_setting('orange44_settings_group', self::$slug_export); | |
register_setting('orange44_settings_group', self::$slug_to_email); | |
} | |
function change_notification_email($email, $entry) | |
{ | |
$form = RGFormsModel::get_form_meta($entry['form_id']); | |
if (!empty($form['orange44_settings']['orange44_to_email'])) { | |
$email = $form['orange44_settings']['orange44_to_email']; | |
} | |
return $email; | |
} | |
public static function export_lead_page() | |
{ | |
?> | |
<script type='text/javascript' src='<?php echo GFCommon::get_base_url( | |
)?>/js/jquery-ui/ui.datepicker.js?ver=<?php echo GFCommon::$version ?>'></script> | |
<script type="text/javascript"> | |
function SelectExportForm(formId) { | |
if (!formId) | |
return; | |
var mysack = new sack("<?php echo admin_url("admin-ajax.php")?>"); | |
mysack.execute = 1; | |
mysack.method = 'POST'; | |
mysack.setVar("action", "rg_select_export_form"); | |
mysack.setVar("rg_select_export_form", "<?php echo wp_create_nonce( | |
"rg_select_export_form" | |
) ?>"); | |
mysack.setVar("form_id", formId); | |
mysack.onError = function () { | |
alert('<?php echo esc_js(__("Ajax error while selecting a form", "gravityforms")) ?>') | |
}; | |
mysack.runAJAX(); | |
return true; | |
} | |
function EndSelectExportForm(aryFields) { | |
if (aryFields.length == 0) { | |
jQuery("#export_field_container, #export_date_container, #export_submit_container").hide() | |
return; | |
} | |
var fieldList = "<li><input type='checkbox' onclick=\"jQuery('.gform_export_field').attr('checked', this.checked); jQuery('#gform_export_check_all').html(this.checked ? '<strong><?php _e( | |
"Deselect All", | |
"gravityforms" | |
) ?></strong>' : '<strong><?php _e( | |
"Select All", | |
"gravityforms" | |
) ?></strong>'); \"> <label id='gform_export_check_all'><strong><?php _e( | |
"Select All", | |
"gravityforms" | |
) ?></strong></label></li>"; | |
for (var i = 0; i < aryFields.length; i++) { | |
fieldList += "<li><input type='checkbox' id='export_field_" + i + "' name='export_field[]' value='" + aryFields[i][0] + "' class='gform_export_field'> <label for='export_field_" + i + "'>" + aryFields[i][1] + "</label></li>"; | |
} | |
jQuery("#export_field_list").html(fieldList); | |
jQuery("#export_date_start, #export_date_end").datepicker({dateFormat: 'yy-mm-dd'}); | |
jQuery("#export_field_container, #export_date_container, #export_submit_container").hide().show(); | |
} | |
</script> | |
<link rel="stylesheet" href="<?php echo GFCommon::get_base_url()?>/css/admin.css" /> | |
<div class="wrap"> | |
<div class="icon32" id="gravity-export-icon"><br></div> | |
<p class="textleft"><?php _e( | |
"Select a form below to export entries. Once you have selected a form you may select the fields you would like to export and an optional date range. When you click the download button below, It will create a CSV file for you to save to your computer.", | |
"gravityforms" | |
); ?></p> | |
<div class="hr-divider"></div> | |
<form method="post" style="margin-top:10px;"> | |
<?php echo wp_nonce_field("rg_start_export", "rg_start_export_nonce"); ?> | |
<table class="form-table"> | |
<tr valign="top"> | |
<th scope="row"><label for="export_form"><?php _e( | |
"Select A Form", | |
"gravityforms" | |
); ?></label> <?php gform_tooltip("export_select_form") ?></th> | |
<td> | |
<select id="export_form" name="export_form" onchange="SelectExportForm(jQuery(this).val());"> | |
<option value=""><?php _e("Select a form", "gravityforms"); ?></option> | |
<?php | |
$forms = RGFormsModel::get_forms(NULL, "title"); | |
foreach ($forms as $form) { | |
?> | |
<option value="<?php echo absint($form->id) ?>"><?php echo esc_html( | |
$form->title | |
) ?></option> | |
<?php | |
} | |
?> | |
</select> | |
</td> | |
</tr> | |
<tr id="export_field_container" valign="top" style="display: none;"> | |
<th scope="row"><label for="export_fields"><?php _e( | |
"Select Fields", | |
"gravityforms" | |
); ?></label> <?php gform_tooltip("export_select_fields") ?></th> | |
<td> | |
<ul id="export_field_list"> | |
</ul> | |
</td> | |
</tr> | |
<tr id="export_date_container" valign="top" style="display: none;"> | |
<th scope="row"><label for="export_date"><?php _e( | |
"Select Date Range", | |
"gravityforms" | |
); ?></label> <?php gform_tooltip("export_date_range") ?></th> | |
<td> | |
<div> | |
<span style="width:150px; float:left; "> | |
<input type="text" id="export_date_start" name="export_date_start" style="width:90%" /> | |
<strong><label for="export_date_start" style="display:block;"><?php _e( | |
"Start", | |
"gravityforms" | |
); ?></label></strong> | |
</span> | |
<span style="width:150px; float:left;"> | |
<input type="text" id="export_date_end" name="export_date_end" style="width:90%" /> | |
<strong><label for="export_date_end" style="display:block;"><?php _e( | |
"End", | |
"gravityforms" | |
); ?></label></strong> | |
</span> | |
<div style="clear: both;"></div> | |
<?php _e( | |
"Date Range is optional, if no date range is selected all entries will be exported.", | |
"gravityforms" | |
); ?> | |
</div> | |
</td> | |
</tr> | |
</table> | |
<ul> | |
<li id="export_submit_container" style="display:none; clear:both;"> | |
<br /><br /> | |
<input type="submit" name="export_lead" value="<?php _e( | |
"Download Export File", | |
"gravityforms" | |
); ?>" class="button-primary" /> | |
<span id="please_wait_container" style="display:none; margin-left:15px;"> | |
<img src="<?= GFCommon::get_base_url()?>/images/loading.gif"> <?php _e( | |
"Exporting entries. Please wait...", | |
"gravityforms" | |
); ?> | |
</span> | |
<iframe id="export_frame" width="1" height="1" src="about:blank"></iframe> | |
</li> | |
</ul> | |
</form> | |
</div> | |
<?php | |
} | |
private static function is_valid_notification_email($text) | |
{ | |
if (empty($text)) { | |
return FALSE; | |
} | |
$emails = explode(",", $text); | |
foreach ($emails as $email) { | |
$email = trim($email); | |
$invalid_email = GFCommon::is_invalid_or_empty_email($email); | |
$invalid_variable = !preg_match('/^({[^{]*?:(\d+(\.\d+)?)(:(.*?))?},? *)+$/', $email); | |
if ($invalid_email && $invalid_variable) { | |
return FALSE; | |
} | |
} | |
return TRUE; | |
} | |
function remove_admin_sub_menu() | |
{ | |
//the first parameter is the parent name of the first item in the Forms menu | |
remove_submenu_page("gf_edit_forms", "gf_help"); | |
} | |
} | |
} | |
$GFOrange44Custom = new gravity_forms_orange44_customizations; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment