get_var("SHOW TABLES LIKE '$af_settings_table_name'") != $af_settings_table_name) $b_first_time = TRUE; else $b_first_time = FALSE; // Create settings table $query = "CREATE TABLE IF NOT EXISTS `$af_settings_table_name` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `key` varchar(32) NOT NULL, `value` varchar(1024) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) )"; $wpdb->query ($query); // Create redirects table $query = "CREATE TABLE IF NOT EXISTS `$af_redir_table_name` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 80 ) NOT NULL , `source_url` VARCHAR( 512 ) NOT NULL , `real_dest_url` VARCHAR( 512 ) NOT NULL , `spider_dest_url` VARCHAR( 512 ) NOT NULL , `title` VARCHAR( 200 ) NOT NULL )"; $wpdb->query ($query); // Create keywords table $query = "CREATE TABLE IF NOT EXISTS `$af_kw_table_name` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , `pattern` VARCHAR( 128 ) NOT NULL , `is_regex` SMALLINT NOT NULL DEFAULT '0' COMMENT '1 or 0. 1=regex, 0=plain text', `order` INT NOT NULL DEFAULT '-1', `redirect_id` BIGINT NOT NULL COMMENT 'index in AF_redirects table' )"; $wpdb->query ($query); $query = "CREATE TABLE IF NOT EXISTS `$af_settings2_table_name` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `pid` INT NOT NULL , `value` VARCHAR( 10240 ) NOT NULL , UNIQUE (`pid`) )"; $wpdb->query ($query); if ($b_first_time) { // If first time - populate tables with default values // Note: use $wpdb->escape('...'); to sanitize inputs $query = "INSERT INTO `$af_settings_table_name` (`key`, `value`) VALUES ('ids_to_ignore', ''), ('redirect_code', '301'), ('max_links_count', '-1'), ('link_target_type', '_blank'), ('enable_ga_tracking', ''), ('link_custom_info', ''), ('add_rel_nofollow', '1'), ('process_images', '1'), ('google_slap_immune', '1'), ('force_non_aff_urls', 0)"; $wpdb->query ($query); $query = "INSERT INTO `$af_redir_table_name` (`name` ,`source_url`,`real_dest_url`,`spider_dest_url`,`title`) VALUES ('Hostgator', '/goto/hosting', 'http://secure.hostgator.com/cgi-bin/affiliates/clickthru.cgi?id=gesman', 'http://www.hostgator.com/', 'Reliable Webhosting Service' )"; $wpdb->query ($query); // $wpdb->num_rows – Count of the number of rows returned by the last query (useful in SELECT queries) // $wpdb->insert_id — ID of the AUTO_INCREMENT value of the last query (useful in INSERT queries) // $wpdb->rows_affected – Count of the number of rows affected by the last query (useful in INSERT, UPDATE and DELETE queries) $data1 = addslashes ('web\\s*hosting\\s+service'); $query = "INSERT INTO `$af_kw_table_name` (`pattern` ,`is_regex` ,`redirect_id`) VALUES ('best webhost', '0', '{$wpdb->insert_id}'), ('$data1', '1', '{$wpdb->insert_id}' )"; $wpdb->query ($query); } } //=========================================================================== //=========================================================================== // Returns assoc array of global settings function load_global_settings () { global $wpdb; $query = "SELECT * FROM `" . AF_SETTINGS_TABLE . "`"; $af_settings_tmp = $wpdb->get_results($query, ARRAY_A); // Repack global settings into single assoc array. $af_settings = array(); foreach ($af_settings_tmp as $af_setting) $af_settings[$af_setting['key']] = stripslashes($af_setting['value']); return ($af_settings); } //=========================================================================== //=========================================================================== // Update k=>v of a single global setting in DB function update_global_setting ($key, $value) { global $wpdb; $query = "UPDATE `" . AF_SETTINGS_TABLE . "` SET `value` = '$value' WHERE `key`='" . addslashes(stripslashes(html_entity_decode($key))) . "'"; $RetCode = $wpdb->query ($query); // The function returns an integer corresponding to the number of rows affected/selected, FALSE on error. if (!$RetCode) { $query = "INSERT INTO `" . AF_SETTINGS_TABLE . "` (`key`, `value`) VALUES ('$key', '$value')"; $RetCode = $wpdb->query ($query); } } //=========================================================================== //=========================================================================== // Do admin panel business, assemble and output admin page HTML function render_admin_html () { global $wpdb; //--------------------------------------- // Load AFLinker data from database $af_settings = load_global_settings(); $query = "SELECT * FROM `" . AF_REDIRECTS_TABLE . "`"; $af_redirects = $wpdb->get_results($query, ARRAY_A); $query = "SELECT * FROM `" . AF_KEYWORDS_TABLE . "` ORDER BY `order` ASC, LENGTH(`pattern`) DESC"; $af_keywords = $wpdb->get_results($query, ARRAY_A); if (!is_array($af_redirects)) $af_redirects = array(); if (!is_array($af_keywords)) $af_keywords = array(); //--------------------------------------- $admin_menu = get_admin_menu_html_template(); // Start "brushing" admin_data... //--------------------------------------- // Substitute few variables $admin_menu = preg_replace ("|\{\{\{SERVER__REQUEST_URI\}\}\}|", $_SERVER['REQUEST_URI'], $admin_menu); $aflinker_logo_url = WP_PLUGIN_URL . '/af-linker/aflinker_logo.png'; $admin_menu = preg_replace ("|\{\{\{AFLINKER_LOGO_URL\}\}\}|", $aflinker_logo_url, $admin_menu); $admin_menu = preg_replace ("|\{\{\{BLOG_URL\}\}\}|", rtrim(get_bloginfo ('wpurl'), '/'), $admin_menu); //--------------------------------------- //--------------------------------------- // Prepare html to fill in 'KW_ROW_REDIRECT_OPTIONS'. // It will be placed into '$all_redirect_options_for_any_kw'. Please note that none of rows marked as "selected". $all_redirect_options_for_any_kw = ""; $single_redirect_option_for_kw_pattern = extract_special_tag_data ('KW_ROW_REDIRECT_OPTIONS', $admin_menu); foreach ($af_redirects as $af_redirect) { $curr_option_row = $single_redirect_option_for_kw_pattern; $curr_option_row = preg_replace ("|\{\{\{REDIRECT_ID\}\}\}|", $af_redirect['id'], $curr_option_row); $redirect_name_url = $af_redirect['name'] . ": " . $af_redirect['real_dest_url']; if (strlen ($redirect_name_url)>80) $redirect_name_url = substr ($redirect_name_url, 0, 38) . "..." . substr ($redirect_name_url, -38); $curr_option_row = preg_replace ("|\{\{\{REDIRECT_NAME_URL\}\}\}|", $redirect_name_url, $curr_option_row); $all_redirect_options_for_any_kw .= $curr_option_row; } // Eventually to follow with // $admin_menu = replace_special_tag_data ('KW_ROW_REDIRECT_OPTIONS', $admin_menu, $all_redirect_options_for_any_kw); //--------------------------------------- //--------------------------------------- // Fill in current redirects rows $all_redirect_rows = ""; // Extract pattern $single_redirect_row_pattern = extract_special_tag_data ('CURRENT_REDIRECTS_ROWS', $admin_menu); foreach ($af_redirects as $af_redirect) { $curr_redirect_row = $single_redirect_row_pattern; $curr_redirect_row = preg_replace ("|\{\{\{CURR_REDIRECT_ID\}\}\}|", $af_redirect['id'], $curr_redirect_row); $curr_redirect_row = preg_replace ("|\{\{\{CURR_REDIRECT_NAME\}\}\}|", $af_redirect['name'], $curr_redirect_row); $curr_redirect_row = preg_replace ("|\{\{\{CURR_REDIRECT_SRC_URL\}\}\}|", $af_redirect['source_url'], $curr_redirect_row); $curr_redirect_row = preg_replace ("|\{\{\{CURR_REDIRECT_DEST_URL\}\}\}|", $af_redirect['real_dest_url'], $curr_redirect_row); $curr_redirect_row = preg_replace ("|\{\{\{CURR_REDIRECT_SPDR_URL\}\}\}|", $af_redirect['spider_dest_url'], $curr_redirect_row); $curr_redirect_row = preg_replace ("|\{\{\{CURR_REDIRECT_TITLE\}\}\}|", $af_redirect['title'], $curr_redirect_row); $all_redirect_rows .= $curr_redirect_row; } $admin_menu = replace_special_tag_data ('CURRENT_REDIRECTS_ROWS', $admin_menu, $all_redirect_rows); //--------------------------------------- //--------------------------------------- // Fill in current keyword rows $all_keyword_rows = ""; // Extract main keyword pattern $single_keyword_row_pattern = extract_special_tag_data ('CURRENT_KEYWORDS_ROWS', $admin_menu); foreach ($af_keywords as $af_keyword) { $curr_keyword_row = $single_keyword_row_pattern; $curr_keyword_row = preg_replace ("|\{\{\{CURR_KEYW_ID\}\}\}|", $af_keyword['id'], $curr_keyword_row); $curr_keyword_row = preg_replace ("|\{\{\{CURR_KEYW_PATTERN\}\}\}|", $af_keyword['pattern'], $curr_keyword_row); $curr_keyword_row = preg_replace ("|\{\{\{CURR_KEYW_CHECKED_IF_REGEX\}\}\}|", $af_keyword['is_regex']?'checked="checked"':'', $curr_keyword_row); $curr_keyword_row = preg_replace ("|\{\{\{CURR_KEYW_ORDER\}\}\}|", $af_keyword['order'], $curr_keyword_row); // Mark proper redirect option as 'selected' $plain_pattern = '