$val){ foreach ($val as $k=>$v){ if ($channel_hash === $v['channel_hash']){ $channel_data = $v; } } } return $channel_data; } /** * Get project configuration */ public static function get_project_data($project_hash) { if(get_option( 'cron_projects' )){ $cron_projects = get_option( 'cron_projects' ); $project_config = array(); foreach ($cron_projects as $key=>$val){ //if(!empty($val)){ if(!empty($val['project_hash'])){ if($val['project_hash'] === $project_hash){ $project_config = $val; } } } return $project_config; } } /** * Update individual project configuration */ public static function update_project_data($project) { if(get_option( 'cron_projects' )){ $cron_projects = get_option( 'cron_projects' ); foreach ($cron_projects as $key=>$val){ if(!empty($val)){ if($val['project_hash'] === $project['project_hash']){ $cron_projects[$key] = $project; update_option('cron_projects', $cron_projects, 'no'); } } } } } public static function update_project($project_data){ check_ajax_referer('woosea_ajax_nonce', 'security'); if(!array_key_exists('project_hash', $project_data)){ $upload_dir = wp_upload_dir(); $external_base = $upload_dir['baseurl']; $external_path = $external_base . "/woo-product-feed-pro/" . $project_data['fileformat']; $channel_statics = get_option( 'channel_statics' ); foreach ($channel_statics as $key=>$val){ foreach ($val as $k=>$v){ if ($project_data['channel_hash'] == $v['channel_hash']){ $project_fill = array_merge($v, $project_data); // New code to create the project hash so dependency on openSSL is removed $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $pieces = []; $length = 32; $max = mb_strlen($keyspace, '8bit') - 1; for ($i = 0; $i < $length; ++$i) { $pieces []= $keyspace[random_int(0, $max)]; } $project_fill['project_hash'] = implode('', $pieces); $project_fill['filename'] = $project_fill['project_hash']; $project_fill['external_file'] = $external_path . "/" . sanitize_file_name($project_fill['filename']) . "." . $project_fill['fileformat']; $project_fill['query_log'] = $external_base . "/woo-product-feed-pro/logs/query.log"; $project_fill['query_output_log'] = $external_base . "/woo-product-feed-pro/logs/query_output.log"; } } } update_option( 'channel_project',$project_fill,'' ); } else { $project_temp = get_option( 'channel_project' ); if(is_array($project_temp)){ $project_fill = array_merge($project_temp, $project_data); } else { $project_fill = $project_data; } update_option( 'channel_project',$project_fill,'' ); } return $project_fill; } /** * This function takes care of updating project settings whenever an user updates a project */ public static function reconfigure_project($project_data){ $project_hash = $project_data['project_hash']; if(get_option( 'cron_projects' )){ $cron_projects = get_option( 'cron_projects' ); foreach ($cron_projects as $key=>$val){ if(!empty($val)){ foreach ($val as $k=>$v){ if(!is_array($v)){ if (($v === $project_hash) AND ($k === "project_hash")){ $project_config = $val; $remove_key = $key; } } } } } } /** * Update project hash with new values */ foreach ($project_data as $key=>$val){ $project_config[$key] = $val; } /** * Update some project configs */ $project_config['last_updated'] = date("d M Y H:i"); $count_products = wp_count_posts('product', 'product_variation'); $count_variation = wp_count_posts('product_variation'); $count_single = wp_count_posts('product'); $published_single = $count_single->publish; $published_variation = $count_variation->publish; $published_products = $published_single+$published_variation; $project_config['nr_products'] = $published_products; $project_config['nr_products_processed'] = 0; /** * We might have to change the file extension */ $upload_dir = wp_upload_dir(); $external_base = $upload_dir['baseurl']; $external_path = $external_base . "/woo-product-feed-pro/" . $project_config['fileformat']; $project_config['external_file'] = $external_path . "/" . sanitize_file_name($project_config['filename']) . "." . $project_config['fileformat']; if((array_key_exists('woosea_page', $project_data)) AND ($project_data['woosea_page'] == "analytics")){ /** * Did the Google Analytics UTM code part got disabled? */ if(!array_key_exists('utm_on', $project_data)) { unset($project_config['utm_on']); } /** * Did the conversion tracking got disabled? */ if(!array_key_exists('adtribes_conversion', $project_data)) { unset($project_config['adtribes_conversion']); } } /** * Did the product variations support got disabled? */ if(array_key_exists('fileformat', $project_data)){ if(!array_key_exists('product_variations', $project_data)) { unset($project_config['product_variations']); unset($project_config['productname_append']); } } /** * Did the default product variations got disabled? */ if(array_key_exists('fileformat', $project_data)){ if(!array_key_exists('default_variations', $project_data)) { unset($project_config['default_variations']); } } /** * Did the lowest price product variations got disabled? */ if(array_key_exists('fileformat', $project_data)){ if(!array_key_exists('lowest_price_variations', $project_data)) { unset($project_config['lowest_price_variations']); } } /** * Did the option to only update the feed when products changed got disabled? */ if(array_key_exists('fileformat', $project_data)){ if(!array_key_exists('products_changed', $project_data)) { unset($project_config['products_changed']); } } /** * Did the option to preview the feed got disabled? */ if(array_key_exists('fileformat', $project_data)){ if(!array_key_exists('preview_feed', $project_data)) { unset($project_config['preview_feed']); } } /** * Did all the filters got removed */ if((array_key_exists('woosea_page', $project_data)) AND ($project_data['woosea_page'] == "filters_rules")){ if(!array_key_exists('rules', $project_data)) { unset($project_config['rules']); } } /** * Did all the rules got removed */ if((array_key_exists('woosea_page', $project_data)) AND ($project_data['woosea_page'] == "filters_rules")){ if(!array_key_exists('rules2', $project_data)) { unset($project_config['rules2']); } } /** * Did all the field manipulations got removed */ if((array_key_exists('woosea_page', $project_data)) AND ($project_data['woosea_page'] == "field_manipulation")){ if(!array_key_exists('field_manipulation', $project_data)) { unset($project_config['field_manipulation']); } } /** * Update cron with new project settings */ $add_to_cron = WooSEA_Update_Project::add_project_cron($project_config, $remove_key); return $project_config; } /** * This function add's a project configuration to the list of projects needed for the cron * it also delete's the current project configuration from the channel_project option for a next project */ public static function add_project_cron($project_data, $key){ if(get_option( 'cron_projects' )){ $cron_projects = get_option( 'cron_projects' ); if(is_int($key)){ $cron_projects[$key] = $project_data; } else { array_push($cron_projects, $project_data); } update_option( 'cron_projects', $cron_projects); } else { $cron_projects = array (); // Create a new multidimensional array for the cron projects array_push($cron_projects, $project_data); update_option( 'cron_projects', $cron_projects); } // Clear channel_project option delete_option( 'channel_project' ); } }