domain = 'advanced-flamingo';
$this->option_key = 'ufa_options';
$this->flamingo_inbound_page = 'flamingo_page_flamingo_inbound';
$this->options = $this->ufa_get_options();
add_action('admin_init', array($this, 'ufa_plugin_required'));
// functions
$this->ufa_settings_page();
$this->ufa_list_tables();
$this->ufa_address_book();
$this->ufa_admin_menulabel();
}
/**
* Require Flamingo
*/
function ufa_plugin_required() {
if (is_admin() && current_user_can('activate_plugins') && !in_array('flamingo/flamingo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_action('admin_notices', array($this, 'ufa_plugin_required_message'));
deactivate_plugins(plugin_basename(__FILE__));
if (isset($_GET['activate'])) unset($_GET['activate']);
} else {
add_filter('plugin_action_links_'.plugin_basename(__FILE__), array($this, 'ufa_render_plugin_action_links'), 10, 1);
$this->ufa_submit_settings_data();
}
}
function ufa_plugin_required_message() {
_e('
Sorry, but Advanced Flamingo requires Flamingo plugin to be installed and active.
');
}
function ufa_render_plugin_action_links($links = array()) {
array_unshift($links, ''.__('Settings').'');
return $links;
}
/**
* Functions
*/
function ufa_get_options() {
return get_option($this->option_key, $this->ufa_get_default_options());
}
function ufa_get_default_options() {
return array(
'address_book' => 1,
'inbound_data' => 0,
'menu_label' => '',
'menu_pos' => 0,
);
}
function ufa_update_options($values) {
return update_option($this->option_key, $values);
}
function ufa_settings_page() {
add_action('admin_menu', array($this, 'ufa_register_settings_pages'));
}
/**
* Settings screen
*/
function ufa_register_settings_pages() {
add_submenu_page('flamingo', 'Advanced Flamingo', 'Advanced Flamingo', 'manage_options', $this->domain, array($this, 'ufa_render_settings_page'));
}
function ufa_render_settings_page() {
$this->ufa_render_settings_page_header();
$this->ufa_render_settings_view('options');
$this->ufa_render_settings_page_footer();
}
function ufa_render_settings_view($file_name = '', $once = true) {
$file = trailingslashit(plugin_dir_path( __FILE__ )).'views/'.$file_name.'.php';
if (file_exists($file)) {
if ($once) require_once($file);
else require($file);
}
}
function ufa_render_settings_page_header() {
global $ufa_options;
// css
wp_enqueue_style('bootstrap', plugins_url($this->domain.'/assets/css/bootstrap.min.css'), array(), null, 'all');
wp_enqueue_style('admin-ufa', plugins_url($this->domain.'/assets/css/admin.css'), array(), null, 'all');
// js
wp_enqueue_script('bootstrap', plugins_url($this->domain.'/assets/js/bootstrap.bundle.min.js'), array('jquery'), true);
wp_enqueue_script('admin-ufa', plugins_url($this->domain.'/assets/js/admin.js'), array('jquery'), true);
$ufa_options = $this->options;
}
function ufa_render_settings_page_footer() {
}
function ufa_submit_settings_data() {
global $ufa_options;
if (!is_admin()) return;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['submit_ufa'])) {
$post_data = array();
if (isset($_POST['address_book'])) $post_data['address_book'] = (int) $_POST['address_book'];
if (isset($_POST['inbound_data'])) $post_data['inbound_data'] = (int) $_POST['inbound_data'];
if (isset($_POST['menu_pos'])) $post_data['menu_pos'] = (int) $_POST['menu_pos'];
if (isset($_POST['menu_label'])) $post_data['menu_label'] = sanitize_text_field($_POST['menu_label']);
if ($post_data['address_book'] === 0) $post_data['menu_pos'] = 0;
$this->options = array_replace($this->options, $post_data);
$this->ufa_update_options($this->options);
$ufa_options = $this->options;
// reload page after saving
wp_redirect(admin_url('admin.php?page='.$this->domain));
exit;
}
}
}
/**
* Address book
*/
function ufa_address_book() {
if ($this->options['address_book'] === 1) {
// menu change
add_action('admin_menu' , array($this, 'ufa_manage_flamingo_admin_menu'), 10);
} else {
// remove hook function from flamingo
remove_action('profile_update', 'flamingo_user_profile_update');
remove_action('user_register', 'flamingo_user_profile_update');
remove_action('wp_insert_comment', 'flamingo_insert_comment');
remove_action('transition_comment_status', 'flamingo_transition_comment_status', 10);
// menu change
add_action('admin_menu' , array($this, 'ufa_manage_flamingo_admin_menu_hide'), 10);
// null data
add_filter('flamingo_add_contact', array($this, 'ufa_null_contact'), 10, 1);
}
}
function ufa_manage_flamingo_admin_menu() {
global $menu, $submenu;
if ($this->options['menu_pos'] === 0) return;
if (count($submenu) > 0 && isset($submenu['flamingo'])) {
$temp_item = array();
$temp_submenu = array();
foreach ($submenu['flamingo'] as $i => $submenu_item) {
if ($submenu_item[2] == 'flamingo') {
$temp_item = $submenu_item;
} else if ($submenu_item[2] == 'flamingo_inbound') {
$temp_submenu[] = $submenu_item;
$temp_submenu[] = $temp_item;
} else {
$temp_submenu[] = $submenu_item;
}
}
$submenu['flamingo'] = $temp_submenu;
}
}
function ufa_manage_flamingo_admin_menu_hide() {
global $menu, $submenu;
if (count($submenu) > 0 && isset($submenu['flamingo'])) {
foreach ($submenu['flamingo'] as $i => $submenu_item) {
if ($submenu_item[2] == 'flamingo') {
unset($submenu['flamingo'][$i]);
break;
}
}
}
}
function ufa_null_contact($args = array()) {
return array(
'email' => '',
'name' => '',
'props' => array(),
);
}
/**
* Change admin menu label
*/
function ufa_admin_menulabel() {
$menu_label = sanitize_text_field($this->options['menu_label']);
if (empty($menu_label)) return;
add_action('admin_menu' , array($this, 'ufa_manage_flamingo_admin_menu_label'), 10);
}
function ufa_manage_flamingo_admin_menu_label() {
global $menu;
$menu_label = sanitize_text_field($this->options['menu_label']);
if (count($menu) > 0) {
foreach ($menu as $i => $menu_item) {
if ($menu_item[0] == 'Flamingo') {
$menu[$i][0] = ucfirst($menu_label);
break;
}
}
}
}
/**
* Rendering data for inbound screen
*/
function ufa_list_tables() {
if ($this->options['inbound_data'] !== 1) return;
// inbound list table
add_filter('hidden_columns', array($this, 'ufa_hidden_columns'), 30, 3);
add_filter('manage_flamingo_inbound_posts_columns', array($this, 'ufa_manage_flamingo_inbound_posts_columns'), 30, 1);
add_action('manage_flamingo_inbound_posts_custom_column' , array($this, 'ufa_manage_flamingo_inbound_posts_custom_column'), 10, 2);
}
function ufa_hidden_columns($hidden = array(), $screen = '', $use_defaults) {
if ($screen->id !== $this->flamingo_inbound_page) return $hidden;
$user_id = get_current_user_id();
$columnshidden = get_user_meta($user_id, 'manage'.$this->flamingo_inbound_page.'columnshidden', true);
if ($columnshidden) return (array) $columnshidden;
else return $hidden;
}
function ufa_manage_flamingo_inbound_posts_columns($columns = array()) {
unset($columns['date']);
$columns['ufa_fields'] = __('Field form');
$columns['date'] = __('Date');
return $columns;
}
function ufa_manage_flamingo_inbound_posts_custom_column($column = '', $post_id = 0) {
if ($column !== 'ufa_fields') return; // ufa_fields only
echo $this->ufa_render_ufa_fields($post_id);
}
function ufa_render_ufa_fields($post_id = 0) {
$inbound = $this->ufa_get_inbound_obj($post_id);
if (empty($inbound)) return '';
ob_start(); ?>
fields as $key => $value) { ?>
channel;
if (empty($inbound)) return '';
$flamingo_fields = wp_cache_get($cache_key);
if ($flamingo_fields === false) {
$flamingo_fields_enabled = array();
$flamingo_fields_disabled = array();
$channel = get_term_by('slug', $inbound->channel, Flamingo_Inbound_Message::channel_taxonomy);
if ($channel) {
$cid = $wpdb->get_var(
$wpdb->prepare('SELECT post_id FROM '.$wpdb->postmeta.' WHERE meta_key = %s AND meta_value LIKE %s', '_flamingo', '%:'.esc_sql($channel->term_id).';%')
);
if ($cid > 0) {
$cf = wpcf7_contact_form($cid);
$flamingo_fields_enabled = $cf->additional_setting('flamingo_fields_enabled');
$flamingo_fields_disabled = $cf->additional_setting('flamingo_fields_disabled');
if (count($flamingo_fields_enabled) > 0) {
$flamingo_fields_enabled = trim($flamingo_fields_enabled[0], '"');
$flamingo_fields_enabled = array_map('trim', explode(',', $flamingo_fields_enabled));
}
if (count($flamingo_fields_disabled) > 0) {
$flamingo_fields_disabled = trim($flamingo_fields_disabled[0], '"');
$flamingo_fields_disabled = array_map('trim', explode(',', $flamingo_fields_disabled));
}
if (count($flamingo_fields_enabled) > 0 && count($flamingo_fields_disabled) > 0) {
$flamingo_fields_enabled = array();
$flamingo_fields_disabled = array();
}
}
// cache fields
$flamingo_fields = array(
'enabled' => $flamingo_fields_enabled,
'disabled' => $flamingo_fields_disabled,
);
wp_cache_set($cache_key, $flamingo_fields, '', 10);
}
}
// hidden fields
$inbound_fields = $inbound->fields;
foreach ($inbound_fields as $key => $value) {
if (count($flamingo_fields['enabled']) > 0) {
if (!in_array($key, $flamingo_fields['enabled']) && !in_array('['.$key.']', $flamingo_fields['enabled'])) unset($inbound_fields[$key]);
} else if (count($flamingo_fields['disabled']) > 0) {
if (in_array($key, $flamingo_fields['disabled']) || in_array('['.$key.']', $flamingo_fields['disabled'])) unset($inbound_fields[$key]);
}
}
$inbound->fields = $inbound_fields;
return $inbound;
}
}
new Advanced_Flamingo();
}