ID; $crm_only_mode = get_user_meta( $user_id, 'crm_only_mode', TRUE ); if ( $crm_only_mode == '1' ) { $wp_admin_bar->remove_node('new-content'); } } public function crm_only_mode_menu() { $current_user = wp_get_current_user(); $user_id = $current_user->ID; $crm_only_mode = get_user_meta( $user_id, 'crm_only_mode', TRUE ); if ( $crm_only_mode == '1' ) { global $menu, $submenu, $wp_filter; // remove all top-level menu items that isn't the Dashboard foreach ( $menu as $i => $menuitem ) { if ( ( !isset($menuitem[2]) || ( isset($menuitem[2]) && $menuitem[2] != 'index.php' ) ) && apply_filters( 'propertyhive_remove_menu_item_in_crm_only_mode', true, $menuitem ) === true ) { unset($menu[$i]); } } if ( isset($submenu['propertyhive']) ) { unset($submenu['propertyhive'][0]); $position = 5; foreach ( $submenu['propertyhive'] as $submenuitem ) { $callback = ''; if ( substr($submenuitem[2], 0, 3) == 'ph-' ) { $callback = array( $this, substr($submenuitem[2], 3) . '_page' ); } elseif ( isset($wp_filter[sanitize_title(__( 'Property Hive', 'propertyhive' )) . '_page_' . $submenuitem[2]]) ) { // get class name from callbacks then convert it to class name // i.e. convert PH_Property_Import to PHPI() $class_name = ''; $function_name = ''; if ( isset($wp_filter[sanitize_title(__( 'Property Hive', 'propertyhive' )) . '_page_' . $submenuitem[2]]->callbacks) ) { foreach ( $wp_filter[sanitize_title(__( 'Property Hive', 'propertyhive' )) . '_page_' . $submenuitem[2]]->callbacks as $priority => $filter_callbacks ) { foreach ( $filter_callbacks as $oddkey => $filter_callback ) { if ( isset($filter_callback['function']) && count($filter_callback['function']) >= 2 ) { $class_name = get_class($filter_callback['function'][0]); $explode_class_name = explode("_", $class_name); $class_name_bits = array(); foreach ( $explode_class_name as $exploded_class_name_bit ) { if ( $exploded_class_name_bit == 'PH' ) { $class_name_bits[] = $exploded_class_name_bit; } else { $class_name_bits[] = strtoupper(substr($exploded_class_name_bit, 0, 1)); } } $class_name = implode("", $class_name_bits); $function_name = $filter_callback['function'][1]; } } } } if ( class_exists($class_name) && $class_name != '' && $function_name != '' ) { $callback = array( $class_name(), $function_name ); } elseif ( function_exists($class_name) && $class_name != '' && $function_name != '' ) { $callback = array( $class_name(), $function_name ); } } add_menu_page( $submenuitem[3], $submenuitem[0], $submenuitem[1], $submenuitem[2], $callback, $this->get_menu_icon($submenuitem[2]), $position ); $position += 5; } unset($submenu['propertyhive']); } } } /** * Add menu items */ public function admin_menu() { global $menu, $propertyhive; //if ( current_user_can( 'manage_propertyhive' ) ) $menu[] = array( '', 'read', 'separator-propertyhive', '', 'wp-menu-separator propertyhive' ); add_menu_page( __( 'Property Hive', 'propertyhive' ), __( 'Property Hive', 'propertyhive' ), 'manage_propertyhive', 'propertyhive' , array( $this, 'settings_page' ), $this->get_menu_icon(), '54.5' ); add_submenu_page( 'propertyhive', __( 'Properties', 'propertyhive' ), __( 'Properties', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=property'/*, array( $this, 'attributes_page' )*/ ); if ( get_option('propertyhive_module_disabled_contacts', '') != 'yes' ) { add_submenu_page( 'propertyhive', __( 'Property Owners and Landlords', 'propertyhive' ), __( 'Owners & Landlords', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=contact&_contact_type=owner'/*, array( $this, 'attributes_page' )*/ ); add_submenu_page( 'propertyhive', __( 'Applicants', 'propertyhive' ), __( 'Applicants', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=contact&_contact_type=applicant'/*, array( $this, 'attributes_page' )*/ ); add_submenu_page( 'propertyhive', __( 'Third Party Contacts', 'propertyhive' ), __( 'Third Party Contacts', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=contact&_contact_type=thirdparty'/*, array( $this, 'attributes_page' )*/ ); } if ( get_option('propertyhive_module_disabled_enquiries', '') != 'yes' ) { $count = ''; if ( apply_filters( 'propertyhive_show_admin_menu_enquiry_count', TRUE ) === TRUE ) { $args = array( 'post_type' => 'enquiry', 'nopaging' => true, 'fields' => 'ids', 'meta_query' => array( array( 'key' => '_status', 'value' => 'open' ), array( 'key' => '_negotiator_id', 'value' => '' ), ), ); $args = apply_filters( 'propertyhive_admin_menu_enquiry_count_args', $args ); $enquiry_query = new WP_Query( $args ); if ( $enquiry_query->have_posts() ) { $count = ' ' . $enquiry_query->found_posts . ''; } } add_submenu_page( 'propertyhive', __( 'Enquiries', 'propertyhive' ), __( 'Enquiries', 'propertyhive' ) . $count, 'manage_propertyhive', 'edit.php?post_type=enquiry'/*, array( $this, 'attributes_page' )*/ ); } if ( get_option('propertyhive_module_disabled_appraisals', '') != 'yes' ) { add_submenu_page( 'propertyhive', __( 'Appraisals', 'propertyhive' ), __( 'Appraisals', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=appraisal'/*, array( $this, 'attributes_page' )*/ ); } if ( get_option('propertyhive_module_disabled_viewings', '') != 'yes' ) { add_submenu_page( 'propertyhive', __( 'Viewings', 'propertyhive' ), __( 'Viewings', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=viewing'/*, array( $this, 'attributes_page' )*/ ); } if ( get_option('propertyhive_module_disabled_offers_sales', '') != 'yes' ) { add_submenu_page( 'propertyhive', __( 'Offers', 'propertyhive' ), __( 'Offers', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=offer'/*, array( $this, 'attributes_page' )*/ ); add_submenu_page( 'propertyhive', __( 'Sales', 'propertyhive' ), __( 'Sales', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=sale'/*, array( $this, 'attributes_page' )*/ ); } if ( get_option( 'propertyhive_active_departments_lettings' ) == 'yes' && get_option('propertyhive_module_disabled_tenancies', '') != 'yes' ) { add_submenu_page( 'propertyhive', __( 'Tenancies', 'propertyhive' ), __( 'Tenancies', 'propertyhive' ), 'manage_propertyhive', 'edit.php?post_type=tenancy'/*, array( $this, 'attributes_page' )*/ ); $count = ''; if ( apply_filters( 'propertyhive_show_admin_menu_key_date_count', TRUE ) === TRUE ) { $args = array( 'post_type' => 'key_date', 'nopaging' => true, 'fields' => 'ids', 'meta_query' => array( array( 'key' => '_key_date_status', 'value' => 'pending' ), array( 'key' => '_date_due', 'value' => date('Y-m-d'), 'type' => 'date', 'compare' => '<=', ), ), ); $args = apply_filters( 'propertyhive_admin_menu_key_date_count_args', $args ); $key_date_query = new WP_Query( $args ); if ( $key_date_query->have_posts() ) { $count = ' ' . $key_date_query->found_posts . ''; } } add_submenu_page( 'propertyhive', __( 'Management', 'propertyhive' ), __( 'Management', 'propertyhive' ) . $count, 'manage_propertyhive', 'edit.php?post_type=key_date&orderby=date_due&order=asc&status=upcoming_and_overdue&filter_action=Filter' ); } if ( get_option('propertyhive_module_disabled_contacts', '') != 'yes' ) { add_submenu_page( '', __( 'Applicant Matching Properties', 'propertyhive'), __( 'Applicant Matching Properties', 'propertyhive' ), 'manage_propertyhive', 'ph-matching-properties', array($this, 'matching_properties_page')); add_submenu_page( '', __( 'Generate Applicant List', 'propertyhive'), __( 'Generate Applicant List', 'propertyhive' ), 'manage_propertyhive', 'ph-generate-applicant-list', array($this, 'generate_applicant_list_page')); add_submenu_page( '', __( 'Applicant Matching Applicants', 'propertyhive'), __( 'Applicant Matching Properties', 'propertyhive' ), 'manage_propertyhive', 'ph-matching-applicants', array($this, 'matching_applicants_page')); add_submenu_page( '', __( 'Merge Duplicate Contacts', 'propertyhive'), __( 'Merge Duplicate Contacts', 'propertyhive' ), 'manage_propertyhive', 'ph-merge-duplicate-contacts', array($this, 'generate_merge_duplicate_contacts_page')); } } /** * Add menu item */ public function import_properties_dummy_menu() { // check clauses if ( !current_user_can( 'manage_options' ) ) { // Not an administrator return; } if ( apply_filters( 'propertyhive_admin_menu_property_import_button', true ) !== true ) { // Manually turned off by filter return; } if ( class_exists('PH_Property_Import') ) { // Already activated. Check can be used if ( apply_filters( 'propertyhive_add_on_can_be_used', true, 'propertyhive-property-import' ) === true ) { // Yes. Import add on is fine to use return; } } // check date installed more than when PRO went live $propertyhive_install_timestamp = get_option( 'propertyhive_install_timestamp', '' ); if ( !empty($propertyhive_install_timestamp) ) { $november_first_2023 = strtotime('2023-11-01 00:00:00'); if ( $propertyhive_install_timestamp < $november_first_2023 ) { // Installed before 1st Nov 2023. Don't show anything return; } } $show_dummy_link = false; $license_type = get_option( 'propertyhive_license_type', '' ); if ( $license_type == '' ) { $show_dummy_link = true; } if ( !$show_dummy_link ) { if ( $license_type == 'old' ) { // Old user. Don't do anything return; } if ( $license_type == 'pro' ) { $license_key = get_option( 'propertyhive_pro_license_key', '' ); if ( empty($license_key) ) { // No license key entered $show_dummy_link = true; } else { if ( PH()->license->is_valid_pro_license_key() ) { // valid license key. return; } else { $show_dummy_link = true; } } } } if ( $show_dummy_link === true ) { add_submenu_page( 'propertyhive', __( 'Import Properties', 'propertyhive' ), __( 'Import Properties', 'propertyhive' ) . 'PRO', 'manage_options', 'ph-import_properties_dummy', array( $this, 'import_properties_dummy_page' ) ); } } public function import_properties_dummy_page() { include_once( 'views/html-import-properties-dummy.php' ); } /** * Add menu item */ public function reports_menu() { add_submenu_page( 'propertyhive', __( 'Reports', 'propertyhive' ), __( 'Reports', 'propertyhive' ) , 'manage_propertyhive', 'ph-reports', array( $this, 'reports_page' ) ); } /** * Add menu item */ public function settings_menu() { $settings_page = add_submenu_page( 'propertyhive', __( 'Property Hive Settings', 'propertyhive' ), __( 'Settings', 'propertyhive' ) , 'manage_options', 'ph-settings', array( $this, 'settings_page' ) ); //add_action( 'load-' . $settings_page, array( $this, 'settings_page_init' ) ); } /** * Loads gateways and shipping methods into memory for use within settings. */ public function settings_page_init() { } /** * Highlights the correct top level admin menu item for post type add screens. * * @access public * @return void */ public function menu_highlight() { global $menu, $submenu, $parent_file, $submenu_file, $self, $post_type, $taxonomy; $current_user = wp_get_current_user(); $user_id = $current_user->ID; $crm_only_mode = get_user_meta( $user_id, 'crm_only_mode', TRUE ); if ( $crm_only_mode == '1' ) { if ( $post_type == 'contact' && isset($_GET['_contact_type']) && !empty(ph_clean($_GET['_contact_type'])) ) { $parent_file = 'edit.php?post_type=contact&_contact_type=' . ph_clean($_GET['_contact_type']); } } else { $to_highlight_types = array( 'property', 'contact', 'enquiry', 'appraisal', 'viewing', 'offer', 'sale', 'tenancy', 'key_date' ); if ( isset( $post_type ) ) { if ( in_array( $post_type, $to_highlight_types ) ) { $submenu_file = 'edit.php?post_type=' . esc_attr( $post_type ); $parent_file = 'propertyhive'; } } if ( isset( $submenu['propertyhive'] ) && isset( $submenu['propertyhive'][1] ) ) { $submenu['propertyhive'][0] = $submenu['propertyhive'][1]; unset( $submenu['propertyhive'][1] ); } } } /** * Init the reports page */ public function reports_page() { include_once( 'class-ph-admin-reports.php' ); PH_Admin_Reports::output(); } /** * Init the settings page */ public function settings_page() { include_once( 'class-ph-admin-settings.php' ); PH_Admin_Settings::output(); } /** * Init the applicant matching properties page */ public function matching_properties_page() { include_once( 'class-ph-admin-matching-properties.php' ); $ph_admin_matching_properties = new PH_Admin_Matching_Properties(); $ph_admin_matching_properties->output(); } /** * Init the applicant list page */ public function generate_applicant_list_page() { include_once( 'class-ph-admin-applicant-list.php' ); $ph_admin_applicant_list = new PH_Admin_Applicant_List(); $ph_admin_applicant_list->output(); } /** * Init the property matching applicants page */ public function matching_applicants_page() { include_once( 'class-ph-admin-matching-applicants.php' ); $ph_admin_matching_applicants = new PH_Admin_Matching_Applicants(); $ph_admin_matching_applicants->output(); } /** * Init the merge contacts page */ public function generate_merge_duplicate_contacts_page() { include_once( 'class-ph-admin-merge-contacts.php' ); $ph_admin_merge_contacts = new PH_Admin_Merge_Contacts(); $ph_admin_merge_contacts->output(); } private function get_menu_icon( $section = '' ) { // extract post type $explode_section = explode("?", $section, 2); $tab = ''; if ( count($explode_section) == 2 ) { parse_str( $explode_section[1], $array ); if ( isset($array['post_type']) ) { $section = $array['post_type']; } elseif ( isset($array['page']) ) { $section = $array['page']; if ( isset($array['tab']) ) { $tab = $array['tab']; } } } $icon = PH()->plugin_url() . '/assets/images/menu-icon.png'; switch ( $section ) { case "contact": { $icon = "dashicons-admin-users"; break; } case "property": { $icon = "dashicons-admin-home"; break; } case "appraisal": { $icon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzgwIiBoZWlnaHQ9IjM5MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxnPgogIDx0aXRsZT5MYXllciAxPC90aXRsZT4KICA8cGF0aCBmaWxsPSIjZjBmMGYxIiBpZD0ic3ZnXzEiIGQ9Im0xOTAuMjA5MDU3LDYuMjExNDA4Yy0xMDMuNzU0LDAgLTE4OC4xNjEsODQuNDEzIC0xODguMTYxLDE4OC4xNjdzODQuNDA3LDE4OC4xNTUgMTg4LjE2MSwxODguMTU1YzEwMy43NiwwIDE4OC4xNjcsLTg0LjQwMSAxODguMTY3LC0xODguMTU1cy04NC40MDcsLTE4OC4xNjcgLTE4OC4xNjcsLTE4OC4xNjd6bTAsMzQ2LjY0MmMtODcuMzgzLDAgLTE1OC40NzYsLTcxLjA5MyAtMTU4LjQ3NiwtMTU4LjQ3NmMwLC04Ny4zOTUgNzEuMDkyLC0xNTguNDg3IDE1OC40NzYsLTE1OC40ODdjODcuMzg5LDAgMTU4LjQ4Nyw3MS4wOTMgMTU4LjQ4NywxNTguNDg3YzAuMDAxLDg3LjM4MyAtNzEuMDk4LDE1OC40NzYgLTE1OC40ODcsMTU4LjQ3NnoiLz4KICA8cGF0aCBmaWxsPSIjZjBmMGYxIiBpZD0ic3ZnXzIiIGQ9Im0yMTcuMjIxMDYsMTE1LjY4MjRjMTQuODA2LDAgMTguODY3LDEwLjczOSAyMi45MjksMjMuNTIybDEzLjkzOCwtMTcuNzA3Yy00LjY0NSwtMTguNTg3IC0xNy40MjIsLTI5LjYxMSAtNDIuOTY3LC0yOS42MTFjLTQzLjg0NSwwIC00OS4wNjYsMzEuOTMxIC00OS4wNjYsNTkuNzk0bDAsMzAuMjA1bC0yMS40OSwwbC01LjgwMywyNC4zOTFsMjUuODM1LDBjLTMuMTkzLDMyLjgxMSAtMTEuNjEyLDYzLjU3NSAtMzQuMjYxLDkwLjU4MmwxMjUuMTQ2LDBsMCwtMzAuMTk1bC03MC41NjcsMGM5LjAwMiwtMjAuNjIxIDEyLjQ5OCwtMzguNjE0IDEzLjk0OCwtNjAuMzg5bDQ4LjQ3OSwwbDUuODEsLTI0LjM5MWwtNTMuMTM0LDBsMCwtMjQuMzkxYzAsLTIyLjY0MSAxLjE2NiwtNDEuODEgMjEuMjAzLC00MS44MXoiLz4KIDwvZz4KPC9zdmc+"; break; } case "viewing": { $icon = "dashicons-visibility"; break; } case "enquiry": { $icon = "dashicons-admin-comments"; break; } case "offer": case "sale": { $icon = "dashicons-tag"; break; } case "tenancy": { $icon = "dashicons-admin-network"; break; } case "key_date": { $icon = "dashicons-admin-network"; break; } case "ph-reports": { $icon = "dashicons-chart-bar"; break; } case "ph-settings": { $icon = "dashicons-admin-settings"; if ( $tab == 'addons' ) { $icon = "dashicons-insert"; } break; } } $icon = apply_filters( 'propertyhive_menu_icon', $icon, $section ); return $icon; } } endif; return new PH_Admin_Menus();