'install_plugins', "content_permission" => 'edit_posts' ); $validated_caps = admg_validate_settings(array( "settings_permission" => sanitize_text_field( get_option("admg_settings_capability") ), "content_permission" => sanitize_text_field( get_option("admg_content_capability") ) )); $settings_cap = $validated_caps["settings_permission"] || $default_caps["settings_permission"]; $content_cap = $validated_caps["content_permission"] || $default_caps["content_permission"]; add_menu_page( 'Adverts', // page title 'Adverts', // menu title $content_cap, // capability 'ad-manager', // menu slug 'admg_admin_page_render', // callback function 'dashicons-megaphone', // icon 6 // Position ); add_submenu_page( 'ad-manager', 'Advert', 'New Advert', $content_cap, 'am-advert', 'admg_advert_page_render' ); add_submenu_page( 'ad-manager', 'Locations', 'Locations', $content_cap, 'am-locations', 'admg_locations_page_render' ); add_submenu_page( 'ad-manager', 'Settings', 'Settings', $settings_cap, 'am-settings', 'admg_settings_page_render' ); add_submenu_page( 'ad-locations', 'Location', '', $content_cap, 'am-location', 'admg_location_page_render' ); } function admg_page_render($template = false) { global $title; do_action("admg_admin"); print '
'; wp_enqueue_style("ADMG Admin", plugins_url( 'admin.css', __FILE__ )); wp_enqueue_script("ADMG Admin", plugins_url( 'admin.js', __FILE__ )); wp_localize_script( 'ADMG Admin', 'admg', array( 'ajax_url' => admin_url( '/admin-ajax.php'), 'advert_nonce' => wp_create_nonce( 'admg_advert_nonce' ) )); $template = __DIR__ . "/" . $template; if ( file_exists( $template ) ) include $template; print '
'; } function admg_admin_page_render() { admg_page_render("admin.template.php"); } function admg_advert_page_render() { admg_page_render("advert/advert.php"); } function admg_locations_page_render() { admg_page_render("locations/locations.template.php"); } function admg_location_page_render() { admg_page_render("location/location.php"); } function admg_settings_page_render() { admg_page_render("settings/settings.php"); } /* Validating Functions */ function admg_validate_advert($data) { $validate = array( "status" => function($val) { if ( !in_array($val, array('running', 'paused', 'private')) ) return; return $val; }, "name" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 200 ) return; return $val; }, "type" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 50 ) return; return $val; }, "slug" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 200 ) return; return $val; }, "location" => function($val) { if ( !is_int($val) ) return; return $val; }, "graphic" => function($val) { if ( !is_int($val) ) return; return $val; }, "url" => function($val) { if ( !is_string($val) ) return; return $val; }, "created_by" => function($val) { if ( !is_int($val) ) return; return $val; }, "modified_by" => function($val) { if ( !is_int($val) ) return; return $val; }, ); $validated_data = array(); $props = array_keys($validate); foreach( $props as $prop ) { if ( isset($data[$prop]) ) $validated_data[$prop] = $validate[$prop]( $data[$prop] ); } return $validated_data; } function admg_validate_location($data) { $validate = array( "name" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 200 ) return; return $val; }, "slug" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 200 ) return; return $val; }, "description" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 200 ) return; return $val; }, "system" => function($val) { if ( !is_int($val) ) return; return $val; }, ); $validated_data = array(); $props = array_keys($validate); foreach( $props as $prop ) { if ( isset($data[$prop]) ) $validated_data[$prop] = $validate[$prop]( $data[$prop] ); } return $validated_data; } function admg_validate_rule($data) { $validate = array( "advert" => function($val) { if ( !is_int($val) ) return; return $val; }, "parent" => function($val) { if ( !is_int($val) ) return; return $val; }, "function" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 50 ) return; return $val; }, "operator" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 20 ) return; return $val; }, "result" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 500 ) return; return $val; }, ); $validated_data = array(); $props = array_keys($validate); foreach( $props as $prop ) { if ( isset($data[$prop]) ) $validated_data[$prop] = $validate[$prop]( $data[$prop] ); } return $validated_data; } function admg_validate_settings($data) { $validate = array( "settings_permission" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 100 ) return; return $val; }, "content_permission" => function($val) { if ( !is_string($val) ) return; if ( strlen($val) > 100 ) return; return $val; }, "intra_post_min_length" => function($val) { if ( !is_int($val) ) return; return $val; }, ); $validated_data = array(); $props = array_keys($validate); foreach( $props as $prop ) { if ( isset($data[$prop]) ) $validated_data[$prop] = $validate[$prop]( $data[$prop] ); } return $validated_data; } /* Advert DB Interactions */ function admg_create_advert($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_adverts"; $wpdb->insert( $table_name, $args['data'] ); return $wpdb->insert_id; } function admg_update_advert($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_adverts"; return $wpdb->update( $table_name, $args['data'], array("id" => $args['id']) ); } function admg_delete_advert($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_adverts"; return $wpdb->delete( $table_name, array("id" => $args['id']) ); } function admg_get_advert($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_adverts"; return $wpdb->get_row( "SELECT * FROM $table_name WHERE id = " . $args['id'] ); } function admg_get_adverts($args = array("where" => "*")) { global $wpdb; $table_name = $wpdb->prefix . "admg_adverts"; if ( $args['where'] === "*" ) { $args['where'] = ''; } else { $args['where'] = " WHERE " . $args['where']; } return $wpdb->get_results( "SELECT * FROM $table_name" . $args['where'] ); } /* Location DB Interactions */ function admg_create_location($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_locations"; $wpdb->insert( $table_name, $args['data'] ); return $wpdb->insert_id; } function admg_update_location($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_locations"; $wpdb->update( $table_name, $args['data'], array("id" => $args['id']) ); } function admg_delete_location($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_locations"; return $wpdb->delete( $table_name, array("id" => $args['id']) ); } function admg_get_location($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_locations"; if ( isset($args['where'] ) ) { return $wpdb->get_row( "SELECT * FROM $table_name WHERE " . $args["where"] ); } else { return $wpdb->get_row( "SELECT * FROM $table_name WHERE id = " . $args['id'] ); } } function admg_get_locations($args = array("where" => "*")) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_locations"; if ( $args['where'] === "*" ) { $args['where'] = ''; } else { $args['where'] = "WHERE " . $args['where']; } return $wpdb->get_results( "SELECT * FROM $table_name " . $args['where'] ); } /* Rule DB Interactions */ function admg_create_rule($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_rules"; $wpdb->insert( $table_name, $args['data'] ); return $wpdb->insert_id; } function admg_update_rule($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_rules"; return $wpdb->update( $table_name, $args['data'], array("id" => $args['id']) ); } function admg_delete_rule($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_rules"; return $wpdb->delete( $table_name, array("id" => $args['id']) ); } function admg_dump_rules($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_rules"; $wpdb->delete( $table_name, array("advert" => $args['advert']) ); } function admg_get_rule($args) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_rules"; return $wpdb->get_row( "SELECT * FROM $table_name WHERE id = " . $args['id'] ); } function admg_get_rules($args = array("where" => "*")) { global $wpdb; $table_name = $wpdb->prefix . "admg_advert_rules"; if ( $args['where'] === "*" ) { $args['where'] = ''; } else { $args['where'] = " WHERE " . $args['where']; } return $wpdb->get_results( "SELECT * FROM $table_name" . $args['where'] ); } ?>