Yesterday's News Archive

Custom Search

News Finder

Enter topic, city or zip or try our Advanced Search
 
 -
 -
Photos -
World Photos - www.worldinphotos.com             World Photos - www.worldinphotos.com
 
Featured Services at www.worldofnews.com
Stock Quotes
Stock Quotes www.stockquoteusa.com
Eg. MSFT, GOOG, YHOO
Symbol Lookup
Jobs and careers - www.ejobwizard.com
Jobs, Careers www.jobsncareers.com
Over 500 job sites
WHAT

Job title, keywords or company name
WHERE(optional)

city, state or zip
Coupons, online coupons, internet coupons, discount coupons
Coupons, online coupons,
internet coupons,
discount coupons

Local classifieds, Local jobs, Local Business
Local classifieds,
Local jobs,
Local Business

Real Estate Web Design, Hosting, and Promotion with The Real Estate Listing Manager
Real Estate Web Design,
Hosting, and Promotion.

Web design, Custom WebSites, Content Manager, eCommerce, SEO.
Web design, Custom WebSites,
Content Manager,
eCommerce, SEO.

Indian news, headlines - www.indiasnews.com
Indian News

India, India News, Hotels, Tourism - www.india.tm
India, India News, Hotels, Tourism
Online Profiles, Personal Profiles Create Your Search Engine Profile - www.whataboutu.com
Online Profiles, Personal Profiles Create Your Search Engine Profile
People Profiles, Celebrity Profiles Create Your Profile - www.peopleandprofiles.com
People Profiles, Celebrity Profiles Create Your Profile
Local Merchants Stay Local Deal Global with MerchantSpan.com - www.merchantspan.com
Local Merchants Stay Local Deal Global with MerchantSpan.com


More

X-Powered-By: PHP/5.2.9 Content-type: text/html ###!c:/perl/bin/perl.exe BEGIN { push( @INC, "libs" ); } print "Content-Type: text/html\n\n"; #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Test CPU load use strict; #use warnings; use CGI; use Sys::CpuLoad; my $q = new CGI(); my $skip_cache = $q->param( "skipcache" ); if ( ($ENV{'HTTP_USER_AGENT'} !~ /Googlebot/) && ($ENV{'HTTP_USER_AGENT'} !~ /msnbot/) && ($ENV{'HTTP_USER_AGENT'} !~ /Yahoo\! Slurp/) && ($ENV{'HTTP_USER_AGENT'} !~ /Twiceler/) && ($skip_cache ne 'y') ){ my $min_cpu_load = 2; my $max_cpu_load = 5; my @cpu_load_array = Sys::CpuLoad::load(); # Prevent CPU overloading my $tmp_title = $q->param('title'); $tmp_title =~ s/\-/ /g; if ($cpu_load_array[0] > $max_cpu_load) { print_server_busy_message($tmp_title); } if ($ENV{'HTTP_USER_AGENT'} =~ /(bot[^t]|bot$)/){ if ($cpu_load_array[0] > $min_cpu_load) { print_server_busy_message($tmp_title); } } } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: use DBI; use Data::Dumper; use HTML::Entities; use common_libs; use Switch; use PHP::Serialization qw(serialize unserialize); use Time::Local; use POSIX qw(ceil); # Define main variables my $option = $q->param( "option" ); # Debug message #if ($skip_cache ne 'y') { print("Server under maintenance !"); exit(); } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #NOTE: #the public_html directory must have 0751 rights (not 0777) my $worldnewxRootFolder = "/home/worldnew/public_html"; #my $worldnewxRootFolder = "e:/inetpub/wwwroot/worldnewx.com/"; my $worldofnewsRoot = "http://worldofnews.com/index.pl"; my $cache_dir = "/usr/local/cache/won"; #my $cache_dir = "e:/inetpub/wwwroot/worldnewx/cache"; my $config_file_path = "config.xml"; my $template_index = "index.tpl"; my $news_search_link = "http://wssearch.worldnewx.com/ws_search.pl?apikey=worldnewx.com-1277066279"; my $source_list_link = "http://wssearch.worldnewx.com/gapi/index.php?option=exp_slst"; my $category_list_link = "http://wssearch.worldnewx.com/gapi/index.php?option=exp_clst"; my @current_time = localtime(); my $ch = $current_time[ 2 ]; my $cm = $current_time[ 1 ]; my $cs = $current_time[ 0 ]; my $time_in_minutes = $ch * 60 + $cm; my %aArchiveIndex = ( "a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5, "f" => 6, "g" => 7, "h" => 8, "i" => 9, "j" => 10, "k" => 11, "l" => 12, "m" => 13, "n" => 14, "o" => 15, "p" => 16, "q" => 17, "r" => 18, "s" => 19, "t" => 20, "u" => 21, "v" => 22, "w" => 23, "x" => 24, "y" => 25, "z" => 26 ); #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #Create and initialize debug object my $DBG = new DEBUG(); $DBG->set_flag( 0 ); #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ my $keyword = $q->param( "keyword" ); my $cat = $q->param( "cat" ); my $bottom_menu_id = $q->param( 'bottom_menu_id' ); my $start_record = $q->param( "s" ); my $news_id = $q->param( "nid" ); $keyword = '' unless defined $keyword; $cat = "Top Stories" unless defined $cat; $option = '' unless defined $option; $bottom_menu_id = '' unless defined $bottom_menu_id; $start_record = 0 unless defined $start_record; $start_record = ( $start_record < 0 ) ? 0 : $start_record; $skip_cache = 'n' unless defined $skip_cache; my $is_first_page = get_first_page_flag( $q ); #Define global script variables for sql queries my $dbh = init_database( $config_file_path ); my $sql; my $sth; my $pps = 18; #pages per sheet #Normalize the time my $step = int( $time_in_minutes / 5 ); my $exact_time = $step * 5; my $show_nav_bar = 0; my $cache_file_name = create_cache_file_name( $cat, $keyword, $news_id, $option, $start_record, $bottom_menu_id ); my $tmp_cache_file_name = ""; #used for hold a temporary unique cache file name #............................................. my $cache_content = ""; my $is_collecting_cache = 'n'; # #Try to get content from cache # my $cache_time = 600; if ( $option eq 'view' ) { $cache_time = 3600 * 24 * 30; visit_news( $news_id ); #$skip_cache = 'y'; } if ( $option eq 'search' ) { $skip_cache = 'y'; } #if ($option eq 'site_map') { $skip_cache = 'y'; } #if ($option eq 'google') { $skip_cache = 'y'; } if ( $skip_cache eq 'n' ) { $DBG->show( "" ); #debug hidden text ( Get From Cache : ) $cache_content = try_to_get_cache( $cache_file_name ); if ( $cache_content ne '' ) { $cache_content = add_comments( $cache_content ); $cache_content = add_visiads( $cache_content, $option ); $cache_content = add_ad_manager( $cache_content, $option ); print $cache_content; $DBG->show( "" ); #debug hidden text ( No ) exit(); } } $DBG->show( "" ); #debug hidden text ( No ) $tmp_cache_file_name = start_collect_cache( $cache_file_name ); $is_collecting_cache = 'y'; ################################################################################ ################################################################################ my @category_array = get_categories_array( $dbh, 1 ); my $wnl_tpl = HTML::Template->new( filename => "templates/$template_index", global_vars => 1 ); $wnl_tpl->param( "first_page_flag" => $is_first_page ); # #Get the image from WorldInPhotos.com # my $WIP_Img = ""; eval { $WIP_Img = get_worldinphotos_image(); $wnl_tpl->param( WIP_Link => $WIP_Img->{ 'images_list' }[ 0 ]{ 'link' } ); $wnl_tpl->param( WIP_Photo => $WIP_Img->{ 'images_list' }[ 0 ]{ 'photo' } ); $wnl_tpl->param( WIP_Title => $WIP_Img->{ 'images_list' }[ 0 ]{ 'title' } ); $wnl_tpl->param( WIP_Category => $WIP_Img->{ 'images_list' }[ 0 ]{ 'category' } ); }; if ( $@ ) { } # #Get the list of channels for World Channels # # - construct the categories arrays for two rows display (right side) my @category_array_l = (); my @category_array_r = (); my $half_way = int( $#category_array / 2 ); for ( my $i = 0 ; $i <= $#category_array ; $i++ ) { if ( $i <= $half_way ) { push( @category_array_l, $category_array[ $i ] ); } else { push( @category_array_r, $category_array[ $i ] ); } } #Assign variables to template $wnl_tpl->param( 'category_array_l' => \@category_array_l ); $wnl_tpl->param( 'category_array_r' => \@category_array_r ); # #Create main menu # my $news_vlist_content = ""; my $ticketnetwork_ads = HTML::Template->new( filename => "templates/ticketnetwork.tpl" ); # $wnl_tpl->param( 'ticketnetwork_ads' => $ticketnetwork_ads->output() ); ########################################################## switch ( $option ) { case 'search' { my $keywords = $q->param( "keywords" ); my $category = $q->param( "category" ); my $source = $q->param( "source" ); my @tmp_news_aray = (); my @news_array; my $nav_bar = ""; if ( $keywords ne '' ) { #Search by keyword @news_array = get_and_unserialize( $news_search_link . "&opt=kwd&nr=$pps&k=$keywords&start=$start_record" ); if ( !$news_array[ 0 ]->{ Error } ) { @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; $news_vlist_content = create_news_list_content( \@tmp_news_aray ); } #Calculate the number of pages if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } } elsif ( ( $category ne '' ) || ( $source ne '' ) ) { #Search by category and source @news_array = get_and_unserialize( $news_search_link . "&opt=mix&nr=$pps&c=$category&s=$source&start=$start_record" ); @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; $news_vlist_content = create_news_list_content( \@tmp_news_aray ); #Calculate the number of pages if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } } else { #Display advanced search box #Get sources list my @source_name_array = get_and_unserialize( $source_list_link ); #Get categories list my @category_name_array = get_and_unserialize( $category_list_link ); #echo(Dumper(@source_name_array));exit(); #Assign to template my $search_tpl = HTML::Template->new( filename => "templates/search.tpl", global_vars => 1 ); $search_tpl->param( source_name_array => \@{ $source_name_array[ 0 ] } ); $search_tpl->param( category_name_array => \@{ $category_name_array[ 0 ] } ); $news_vlist_content = $search_tpl->output(); $tmp_news_aray[ 0 ]->{ title } = "Advanced Search"; $tmp_news_aray[ 0 ]->{ description } = "WorldOfNews.com Advanced Search"; } $wnl_tpl->param( page_title => "Advanced Search"); $wnl_tpl->param( page_keywords => get_keywords( $tmp_news_aray[ 0 ]->{ description } ) ); $wnl_tpl->param( page_description => get_description( $tmp_news_aray[ 0 ]->{ description } ) ); $wnl_tpl->param( navigation_bar => $nav_bar ); $wnl_tpl->param( show_nav_bar => $show_nav_bar ); $wnl_tpl->param( topstories_content => $news_vlist_content ); } case 'clst' { #Category list #Find out category code my $category_id = CategoryName2Id( $cat ); =debug select (STDOUT); print $news_search_link . "&opt=cat&nr=$pps&c=$category_id&start=$start_record\n"; exit(); =cut my @news_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=$pps&c=$category_id&start=$start_record" ); eval { my @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; $news_vlist_content = create_news_list_content( \@tmp_news_aray ); #Calculate the number of pages my $nav_bar = ""; if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } $wnl_tpl->param( navigation_bar => $nav_bar ); }; if ( $@ ) { } $wnl_tpl->param( page_title => "$cat News, World $cat News" ); $wnl_tpl->param( page_keywords => get_keywords( "$cat News, World $cat News" ) ); $wnl_tpl->param( page_description => get_description( "$cat News, World $cat News" ) ); $wnl_tpl->param( topstories_content => $news_vlist_content ); $wnl_tpl->param( show_nav_bar => $show_nav_bar ); } case 'view' { #Item view visit_news( $news_id ); #Display the news my @tmp_arr = get_and_unserialize( $news_search_link . "&opt=arh&permaid=$news_id" ); @tmp_arr = @{ $tmp_arr[ 0 ]->{ records } }; #For option = view we need publication date not and for this we apply the following algorithm # - save the old pubdate my $tmp_pub_date = $tmp_arr[ 0 ]->{ pub_date }; # - process the record my $news_details = adjust_news_object_fields( $tmp_arr[ 0 ], 'n' ); # - process the saved date in the format we need # - restore the date property #echo($tmp_pub_date);exit(); $tmp_arr[ 0 ]->{ pub_date } = decode_mysql_date( $tmp_pub_date ); #Get news by category my $category_id = $news_details->{ cat_id }; my @news_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=6&c=$category_id" ); my @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; my $aux_topic_content = ""; foreach my $row ( @tmp_news_aray ) { $row = adjust_news_object_fields( $row, 'n' ); my $news_content = HTML::Template->new( filename => "templates/newsheadlines_layout.tpl" ); $news_content->param( 'won_link' => $row->{ won_link } ); $news_content->param( 'title' => $row->{ title } ); $news_content->param( 'source_name' => $row->{ source_name } ); $aux_topic_content .= $news_content->output(); } #Get news by source my $source = $news_details->{ source_name }; @news_array = get_and_unserialize( $news_search_link . "&opt=src&nr=6&s=$source" ); @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; my $aux_source_content = ""; foreach my $row ( @tmp_news_aray ) { my $news_content = HTML::Template->new( filename => "templates/newsheadlines_layout.tpl" ); $row = adjust_news_object_fields( $row, 'n' ); $news_content->param( 'won_link' => $row->{ won_link } ); $news_content->param( 'title' => $row->{ title } ); $news_content->param( 'source_name' => $row->{ source_name } ); $aux_source_content .= $news_content->output(); } my $newsitem_template = HTML::Template->new( filename => "templates/newsdetails_layout.tpl" ); $newsitem_template->param( id => $news_details->{ permaid } ); $newsitem_template->param( title => $news_details->{ title } ); $newsitem_template->param( description => $news_details->{ description } ); $newsitem_template->param( cname => $news_details->{ cname } ); $newsitem_template->param( enc_category => $news_details->{ enc_category } ); $newsitem_template->param( link => $news_details->{ link } ); $newsitem_template->param( won_link => $news_details->{ won_link } ); $newsitem_template->param( source_name => $news_details->{ source_name } ); $newsitem_template->param( pub_date => $news_details->{ pub_date } ); $newsitem_template->param( aux_topic_content => $aux_topic_content ); $newsitem_template->param( aux_source_content => $aux_source_content ); $wnl_tpl->param( page_title => $news_details->{ title } ); $wnl_tpl->param( page_keywords => get_keywords( $news_details->{ description } ) ); $wnl_tpl->param( page_description => get_description( $news_details->{ description } ) ); $news_vlist_content = $newsitem_template->output(); $wnl_tpl->param( topstories_content => $news_vlist_content ); } case 'site_map' { #construct site map #Get categories list my @category_name_array = get_and_unserialize( $category_list_link ); my @tmp_category_name_array = @{ $category_name_array[ 0 ] }; @category_name_array = (); foreach ( @tmp_category_name_array ) { # echo($_->{name}); $_->{ link } = $_->{ name }; $_->{ link } =~ s/^([\\__]+)//g; $_->{ link } =~ s/( +)/\+/g; push( @category_name_array, $_ ); } my $sitemap_tpl = HTML::Template->new( filename => "templates/site_map.tpl", global_vars => 1 ); $sitemap_tpl->param( tree => \@category_name_array ); $news_vlist_content = $sitemap_tpl->output(); $wnl_tpl->param( page_title => "Site Map" ); $wnl_tpl->param( page_keywords => "WorldOfNews.com Site Map" ); $wnl_tpl->param( page_description => "WorldOfNews.com Site Map" ); $wnl_tpl->param( topstories_content => $news_vlist_content ); =start echo(\@category_name_array); exit(); =cut } case 'rss' { my $category = $q->param( "cat" ); #Find out category code my $category_id = CategoryName2Id( $category ); my @tmp_news_aray = (); my @news_array = (); @news_array = get_and_unserialize( $news_search_link . "&opt=mix&nr=$pps&c=$category_id" ); @news_array = @{ $news_array[ 0 ]->{ records } }; #Workaround to not finish the output here: $wnl_tpl = HTML::Template->new( filename => "templates/rss.tpl" ); foreach ( @news_array ) { #if ( length( $_->{ description } ) > 200 ) { $_->{ description } = substr( $_->{ description }, 0, 200 ) . "..."; } if ( length( $_->{ description } ) > 200 ) { $_->{ description } = get_short_description($_->{ description }); } push( @tmp_news_aray, { 'title' => $_->{ title }, 'won_link' => $_->{ won_link }, 'description' => strip_slashes($_->{ description }), 'source_name' => $_->{ source_name }, 'pub_date' => $_->{ pub_date }, 'img' => $_->{ img }, 'cname' => $_->{ cname } } ); } $wnl_tpl->param( current_content => \@tmp_news_aray ); $wnl_tpl->param( title => $category ); my $clink = $category; $clink =~ s/( +)/\+/g; $wnl_tpl->param( 'link' => "http://www.worldofnews.com/rss/$clink" ); $wnl_tpl->param( 'description' => "$category News, World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( 'logo' => 'http://www.worldofnews.com/images/logo.gif' ); $wnl_tpl->param( 'now_date_time' => ( scalar localtime( time() ) ) ); } case 'google' { my $google_tpl = HTML::Template->new( filename => "templates/google.tpl" ); $wnl_tpl->param( page_title => "World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( page_keywords => "World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( page_description => "World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( google_page => 1 ); $wnl_tpl->param( topstories_content => $google_tpl->output() ); } case 'about_us' { my $about_us_tpl = HTML::Template->new( filename => "templates/about_us.tpl" ); $wnl_tpl->param( topstories_content => $about_us_tpl->output() ); $wnl_tpl->param( page_title => "About Us" ); } case 'terms_of_service' { my $tos_tpl = HTML::Template->new( filename => "templates/terms_of_service.tpl" ); $wnl_tpl->param( topstories_content => $tos_tpl->output() ); $wnl_tpl->param( page_title => "Terms of Service" ); } case 'privacy_policy' { my $privacy_policy_tpl = HTML::Template->new( filename => "templates/privacy_policy.tpl" ); $wnl_tpl->param( topstories_content => $privacy_policy_tpl->output() ); $wnl_tpl->param( page_title => "Privacy Policy" ); } case 'contact_us' { my $contact_us_tpl = HTML::Template->new( filename => "templates/contact_us.tpl" ); $wnl_tpl->param( topstories_content => $contact_us_tpl->output() ); $wnl_tpl->param( page_title => "Contact Us" ); } else { #Home page #Get Frontbox content my $frontbox_content .= file_get_contents( "$worldnewxRootFolder/frontbox/feeds/wnl_frontbox.htm" ); #Get Top Stories list my @news_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=$pps&c=2684354584" ); =start select(STDOUT); #print ($news_search_link . "&opt=cat&nr=$pps&c=2684354584");exit(); print Dumper(@news_array);exit(); =cut my @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; #Calculate the number of pages my $nav_bar = ""; if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } $wnl_tpl->param( show_nav_bar => $show_nav_bar ); $wnl_tpl->param( navigation_bar => $nav_bar ); $news_vlist_content = create_news_list_content( \@tmp_news_aray ); #Create right section $wnl_tpl->param( 'news_by_cat' => create_right_section( $dbh ) ); $wnl_tpl->param( page_title => $tmp_news_aray[ 0 ]->{ title } ); # $wnl_tpl->param( page_keywords => get_keywords($tmp_news_aray[0]->{description}) ); # $wnl_tpl->param( page_description => get_description($tmp_news_aray[0]->{description}) ); $wnl_tpl->param( page_keywords => "Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( page_description => "Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( frontbox_content => $frontbox_content ); $wnl_tpl->param( topstories_content => $news_vlist_content ); $wnl_tpl->param( homepage => 1 ); #Create news array for bottom boxes #'Top Stories', 'Business', 'Education', 'Entertainment', 'Health', 'Law', 'Movie', 'Music', 'Sport', 'Technology', 'US', 'World' my @newscateg = ( 'topstories', 'business', 'education', 'entertainment', 'health', 'law', 'movie', 'music', 'sport', 'technology', 'us', 'world' ); foreach my $categ ( @newscateg ) { my $newsbox_tmpl = HTML::Template->new( filename => "$worldnewxRootFolder/newsbox/feeds/" . $categ . "_newsbox.htm" ); $wnl_tpl->param( $categ . "_newsbox" => $newsbox_tmpl->output() ); } } } # Calculate current date for the archive my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()-86400); $year += 1900; $mon += 1; my $current_date = "$year-$mon-$mday"; $wnl_tpl->param('current_date' => $current_date); my $temporary_content = $wnl_tpl->output; =SEO FIX: Teporary took out # FIX: October 27, 2007. # Updated: 22 Aug 2008 # Reason: SEO optimization (add title on all links) # Remove all 'titles' from links $temporary_content =~ s/]+?)title ?= ?["']?([^<>]+?)(['"]|([> ]))/]+?)title ?= ?["']?([^<>]+?)['" >]/]+?)>([^<>]+?)<\/a>/$2<\/a>/gmi; # @TODO: Add 'alt' to all images =cut print $temporary_content; #print to screen but captured by cache if ( $is_collecting_cache eq 'y' ) { save_to_cache( $tmp_cache_file_name, $cache_file_name ); $temporary_content = add_comments( $temporary_content ); # $temporary_content = add_visiads( $temporary_content, $option ); # $temporary_content = add_ad_manager( $temporary_content, $option ); print $temporary_content; #print to screen } ################################################################################ ################################################################################ #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sub add_comments { my $content = shift(); my $comments_list = get_comments_list(); $content =~ s/__ALREADY_EXISTING_COMMENTS__/$comments_list/; return $content; } sub add_visiads { my $content = shift(); my $option = shift(); my $visiads_content = ""; my @visiads_output = (); if ($option ne '') { #avoid processing for the home page # Process Visiads.com ads # catch output of PHP code my $time_processing = time(); @visiads_output = `php /home/worldofn/www/visiads/interface.php`; $visiads_content = join( "\n", @visiads_output ); $time_processing = time() - $time_processing; $visiads_content .= "\n"; } $content =~ s/__VISIADS_ADS__/$visiads_content/; return $content; } sub add_ad_manager { my $content = shift(); my $option = shift(); my $ad_manager_content = ""; my @ad_manager_output = (); if ($option ne '') { #avoid processing for the home page # Process ad manager ads # catch output of PHP code my $time_processing = time(); @ad_manager_output = `php /home/worldofn/www/adClient/interface.php`; $ad_manager_content = join( "\n", @ad_manager_output ); $time_processing = time() - $time_processing; $ad_manager_content .= "\n"; } $content =~ s/X-Powered-By: PHP/5.2.9 Content-type: text/html ###!c:/perl/bin/perl.exe BEGIN { push( @INC, "libs" ); } print "Content-Type: text/html\n\n"; #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Test CPU load use strict; #use warnings; use CGI; use Sys::CpuLoad; my $q = new CGI(); my $skip_cache = $q->param( "skipcache" ); if ( ($ENV{'HTTP_USER_AGENT'} !~ /Googlebot/) && ($ENV{'HTTP_USER_AGENT'} !~ /msnbot/) && ($ENV{'HTTP_USER_AGENT'} !~ /Yahoo\! Slurp/) && ($ENV{'HTTP_USER_AGENT'} !~ /Twiceler/) && ($skip_cache ne 'y') ){ my $min_cpu_load = 2; my $max_cpu_load = 5; my @cpu_load_array = Sys::CpuLoad::load(); # Prevent CPU overloading my $tmp_title = $q->param('title'); $tmp_title =~ s/\-/ /g; if ($cpu_load_array[0] > $max_cpu_load) { print_server_busy_message($tmp_title); } if ($ENV{'HTTP_USER_AGENT'} =~ /(bot[^t]|bot$)/){ if ($cpu_load_array[0] > $min_cpu_load) { print_server_busy_message($tmp_title); } } } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: use DBI; use Data::Dumper; use HTML::Entities; use common_libs; use Switch; use PHP::Serialization qw(serialize unserialize); use Time::Local; use POSIX qw(ceil); # Define main variables my $option = $q->param( "option" ); # Debug message #if ($skip_cache ne 'y') { print("Server under maintenance !"); exit(); } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #NOTE: #the public_html directory must have 0751 rights (not 0777) my $worldnewxRootFolder = "/home/worldnew/public_html"; #my $worldnewxRootFolder = "e:/inetpub/wwwroot/worldnewx.com/"; my $worldofnewsRoot = "http://worldofnews.com/index.pl"; my $cache_dir = "/usr/local/cache/won"; #my $cache_dir = "e:/inetpub/wwwroot/worldnewx/cache"; my $config_file_path = "config.xml"; my $template_index = "index.tpl"; my $news_search_link = "http://wssearch.worldnewx.com/ws_search.pl?apikey=worldnewx.com-1277066279"; my $source_list_link = "http://wssearch.worldnewx.com/gapi/index.php?option=exp_slst"; my $category_list_link = "http://wssearch.worldnewx.com/gapi/index.php?option=exp_clst"; my @current_time = localtime(); my $ch = $current_time[ 2 ]; my $cm = $current_time[ 1 ]; my $cs = $current_time[ 0 ]; my $time_in_minutes = $ch * 60 + $cm; my %aArchiveIndex = ( "a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5, "f" => 6, "g" => 7, "h" => 8, "i" => 9, "j" => 10, "k" => 11, "l" => 12, "m" => 13, "n" => 14, "o" => 15, "p" => 16, "q" => 17, "r" => 18, "s" => 19, "t" => 20, "u" => 21, "v" => 22, "w" => 23, "x" => 24, "y" => 25, "z" => 26 ); #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #Create and initialize debug object my $DBG = new DEBUG(); $DBG->set_flag( 0 ); #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ my $keyword = $q->param( "keyword" ); my $cat = $q->param( "cat" ); my $bottom_menu_id = $q->param( 'bottom_menu_id' ); my $start_record = $q->param( "s" ); my $news_id = $q->param( "nid" ); $keyword = '' unless defined $keyword; $cat = "Top Stories" unless defined $cat; $option = '' unless defined $option; $bottom_menu_id = '' unless defined $bottom_menu_id; $start_record = 0 unless defined $start_record; $start_record = ( $start_record < 0 ) ? 0 : $start_record; $skip_cache = 'n' unless defined $skip_cache; my $is_first_page = get_first_page_flag( $q ); #Define global script variables for sql queries my $dbh = init_database( $config_file_path ); my $sql; my $sth; my $pps = 18; #pages per sheet #Normalize the time my $step = int( $time_in_minutes / 5 ); my $exact_time = $step * 5; my $show_nav_bar = 0; my $cache_file_name = create_cache_file_name( $cat, $keyword, $news_id, $option, $start_record, $bottom_menu_id ); my $tmp_cache_file_name = ""; #used for hold a temporary unique cache file name #............................................. my $cache_content = ""; my $is_collecting_cache = 'n'; # #Try to get content from cache # my $cache_time = 600; if ( $option eq 'view' ) { $cache_time = 3600 * 24 * 30; visit_news( $news_id ); #$skip_cache = 'y'; } if ( $option eq 'search' ) { $skip_cache = 'y'; } #if ($option eq 'site_map') { $skip_cache = 'y'; } #if ($option eq 'google') { $skip_cache = 'y'; } if ( $skip_cache eq 'n' ) { $DBG->show( "" ); #debug hidden text ( Get From Cache : ) $cache_content = try_to_get_cache( $cache_file_name ); if ( $cache_content ne '' ) { $cache_content = add_comments( $cache_content ); $cache_content = add_visiads( $cache_content, $option ); $cache_content = add_ad_manager( $cache_content, $option ); print $cache_content; $DBG->show( "" ); #debug hidden text ( No ) exit(); } } $DBG->show( "" ); #debug hidden text ( No ) $tmp_cache_file_name = start_collect_cache( $cache_file_name ); $is_collecting_cache = 'y'; ################################################################################ ################################################################################ my @category_array = get_categories_array( $dbh, 1 ); my $wnl_tpl = HTML::Template->new( filename => "templates/$template_index", global_vars => 1 ); $wnl_tpl->param( "first_page_flag" => $is_first_page ); # #Get the image from WorldInPhotos.com # my $WIP_Img = ""; eval { $WIP_Img = get_worldinphotos_image(); $wnl_tpl->param( WIP_Link => $WIP_Img->{ 'images_list' }[ 0 ]{ 'link' } ); $wnl_tpl->param( WIP_Photo => $WIP_Img->{ 'images_list' }[ 0 ]{ 'photo' } ); $wnl_tpl->param( WIP_Title => $WIP_Img->{ 'images_list' }[ 0 ]{ 'title' } ); $wnl_tpl->param( WIP_Category => $WIP_Img->{ 'images_list' }[ 0 ]{ 'category' } ); }; if ( $@ ) { } # #Get the list of channels for World Channels # # - construct the categories arrays for two rows display (right side) my @category_array_l = (); my @category_array_r = (); my $half_way = int( $#category_array / 2 ); for ( my $i = 0 ; $i <= $#category_array ; $i++ ) { if ( $i <= $half_way ) { push( @category_array_l, $category_array[ $i ] ); } else { push( @category_array_r, $category_array[ $i ] ); } } #Assign variables to template $wnl_tpl->param( 'category_array_l' => \@category_array_l ); $wnl_tpl->param( 'category_array_r' => \@category_array_r ); # #Create main menu # my $news_vlist_content = ""; my $ticketnetwork_ads = HTML::Template->new( filename => "templates/ticketnetwork.tpl" ); # $wnl_tpl->param( 'ticketnetwork_ads' => $ticketnetwork_ads->output() ); ########################################################## switch ( $option ) { case 'search' { my $keywords = $q->param( "keywords" ); my $category = $q->param( "category" ); my $source = $q->param( "source" ); my @tmp_news_aray = (); my @news_array; my $nav_bar = ""; if ( $keywords ne '' ) { #Search by keyword @news_array = get_and_unserialize( $news_search_link . "&opt=kwd&nr=$pps&k=$keywords&start=$start_record" ); if ( !$news_array[ 0 ]->{ Error } ) { @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; $news_vlist_content = create_news_list_content( \@tmp_news_aray ); } #Calculate the number of pages if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } } elsif ( ( $category ne '' ) || ( $source ne '' ) ) { #Search by category and source @news_array = get_and_unserialize( $news_search_link . "&opt=mix&nr=$pps&c=$category&s=$source&start=$start_record" ); @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; $news_vlist_content = create_news_list_content( \@tmp_news_aray ); #Calculate the number of pages if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } } else { #Display advanced search box #Get sources list my @source_name_array = get_and_unserialize( $source_list_link ); #Get categories list my @category_name_array = get_and_unserialize( $category_list_link ); #echo(Dumper(@source_name_array));exit(); #Assign to template my $search_tpl = HTML::Template->new( filename => "templates/search.tpl", global_vars => 1 ); $search_tpl->param( source_name_array => \@{ $source_name_array[ 0 ] } ); $search_tpl->param( category_name_array => \@{ $category_name_array[ 0 ] } ); $news_vlist_content = $search_tpl->output(); $tmp_news_aray[ 0 ]->{ title } = "Advanced Search"; $tmp_news_aray[ 0 ]->{ description } = "WorldOfNews.com Advanced Search"; } $wnl_tpl->param( page_title => "Advanced Search"); $wnl_tpl->param( page_keywords => get_keywords( $tmp_news_aray[ 0 ]->{ description } ) ); $wnl_tpl->param( page_description => get_description( $tmp_news_aray[ 0 ]->{ description } ) ); $wnl_tpl->param( navigation_bar => $nav_bar ); $wnl_tpl->param( show_nav_bar => $show_nav_bar ); $wnl_tpl->param( topstories_content => $news_vlist_content ); } case 'clst' { #Category list #Find out category code my $category_id = CategoryName2Id( $cat ); =debug select (STDOUT); print $news_search_link . "&opt=cat&nr=$pps&c=$category_id&start=$start_record\n"; exit(); =cut my @news_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=$pps&c=$category_id&start=$start_record" ); eval { my @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; $news_vlist_content = create_news_list_content( \@tmp_news_aray ); #Calculate the number of pages my $nav_bar = ""; if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } $wnl_tpl->param( navigation_bar => $nav_bar ); }; if ( $@ ) { } $wnl_tpl->param( page_title => "$cat News, World $cat News" ); $wnl_tpl->param( page_keywords => get_keywords( "$cat News, World $cat News" ) ); $wnl_tpl->param( page_description => get_description( "$cat News, World $cat News" ) ); $wnl_tpl->param( topstories_content => $news_vlist_content ); $wnl_tpl->param( show_nav_bar => $show_nav_bar ); } case 'view' { #Item view visit_news( $news_id ); #Display the news my @tmp_arr = get_and_unserialize( $news_search_link . "&opt=arh&permaid=$news_id" ); @tmp_arr = @{ $tmp_arr[ 0 ]->{ records } }; #For option = view we need publication date not and for this we apply the following algorithm # - save the old pubdate my $tmp_pub_date = $tmp_arr[ 0 ]->{ pub_date }; # - process the record my $news_details = adjust_news_object_fields( $tmp_arr[ 0 ], 'n' ); # - process the saved date in the format we need # - restore the date property #echo($tmp_pub_date);exit(); $tmp_arr[ 0 ]->{ pub_date } = decode_mysql_date( $tmp_pub_date ); #Get news by category my $category_id = $news_details->{ cat_id }; my @news_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=6&c=$category_id" ); my @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; my $aux_topic_content = ""; foreach my $row ( @tmp_news_aray ) { $row = adjust_news_object_fields( $row, 'n' ); my $news_content = HTML::Template->new( filename => "templates/newsheadlines_layout.tpl" ); $news_content->param( 'won_link' => $row->{ won_link } ); $news_content->param( 'title' => $row->{ title } ); $news_content->param( 'source_name' => $row->{ source_name } ); $aux_topic_content .= $news_content->output(); } #Get news by source my $source = $news_details->{ source_name }; @news_array = get_and_unserialize( $news_search_link . "&opt=src&nr=6&s=$source" ); @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; my $aux_source_content = ""; foreach my $row ( @tmp_news_aray ) { my $news_content = HTML::Template->new( filename => "templates/newsheadlines_layout.tpl" ); $row = adjust_news_object_fields( $row, 'n' ); $news_content->param( 'won_link' => $row->{ won_link } ); $news_content->param( 'title' => $row->{ title } ); $news_content->param( 'source_name' => $row->{ source_name } ); $aux_source_content .= $news_content->output(); } my $newsitem_template = HTML::Template->new( filename => "templates/newsdetails_layout.tpl" ); $newsitem_template->param( id => $news_details->{ permaid } ); $newsitem_template->param( title => $news_details->{ title } ); $newsitem_template->param( description => $news_details->{ description } ); $newsitem_template->param( cname => $news_details->{ cname } ); $newsitem_template->param( enc_category => $news_details->{ enc_category } ); $newsitem_template->param( link => $news_details->{ link } ); $newsitem_template->param( won_link => $news_details->{ won_link } ); $newsitem_template->param( source_name => $news_details->{ source_name } ); $newsitem_template->param( pub_date => $news_details->{ pub_date } ); $newsitem_template->param( aux_topic_content => $aux_topic_content ); $newsitem_template->param( aux_source_content => $aux_source_content ); $wnl_tpl->param( page_title => $news_details->{ title } ); $wnl_tpl->param( page_keywords => get_keywords( $news_details->{ description } ) ); $wnl_tpl->param( page_description => get_description( $news_details->{ description } ) ); $news_vlist_content = $newsitem_template->output(); $wnl_tpl->param( topstories_content => $news_vlist_content ); } case 'site_map' { #construct site map #Get categories list my @category_name_array = get_and_unserialize( $category_list_link ); my @tmp_category_name_array = @{ $category_name_array[ 0 ] }; @category_name_array = (); foreach ( @tmp_category_name_array ) { # echo($_->{name}); $_->{ link } = $_->{ name }; $_->{ link } =~ s/^([\\__]+)//g; $_->{ link } =~ s/( +)/\+/g; push( @category_name_array, $_ ); } my $sitemap_tpl = HTML::Template->new( filename => "templates/site_map.tpl", global_vars => 1 ); $sitemap_tpl->param( tree => \@category_name_array ); $news_vlist_content = $sitemap_tpl->output(); $wnl_tpl->param( page_title => "Site Map" ); $wnl_tpl->param( page_keywords => "WorldOfNews.com Site Map" ); $wnl_tpl->param( page_description => "WorldOfNews.com Site Map" ); $wnl_tpl->param( topstories_content => $news_vlist_content ); =start echo(\@category_name_array); exit(); =cut } case 'rss' { my $category = $q->param( "cat" ); #Find out category code my $category_id = CategoryName2Id( $category ); my @tmp_news_aray = (); my @news_array = (); @news_array = get_and_unserialize( $news_search_link . "&opt=mix&nr=$pps&c=$category_id" ); @news_array = @{ $news_array[ 0 ]->{ records } }; #Workaround to not finish the output here: $wnl_tpl = HTML::Template->new( filename => "templates/rss.tpl" ); foreach ( @news_array ) { #if ( length( $_->{ description } ) > 200 ) { $_->{ description } = substr( $_->{ description }, 0, 200 ) . "..."; } if ( length( $_->{ description } ) > 200 ) { $_->{ description } = get_short_description($_->{ description }); } push( @tmp_news_aray, { 'title' => $_->{ title }, 'won_link' => $_->{ won_link }, 'description' => strip_slashes($_->{ description }), 'source_name' => $_->{ source_name }, 'pub_date' => $_->{ pub_date }, 'img' => $_->{ img }, 'cname' => $_->{ cname } } ); } $wnl_tpl->param( current_content => \@tmp_news_aray ); $wnl_tpl->param( title => $category ); my $clink = $category; $clink =~ s/( +)/\+/g; $wnl_tpl->param( 'link' => "http://www.worldofnews.com/rss/$clink" ); $wnl_tpl->param( 'description' => "$category News, World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( 'logo' => 'http://www.worldofnews.com/images/logo.gif' ); $wnl_tpl->param( 'now_date_time' => ( scalar localtime( time() ) ) ); } case 'google' { my $google_tpl = HTML::Template->new( filename => "templates/google.tpl" ); $wnl_tpl->param( page_title => "World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( page_keywords => "World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( page_description => "World News, Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( google_page => 1 ); $wnl_tpl->param( topstories_content => $google_tpl->output() ); } case 'about_us' { my $about_us_tpl = HTML::Template->new( filename => "templates/about_us.tpl" ); $wnl_tpl->param( topstories_content => $about_us_tpl->output() ); $wnl_tpl->param( page_title => "About Us" ); } case 'terms_of_service' { my $tos_tpl = HTML::Template->new( filename => "templates/terms_of_service.tpl" ); $wnl_tpl->param( topstories_content => $tos_tpl->output() ); $wnl_tpl->param( page_title => "Terms of Service" ); } case 'privacy_policy' { my $privacy_policy_tpl = HTML::Template->new( filename => "templates/privacy_policy.tpl" ); $wnl_tpl->param( topstories_content => $privacy_policy_tpl->output() ); $wnl_tpl->param( page_title => "Privacy Policy" ); } case 'contact_us' { my $contact_us_tpl = HTML::Template->new( filename => "templates/contact_us.tpl" ); $wnl_tpl->param( topstories_content => $contact_us_tpl->output() ); $wnl_tpl->param( page_title => "Contact Us" ); } else { #Home page #Get Frontbox content my $frontbox_content .= file_get_contents( "$worldnewxRootFolder/frontbox/feeds/wnl_frontbox.htm" ); #Get Top Stories list my @news_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=$pps&c=2684354584" ); =start select(STDOUT); #print ($news_search_link . "&opt=cat&nr=$pps&c=2684354584");exit(); print Dumper(@news_array);exit(); =cut my @tmp_news_aray = @{ $news_array[ 0 ]->{ records } }; #Calculate the number of pages my $nav_bar = ""; if ( $#tmp_news_aray > -1 ) { $nav_bar = get_nav_bar( $start_record, $pps, $news_array[ 0 ]->{ total_estimated } ); $show_nav_bar = 1; } else { $show_nav_bar = 0; } $wnl_tpl->param( show_nav_bar => $show_nav_bar ); $wnl_tpl->param( navigation_bar => $nav_bar ); $news_vlist_content = create_news_list_content( \@tmp_news_aray ); #Create right section $wnl_tpl->param( 'news_by_cat' => create_right_section( $dbh ) ); $wnl_tpl->param( page_title => $tmp_news_aray[ 0 ]->{ title } ); # $wnl_tpl->param( page_keywords => get_keywords($tmp_news_aray[0]->{description}) ); # $wnl_tpl->param( page_description => get_description($tmp_news_aray[0]->{description}) ); $wnl_tpl->param( page_keywords => "Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( page_description => "Breaking Stories, News Head Lines, Top Stories, Newspapers, Worldwide News" ); $wnl_tpl->param( frontbox_content => $frontbox_content ); $wnl_tpl->param( topstories_content => $news_vlist_content ); $wnl_tpl->param( homepage => 1 ); #Create news array for bottom boxes #'Top Stories', 'Business', 'Education', 'Entertainment', 'Health', 'Law', 'Movie', 'Music', 'Sport', 'Technology', 'US', 'World' my @newscateg = ( 'topstories', 'business', 'education', 'entertainment', 'health', 'law', 'movie', 'music', 'sport', 'technology', 'us', 'world' ); foreach my $categ ( @newscateg ) { my $newsbox_tmpl = HTML::Template->new( filename => "$worldnewxRootFolder/newsbox/feeds/" . $categ . "_newsbox.htm" ); $wnl_tpl->param( $categ . "_newsbox" => $newsbox_tmpl->output() ); } } } # Calculate current date for the archive my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()-86400); $year += 1900; $mon += 1; my $current_date = "$year-$mon-$mday"; $wnl_tpl->param('current_date' => $current_date); my $temporary_content = $wnl_tpl->output; =SEO FIX: Teporary took out # FIX: October 27, 2007. # Updated: 22 Aug 2008 # Reason: SEO optimization (add title on all links) # Remove all 'titles' from links $temporary_content =~ s/]+?)title ?= ?["']?([^<>]+?)(['"]|([> ]))/]+?)title ?= ?["']?([^<>]+?)['" >]/]+?)>([^<>]+?)<\/a>/$2<\/a>/gmi; # @TODO: Add 'alt' to all images =cut print $temporary_content; #print to screen but captured by cache if ( $is_collecting_cache eq 'y' ) { save_to_cache( $tmp_cache_file_name, $cache_file_name ); $temporary_content = add_comments( $temporary_content ); # $temporary_content = add_visiads( $temporary_content, $option ); # $temporary_content = add_ad_manager( $temporary_content, $option ); print $temporary_content; #print to screen } ################################################################################ ################################################################################ #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sub add_comments { my $content = shift(); my $comments_list = get_comments_list(); $content =~ s/__ALREADY_EXISTING_COMMENTS__/$comments_list/; return $content; } sub add_visiads { my $content = shift(); my $option = shift(); my $visiads_content = ""; my @visiads_output = (); if ($option ne '') { #avoid processing for the home page # Process Visiads.com ads # catch output of PHP code my $time_processing = time(); @visiads_output = `php /home/worldofn/www/visiads/interface.php`; $visiads_content = join( "\n", @visiads_output ); $time_processing = time() - $time_processing; $visiads_content .= "\n"; } $content =~ s/__VISIADS_ADS__/$visiads_content/; return $content; } sub add_ad_manager { my $content = shift(); my $option = shift(); my $ad_manager_content = ""; my @ad_manager_output = (); if ($option ne '') { #avoid processing for the home page # Process ad manager ads # catch output of PHP code my $time_processing = time(); @ad_manager_output = `php /home/worldofn/www/adClient/interface.php`; $ad_manager_content = join( "\n", @ad_manager_output ); $time_processing = time() - $time_processing; $ad_manager_content .= "\n"; } $content =~ s/__AD_MANAGER_ADS__/$ad_manager_content/; return $content; } sub get_and_unserialize { my $url = shift(); my $serialized_news = get( $url ); my @news_array = (); eval { @news_array = unserialize( $serialized_news ); }; if ( $@ ) { print( "\n\n Error: $serialized_news \n\n" ); print Dumper( $@ ); exit(); } return @news_array; } sub get_worldinphotos_image { my $url = "http://www.worldinphotos.com/ws_export/300x250/tags/world.jpg"; return unserialize( get( $url ) ); } #Returns the array for the right section sub create_right_section { my $dbh = shift(); my @special_category_array = ( 268435469, # Business 671088651, # Education 671088644, # Entertainment 1073741831, # Health 1610612742, # Law 1744830518, # Movie News 1744830569, # Music 2550136844, # Sports 2684354563, # Technology 2818572289, # Us 3087007746 # World ); my $return_content = ""; foreach my $category ( @special_category_array ) { my $section_tpl = HTML::Template->new( filename => "templates/news_section.tpl" ); my @tmp_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=2&c=$category" ); my @tmp_data_arr = @{ $tmp_array[ 0 ]->{ records } }; @tmp_array = (); foreach ( @tmp_data_arr ) { $_->{ enc_category } = url_encode( $_->{ cname } ); $_->{ img } = ""; if ( length( $_->{ description } ) > 55 ) { my $break_char_index = index($_->{ description }, '', 55); if ($break_char_index > -1) { $break_char_index += 4; # Also add the length of $_->{ description } = substr( $_->{ description }, 0, $break_char_index ) . "..."; } # $_->{ description } = substr( $_->{ description }, 0, 55 ) . " ..."; } $_->{ description } = strip_slashes($_->{ description }); $_->{ pub_date } = format_pub_date( $_->{ pub_date } ); push( @tmp_array, $_ ); } $section_tpl->param( enc_category_name => $tmp_array[ 0 ]->{ enc_category } ); $section_tpl->param( category_name => $tmp_array[ 0 ]->{ cname } ); $section_tpl->param( news_section => \@tmp_array ); $return_content .= $section_tpl->output(); } return $return_content; } sub get_news_array { my $cat_id = shift(); my @tmp_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=5&c=$cat_id" ); return @{ $tmp_array[ 0 ]->{ records } }; } sub create_news_list_content { my @news_list = @{ shift() }; my $news_vlist_content = ''; if ( $#news_list > -1 ) { foreach my $row ( @news_list ) { $news_vlist_content .= format_story( $row ); } } else { $news_vlist_content .= format_story( 0 ); } return $news_vlist_content; } sub format_story { my $row = shift(); my $news_vlist_content = ''; ################################################### my $news_content = HTML::Template->new( filename => "templates/news_body.tpl" ); if ( $row ) { $row = adjust_news_object_fields( $row ); $news_content->param( 'id' => $row->{ permaid } ); $news_content->param( 'link' => $row->{ link } ); $news_content->param( 'won_link' => $row->{ won_link } ); $news_content->param( 'title' => $row->{ title } ); $news_content->param( 'description' => $row->{ description } ); $news_content->param( 'site_name' => $row->{ source_name } ); $news_content->param( 'pub_date' => $row->{ pub_date } ); $news_content->param( 'topic' => $row->{ cname } ); $news_content->param( 'img' => $row->{ img } ); $news_content->param( 'visits' => $row->{ visits } ); } else { $news_content->param( 'no_records' => 1 ); } $news_vlist_content .= $news_content->output(); #push ( @topstories_array, { 'title' => $rows[2], 'description' => $rows[3]}); return $news_vlist_content; } =start /** * @param object $row * @param character $limit_description_length * * @return object */ =cut sub adjust_news_object_fields { my $row = shift(); my $limit_description_length = shift(); $limit_description_length = 'y' unless defined $limit_description_length; $row->{ cat_id } = int( $row->{ cat_id } ); $row->{ geo_id } = int( $row->{ geo_id } ); $row->{ permaid } = int( $row->{ permaid } ); #$row->{won_link} = "/view-" . $row->{permaid} . ".html"; =start $row->{description} = decode_entities($row->{description}); $row->{description} =~ s/<([^<]+?)>//g; $row->{title} =~ s/<([^<]+?)>//g; =cut if ( ( length( $row->{ description } ) > 200 ) && ( $limit_description_length eq 'y' ) ) { $row->{ description } = get_short_description($row->{ description }); } $row->{ description } = strip_slashes($row->{ description }); if ( ( $row->{ source_name } eq 'aniin.com' ) || ( $row->{ source_name } eq 'IANS.in' ) ) { my $encoded_title = $row->{ title }; $encoded_title =~ s/[^a-zA-Z0-9]/-/g; $encoded_title =~ s/\-(\-+)/-/g; $encoded_title =~ s/^(\-+)//g; $encoded_title =~ s/(\-+)$//g; $row->{ won_link } = "http://www.indiasnews.com/News-" . $row->{ permaid } . "-$encoded_title.html"; $row->{ link } = $row->{ won_link }; } #Trick: if 0 views generate random between 0 and 10; if ( $row->{ votes } eq 0 ) { $row->{ votes } = int( rand( 10 ) ); } $row->{ pub_date } = format_pub_date( $row->{ pub_date } ); $row->{ enc_category } = encode_entities( $row->{ cname } ); return $row; } sub get_short_description{ my $description = shift(); $description = strip_slashes($description); my $break_char_index = index($description, '', 200); if ($break_char_index > -1) { $break_char_index += 4; # Also add the length of }else{ $break_char_index = index($description, ' ', 200); } $description = substr( $description, 0, $break_char_index ) . "..."; return $description; } sub format_pub_date { my $pub_date = shift(); #2008-04-13 21:12:38 => 1210702358 my @date_time = split / /, $pub_date; my ( $year, $month, $day ) = split /\-/, $date_time[ 0 ]; my ( $hour, $minute, $second ) = split /\:/, $date_time[ 1 ]; if ( $day == 0 ) { $day = 1; } =debug select (STDOUT); print "$pub_date \n"; print "$second, $minute, $hour, $day, $month, $year \n\n"; =cut $pub_date = time() - timelocal( $second, $minute, $hour, $day, $month - 1, $year ); my $tmp_time = $pub_date; my ( $s, $mi, $h, $d ); if ( $tmp_time > 60 ) { $mi = int( $tmp_time / 60 ); $s = $tmp_time % 60; if ( $mi > 60 ) { $h = int( $mi / 60 ); $mi = $mi % 60; if ( $h > 24 ) { $d = int( $h / 24 ); $h = $h % 24; } } } else { $mi = $tmp_time; } $pub_date = ''; if ( abs( "$d" ) > 0 ) { $pub_date = $d . " days ago"; } else { if ( $h > 0 ) { $pub_date .= $h . " hours and "; } $pub_date .= $mi . " minutes ago"; } return $pub_date; } sub decode_mysql_date { my $pub_date = shift(); #2008-04-13 21:12:38 my @date_time = split / /, $pub_date; my ( $year, $month, $day ) = split /\-/, $date_time[ 0 ]; my ( $hour, $minute, $second ) = split /\:/, $date_time[ 1 ]; my $ret_val = ""; if ( ( $year > 0 ) && ( $day > 0 ) ) { $pub_date = timelocal( $second, $minute, $hour, $day, $month - 1, $year ); $pub_date = scalar localtime( $pub_date ); $pub_date =~ s/( +)/ /g; my @date_array = split / /, $pub_date; my @time_array = split /:/, $date_array[ 3 ]; $ret_val = sprintf( "%s %s, %s %s:%s", $date_array[ 1 ], $date_array[ 2 ], $date_array[ 4 ], $time_array[ 0 ], $time_array[ 1 ] ); } else { $ret_val = $pub_date; } return $ret_val; } #Creates a database connection and returns databasehandler sub init_database { my $config_file_path = shift(); my $config_xml = XMLin( $config_file_path ); my $db_host = $config_xml->{ parserSettings }{ db_host }; my $db_name = $config_xml->{ parserSettings }{ db_name }; my $db_user = $config_xml->{ parserSettings }{ db_user }; my $db_password = $config_xml->{ parserSettings }{ db_password }; if ( $db_password eq "''" ) { $db_password = ''; } my $dbh = DBI->connect( "dbi:mysql:$db_name:$db_host", "$db_user", "$db_password" ) or die( "Cannot connect to the database" ); return $dbh; } sub create_cache_file_name { my ( $cat, $keyword, $news_id, $option, $start_record, $bottom_menu_id ) = @_; # #Create cache file name # my $cache_file_name = ''; if ( $cat ) { $cache_file_name = $cat; } if ( $keyword ) { $cache_file_name = $keyword; } $cache_file_name .= $news_id . $option . $start_record . $bottom_menu_id; $cache_file_name =~ s/[^a-z0-9A-Z]//g; # #Treate cache # #Split the cache in subdirectories in order to be retreived quickly #In this case will be implemented a three level cache mechanism for ( my $i = 0 ; $i < 3 ; $i++ ) { my $cache_dirLi = substr( $cache_file_name, $i, 1 ); $cache_dir = "$cache_dir/$cache_dirLi"; #$cache_dir is global if ( !( -e "$cache_dir" && -d "$cache_dir" ) ) { mkdir( "$cache_dir" ); chmod 0777, "$cache_dir"; } } $cache_file_name = $cache_dir . "/" . $cache_file_name; return $cache_file_name; } sub try_to_get_cache { my $cache_file_name = shift(); my @cache_stat = stat( "$cache_file_name.ch" ); my $cache_mtime = $cache_stat[ 9 ]; my $cache_size = $cache_stat[ 7 ]; my $current_time = time(); my $return_value = ""; if ( ( !$cache_mtime ) ) { $cache_mtime = 0; open CFH, "> $cache_file_name.ch"; close CFH; $DBG->show( "Closing CFH on checkTheCache function" ); } $DBG->show( "Cache Data \n CacheSize:$cache_size \n CacheModifiedTime:$cache_mtime \n CacheLife:" . ( $current_time - $cache_mtime ) . " \n Keyword:$keyword \n Option:$option " ); if ( ( $cache_size > 1000 ) && ( $cache_mtime > 0 ) && ( $current_time - $cache_mtime < $cache_time ) ) { $return_value = file_get_contents( "$cache_file_name.ch" ); $return_value .= "\n"; $return_value .= "\n"; } else { $return_value = ''; } return $return_value; } sub save_to_cache { my $tmp_cache_file_name = shift(); my $cache_file_name = shift(); if ( $tmp_cache_file_name ne "" ) { close( FH ); $DBG->show( "Closing FH on save_to_cache function" ); chmod 0777, "$tmp_cache_file_name.ch"; select( STDOUT ); my @cacheStat = stat( "$tmp_cache_file_name.ch" ); if ( $cacheStat[ 7 ] > 1000 ) { #stat[7] = filesize if ( unlink "$cache_file_name.ch" ) { $DBG->show( "File $cache_file_name.ch deleted ...\n" ); } else { $DBG->show( "File $cache_file_name.ch can not be deleted ...\n" ); } if ( rename "$tmp_cache_file_name.ch", "$cache_file_name.ch" ) { $DBG->show( "$tmp_cache_file_name.ch renamed to $cache_file_name.ch...\n" ); } else { $DBG->show( "$tmp_cache_file_name.ch can not be renamed to $cache_file_name.ch...\n" ); } } } } #Include a file sub include { my $fileName = shift(); open IFH, "<" . $fileName; while ( ) { print $_; } close( IFH ); $DBG->show( "Closing IFH on include function" ); } #Initiates tho collect the content to be saved into the cache sub start_collect_cache { my $cache_file_name = shift(); #Open cache file handler my $tmp_cache_file_name = $cache_file_name . time(); open FH, "> " . $tmp_cache_file_name . ".ch"; select( FH ); return $tmp_cache_file_name; } #Gets content from a file sub file_get_contents { my $file_name = shift(); my @content_lines = (); open( TMPFH, $file_name ); @content_lines = ; close TMPFH; return join( "\n", @content_lines ); } #Returh the is_homepage glag sub get_first_page_flag { my $q = shift(); my $ret_val = 0; if ( !$q->param( 'cat' ) && ( ( !$q->param( 'option' ) ) || ( $q->param( 'option' ) eq 'specops' ) ) && !$q->param( 'keyword' ) ) { $ret_val = 1; } return $ret_val; } #Visit a news sub visit_news { my $id = shift(); get( "http://wssearch.worldnewx.com/ws_status.pl?apikey=worldnewx.com-1277066279&opt=vis&permaid=$id" ); } #Vote for a news sub vote_news { my $id = shift(); get( "http://wssearch.worldnewx.com/ws_status.pl?apikey=worldnewx.com-1277066279&opt=vot&permaid=$id" ); } sub select_STDOUT { close( FH ); select( STDOUT ); $DBG->show( "Closing FH and selecting STDOUT on select_STDOUT function" ); } sub mysql_query { my $sql = shift(); my $dbh = shift(); my $sth = $dbh->prepare( $sql ); $sth->execute() or die( "Invalid query ($sql) !!!" ); $sth->finish(); } #Returns the categories array sub get_categories_array { my $dbh = shift(); my $clevel = shift(); my $sql = "SELECT * FROM `category`"; if ( $clevel > 0 ) { $sql .= " WHERE `clevel`=$clevel"; } $sql .= " ORDER BY `weight` DESC, `title` ASC"; my $sth = $dbh->prepare( $sql ); $sth->execute() || die( "Could not execute sql !!!" ); my @category_array = (); while ( my $cat_rows = $sth->fetchrow_hashref ) { push( @category_array, { 'id' => $cat_rows->{ 'id' }, 'title' => $cat_rows->{ 'title' }, 'link' => url_encode( $cat_rows->{ 'title' } ) } ); } $sth->finish(); return @category_array; } sub CategoryName2Id { my $category_name = shift(); my $sql = "SELECT `alias` FROM `category` WHERE `title`='$category_name'"; my $sth = $dbh->prepare( $sql ); $sth->execute() || die( "Could not execute sql !!!" ); my $cat_row = $sth->fetchrow_hashref; return ( ( $aArchiveIndex{ lc( substr( $category_name, 0, 1 ) ) } << 27 ) + $cat_row->{ alias } ); } sub url_encode { my ( $string ) = @_; $string =~ s/(\W)/"%" . unpack("H2", $1)/ge; #$string# =~ tr/.//; return $string; } sub url_decode { my ( $string ) = @_; $string =~ tr/+/ /; $string =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; return $string; } sub get_description { my $content = shift(); return strip_slashes(strip_tags($content)); } sub strip_tags{ my $content = shift(); $content =~ s/\<([^>]+?)\>/ /g; $content =~ s/ +/ /g; return $content; } sub strip_slashes{ my $content = shift(); $content =~ s/\\//g; return $content; } sub get_keywords { my $content = shift(); my $commonWordsArray = "able|about|after|again|all|almost|already|also|although|am|an|and|another|any|are|are|around|as|at|based|be|because|been|before|being|between|both|bring|but|by|came|can|com|come|comes|could|did|do|does|doing|done|each|eight|else|etc|even|every|five|for|four|from|get|gets|getting|go|going|got|had|has|have|he|he|her|here|him|himself|his|how|however|href|http|if|in|including|into|is|it|it|its|just|kb|know|like|looks|mailto|make|making|many|may|mb|me|means|might|more|more|most|move|mr|much|must|my|need|needs|never|nice|nine|no|not|now|of|often|oh|ok|on|on|one|only|or|org|other|our|out|over|own|piece|rather|re|really|said|same|say|says|see|seven|several|she|should|since|single|six|so|some|something|still|stuff|such|take|ten|than|that|the|their|them|them|then|there|there|these|they|they|thing|things|this|those|three|through|to|too|took|two|under|up|us|use|used|using|usual|ve|very|via|want|was|way|we|we|well|were|what|when|where|whether|which|while|whilst|who|why|will|with|within|would|yes|yet|you|your"; $content =~ s/\b($commonWordsArray)\b//g; $content =~ s/<([^>]+?)>//g; $content =~ s/(\s+)/,/g; $content =~ s/,(,+)/,/g; return $content; } =start /** * Creates the navigation bar * @param int $start_record, * @param int $pps, * @param int $total_estimated * *@return string */ =cut sub get_nav_bar { my ( $start_record, $pps, $no_of_records ) = @_; my $uri = $ENV{ REQUEST_URI }; #Get $uri like prefix-Title-s00?p1=v1&p2=v2 $uri =~ s/\-s(\d+?)\b//; #Format $uri like prefix-Title?p1=v1&p2=v2 my $request_uri = $uri; my $total_pages = ceil( $no_of_records / $pps ); my $current_page = ceil( $start_record / $pps ); my $navbar_tpl = HTML::Template->new( filename => "templates/nav_bar.tpl" ); #Construct PREV link my $prev_link = $uri; if ( $start_record > 0 ) { my $start = 0; if ( $start_record - $pps >= 0 ) { $start = $start_record - $pps; } $prev_link =~ s/(\?|$)/-s$start$1/; } my $show_prev = 0; if ( $start_record > 0 ) { $show_prev = 1; } $navbar_tpl->param( show_prev => $show_prev ); $navbar_tpl->param( link_prev => $prev_link ); #Construct NEXT link my $next_link = $uri; if ( $start_record < $no_of_records ) { my $start = $no_of_records; if ( $start_record + $pps <= $no_of_records ) { $start = $start_record + $pps; } $next_link =~ s/(\?|$)/-s$start$1/; } my $show_next = 0; if ( $start_record < $no_of_records ) { $show_next = 1; } $navbar_tpl->param( show_next => $show_next ); $navbar_tpl->param( link_next => $next_link ); #return ""; my $tmp_page; my @pages_array = (); my @progress = ( 1000, 100, 10, 5, 4, 3, 2, 1 ); if ( $request_uri eq '/index.pl?skipcache=y') { $request_uri = 'Top+Stories'; =start my $OLD_FH = select(); select (STDOUT); print ""; select ($OLD_FH); =cut } my $page_link = ""; my $page_nr; foreach $step ( @progress ) { $page_link = $request_uri; my $start = 0; if ( $start_record - $step * $pps >= 0 ) { $start = $start_record - $step * $pps; $page_nr = ceil( $start / $pps ) + 1; $page_link =~ s/(\?|$)/-s$start$1/; push( @pages_array, { 'link_number' => $page_link, 'number' => $page_nr, 'selected' => 0 } ); } } $page_nr = ceil( $start_record / $pps ) + 1; push( @pages_array, { 'link_number' => $request_uri, 'number' => $page_nr, 'selected' => 1 } ); @progress = reverse @progress; foreach $step ( @progress ) { $page_link = $request_uri; my $start = 0; if ( $start_record + $step * $pps <= $no_of_records ) { $start = $start_record + $step * $pps; $page_nr = ceil( $start / $pps ) + 1; $page_link =~ s/(\?|$)/-s$start$1/; push( @pages_array, { 'link_number' => $page_link, 'number' => $page_nr, 'selected' => 0 } ); } } $navbar_tpl->param( pages_array => \@pages_array ); return $navbar_tpl->output(); } sub echo { my $OLD_FH = select(); select( STDOUT ); print Dumper( \@_ ); select( $OLD_FH ); } sub get_comments_list { # Get the comments list my $comments_base_url = "http://wssearch.worldnewx.com/ws_comments.pl?apikey=worldofnews.com-1495998270"; my $comments_list_url = $comments_base_url . "&opt=get&id=0&docid=$news_id"; my @tmp_comments_array = get_and_unserialize( $comments_list_url ); @tmp_comments_array = @{ $tmp_comments_array[ 0 ][ 1 ] }; my @comments_array = (); my $iterator = 0; foreach ( @tmp_comments_array ) { if ( $_->{ pending_delete } eq 'n' ) { $_->{ pending_delete } = 0; } #pending delete $_->{ usermail } = ''; #Hide email $_->{ apikey } = ''; #Hide api key $_->{ bg_color } = ( $iterator % 2 == 0 ) ? '#FFFFFF' : '#FFFF99'; #Add background color push( @comments_array, $_ ); $iterator++; } my $comments_list = ""; if ( $#comments_array > -1 ) { my $tpl_comment_list = HTML::Template->new( filename => "templates/comment_body.tpl", global_vars => 1 ); $tpl_comment_list->param( 'comments_array' => \@comments_array ); $comments_list = $tpl_comment_list->output(); } return $comments_list; } sub print_server_busy_message{ my $message = shift(); print "

$message

\n
\n"; print "Server busy! Please try again in a few seconds !"; exit(); } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #::::::::::: CLASS DEBUG ::::::::::::::::::::::::::::::::: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: package DEBUG; use Data::Dumper; my $flag = 0; #1 = debug activated my $__START_TIME__; sub new() { $__START_TIME__ = time(); bless {}, shift(); } #Gets the start time of the debug sub get_start_time { return $__START_TIME__; } #Show the debug message according with the flag sub show { my $this = shift(); my $message = shift(); if ( $flag == 1 ) { my $hash = shift(); my $OLD_FH = select(); select( STDOUT ); print Dumper( $message ); select( $OLD_FH ); } } #Sets a value for the flag sub set_flag { my $this = shift(); my $newVal = shift(); $flag = $newVal; } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1; /$ad_manager_content/; return $content; } sub get_and_unserialize { my $url = shift(); my $serialized_news = get( $url ); my @news_array = (); eval { @news_array = unserialize( $serialized_news ); }; if ( $@ ) { print( "\n\n Error: $serialized_news \n\n" ); print Dumper( $@ ); exit(); } return @news_array; } sub get_worldinphotos_image { my $url = "http://www.worldinphotos.com/ws_export/300x250/tags/world.jpg"; return unserialize( get( $url ) ); } #Returns the array for the right section sub create_right_section { my $dbh = shift(); my @special_category_array = ( 268435469, # Business 671088651, # Education 671088644, # Entertainment 1073741831, # Health 1610612742, # Law 1744830518, # Movie News 1744830569, # Music 2550136844, # Sports 2684354563, # Technology 2818572289, # Us 3087007746 # World ); my $return_content = ""; foreach my $category ( @special_category_array ) { my $section_tpl = HTML::Template->new( filename => "templates/news_section.tpl" ); my @tmp_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=2&c=$category" ); my @tmp_data_arr = @{ $tmp_array[ 0 ]->{ records } }; @tmp_array = (); foreach ( @tmp_data_arr ) { $_->{ enc_category } = url_encode( $_->{ cname } ); $_->{ img } = ""; if ( length( $_->{ description } ) > 55 ) { my $break_char_index = index($_->{ description }, '', 55); if ($break_char_index > -1) { $break_char_index += 4; # Also add the length of $_->{ description } = substr( $_->{ description }, 0, $break_char_index ) . "..."; } # $_->{ description } = substr( $_->{ description }, 0, 55 ) . " ..."; } $_->{ description } = strip_slashes($_->{ description }); $_->{ pub_date } = format_pub_date( $_->{ pub_date } ); push( @tmp_array, $_ ); } $section_tpl->param( enc_category_name => $tmp_array[ 0 ]->{ enc_category } ); $section_tpl->param( category_name => $tmp_array[ 0 ]->{ cname } ); $section_tpl->param( news_section => \@tmp_array ); $return_content .= $section_tpl->output(); } return $return_content; } sub get_news_array { my $cat_id = shift(); my @tmp_array = get_and_unserialize( $news_search_link . "&opt=cat&nr=5&c=$cat_id" ); return @{ $tmp_array[ 0 ]->{ records } }; } sub create_news_list_content { my @news_list = @{ shift() }; my $news_vlist_content = ''; if ( $#news_list > -1 ) { foreach my $row ( @news_list ) { $news_vlist_content .= format_story( $row ); } } else { $news_vlist_content .= format_story( 0 ); } return $news_vlist_content; } sub format_story { my $row = shift(); my $news_vlist_content = ''; ################################################### my $news_content = HTML::Template->new( filename => "templates/news_body.tpl" ); if ( $row ) { $row = adjust_news_object_fields( $row ); $news_content->param( 'id' => $row->{ permaid } ); $news_content->param( 'link' => $row->{ link } ); $news_content->param( 'won_link' => $row->{ won_link } ); $news_content->param( 'title' => $row->{ title } ); $news_content->param( 'description' => $row->{ description } ); $news_content->param( 'site_name' => $row->{ source_name } ); $news_content->param( 'pub_date' => $row->{ pub_date } ); $news_content->param( 'topic' => $row->{ cname } ); $news_content->param( 'img' => $row->{ img } ); $news_content->param( 'visits' => $row->{ visits } ); } else { $news_content->param( 'no_records' => 1 ); } $news_vlist_content .= $news_content->output(); #push ( @topstories_array, { 'title' => $rows[2], 'description' => $rows[3]}); return $news_vlist_content; } =start /** * @param object $row * @param character $limit_description_length * * @return object */ =cut sub adjust_news_object_fields { my $row = shift(); my $limit_description_length = shift(); $limit_description_length = 'y' unless defined $limit_description_length; $row->{ cat_id } = int( $row->{ cat_id } ); $row->{ geo_id } = int( $row->{ geo_id } ); $row->{ permaid } = int( $row->{ permaid } ); #$row->{won_link} = "/view-" . $row->{permaid} . ".html"; =start $row->{description} = decode_entities($row->{description}); $row->{description} =~ s/<([^<]+?)>//g; $row->{title} =~ s/<([^<]+?)>//g; =cut if ( ( length( $row->{ description } ) > 200 ) && ( $limit_description_length eq 'y' ) ) { $row->{ description } = get_short_description($row->{ description }); } $row->{ description } = strip_slashes($row->{ description }); if ( ( $row->{ source_name } eq 'aniin.com' ) || ( $row->{ source_name } eq 'IANS.in' ) ) { my $encoded_title = $row->{ title }; $encoded_title =~ s/[^a-zA-Z0-9]/-/g; $encoded_title =~ s/\-(\-+)/-/g; $encoded_title =~ s/^(\-+)//g; $encoded_title =~ s/(\-+)$//g; $row->{ won_link } = "http://www.indiasnews.com/News-" . $row->{ permaid } . "-$encoded_title.html"; $row->{ link } = $row->{ won_link }; } #Trick: if 0 views generate random between 0 and 10; if ( $row->{ votes } eq 0 ) { $row->{ votes } = int( rand( 10 ) ); } $row->{ pub_date } = format_pub_date( $row->{ pub_date } ); $row->{ enc_category } = encode_entities( $row->{ cname } ); return $row; } sub get_short_description{ my $description = shift(); $description = strip_slashes($description); my $break_char_index = index($description, '', 200); if ($break_char_index > -1) { $break_char_index += 4; # Also add the length of }else{ $break_char_index = index($description, ' ', 200); } $description = substr( $description, 0, $break_char_index ) . "..."; return $description; } sub format_pub_date { my $pub_date = shift(); #2008-04-13 21:12:38 => 1210702358 my @date_time = split / /, $pub_date; my ( $year, $month, $day ) = split /\-/, $date_time[ 0 ]; my ( $hour, $minute, $second ) = split /\:/, $date_time[ 1 ]; if ( $day == 0 ) { $day = 1; } =debug select (STDOUT); print "$pub_date \n"; print "$second, $minute, $hour, $day, $month, $year \n\n"; =cut $pub_date = time() - timelocal( $second, $minute, $hour, $day, $month - 1, $year ); my $tmp_time = $pub_date; my ( $s, $mi, $h, $d ); if ( $tmp_time > 60 ) { $mi = int( $tmp_time / 60 ); $s = $tmp_time % 60; if ( $mi > 60 ) { $h = int( $mi / 60 ); $mi = $mi % 60; if ( $h > 24 ) { $d = int( $h / 24 ); $h = $h % 24; } } } else { $mi = $tmp_time; } $pub_date = ''; if ( abs( "$d" ) > 0 ) { $pub_date = $d . " days ago"; } else { if ( $h > 0 ) { $pub_date .= $h . " hours and "; } $pub_date .= $mi . " minutes ago"; } return $pub_date; } sub decode_mysql_date { my $pub_date = shift(); #2008-04-13 21:12:38 my @date_time = split / /, $pub_date; my ( $year, $month, $day ) = split /\-/, $date_time[ 0 ]; my ( $hour, $minute, $second ) = split /\:/, $date_time[ 1 ]; my $ret_val = ""; if ( ( $year > 0 ) && ( $day > 0 ) ) { $pub_date = timelocal( $second, $minute, $hour, $day, $month - 1, $year ); $pub_date = scalar localtime( $pub_date ); $pub_date =~ s/( +)/ /g; my @date_array = split / /, $pub_date; my @time_array = split /:/, $date_array[ 3 ]; $ret_val = sprintf( "%s %s, %s %s:%s", $date_array[ 1 ], $date_array[ 2 ], $date_array[ 4 ], $time_array[ 0 ], $time_array[ 1 ] ); } else { $ret_val = $pub_date; } return $ret_val; } #Creates a database connection and returns databasehandler sub init_database { my $config_file_path = shift(); my $config_xml = XMLin( $config_file_path ); my $db_host = $config_xml->{ parserSettings }{ db_host }; my $db_name = $config_xml->{ parserSettings }{ db_name }; my $db_user = $config_xml->{ parserSettings }{ db_user }; my $db_password = $config_xml->{ parserSettings }{ db_password }; if ( $db_password eq "''" ) { $db_password = ''; } my $dbh = DBI->connect( "dbi:mysql:$db_name:$db_host", "$db_user", "$db_password" ) or die( "Cannot connect to the database" ); return $dbh; } sub create_cache_file_name { my ( $cat, $keyword, $news_id, $option, $start_record, $bottom_menu_id ) = @_; # #Create cache file name # my $cache_file_name = ''; if ( $cat ) { $cache_file_name = $cat; } if ( $keyword ) { $cache_file_name = $keyword; } $cache_file_name .= $news_id . $option . $start_record . $bottom_menu_id; $cache_file_name =~ s/[^a-z0-9A-Z]//g; # #Treate cache # #Split the cache in subdirectories in order to be retreived quickly #In this case will be implemented a three level cache mechanism for ( my $i = 0 ; $i < 3 ; $i++ ) { my $cache_dirLi = substr( $cache_file_name, $i, 1 ); $cache_dir = "$cache_dir/$cache_dirLi"; #$cache_dir is global if ( !( -e "$cache_dir" && -d "$cache_dir" ) ) { mkdir( "$cache_dir" ); chmod 0777, "$cache_dir"; } } $cache_file_name = $cache_dir . "/" . $cache_file_name; return $cache_file_name; } sub try_to_get_cache { my $cache_file_name = shift(); my @cache_stat = stat( "$cache_file_name.ch" ); my $cache_mtime = $cache_stat[ 9 ]; my $cache_size = $cache_stat[ 7 ]; my $current_time = time(); my $return_value = ""; if ( ( !$cache_mtime ) ) { $cache_mtime = 0; open CFH, "> $cache_file_name.ch"; close CFH; $DBG->show( "Closing CFH on checkTheCache function" ); } $DBG->show( "Cache Data \n CacheSize:$cache_size \n CacheModifiedTime:$cache_mtime \n CacheLife:" . ( $current_time - $cache_mtime ) . " \n Keyword:$keyword \n Option:$option " ); if ( ( $cache_size > 1000 ) && ( $cache_mtime > 0 ) && ( $current_time - $cache_mtime < $cache_time ) ) { $return_value = file_get_contents( "$cache_file_name.ch" ); $return_value .= "\n"; $return_value .= "\n"; } else { $return_value = ''; } return $return_value; } sub save_to_cache { my $tmp_cache_file_name = shift(); my $cache_file_name = shift(); if ( $tmp_cache_file_name ne "" ) { close( FH ); $DBG->show( "Closing FH on save_to_cache function" ); chmod 0777, "$tmp_cache_file_name.ch"; select( STDOUT ); my @cacheStat = stat( "$tmp_cache_file_name.ch" ); if ( $cacheStat[ 7 ] > 1000 ) { #stat[7] = filesize if ( unlink "$cache_file_name.ch" ) { $DBG->show( "File $cache_file_name.ch deleted ...\n" ); } else { $DBG->show( "File $cache_file_name.ch can not be deleted ...\n" ); } if ( rename "$tmp_cache_file_name.ch", "$cache_file_name.ch" ) { $DBG->show( "$tmp_cache_file_name.ch renamed to $cache_file_name.ch...\n" ); } else { $DBG->show( "$tmp_cache_file_name.ch can not be renamed to $cache_file_name.ch...\n" ); } } } } #Include a file sub include { my $fileName = shift(); open IFH, "<" . $fileName; while ( ) { print $_; } close( IFH ); $DBG->show( "Closing IFH on include function" ); } #Initiates tho collect the content to be saved into the cache sub start_collect_cache { my $cache_file_name = shift(); #Open cache file handler my $tmp_cache_file_name = $cache_file_name . time(); open FH, "> " . $tmp_cache_file_name . ".ch"; select( FH ); return $tmp_cache_file_name; } #Gets content from a file sub file_get_contents { my $file_name = shift(); my @content_lines = (); open( TMPFH, $file_name ); @content_lines = ; close TMPFH; return join( "\n", @content_lines ); } #Returh the is_homepage glag sub get_first_page_flag { my $q = shift(); my $ret_val = 0; if ( !$q->param( 'cat' ) && ( ( !$q->param( 'option' ) ) || ( $q->param( 'option' ) eq 'specops' ) ) && !$q->param( 'keyword' ) ) { $ret_val = 1; } return $ret_val; } #Visit a news sub visit_news { my $id = shift(); get( "http://wssearch.worldnewx.com/ws_status.pl?apikey=worldnewx.com-1277066279&opt=vis&permaid=$id" ); } #Vote for a news sub vote_news { my $id = shift(); get( "http://wssearch.worldnewx.com/ws_status.pl?apikey=worldnewx.com-1277066279&opt=vot&permaid=$id" ); } sub select_STDOUT { close( FH ); select( STDOUT ); $DBG->show( "Closing FH and selecting STDOUT on select_STDOUT function" ); } sub mysql_query { my $sql = shift(); my $dbh = shift(); my $sth = $dbh->prepare( $sql ); $sth->execute() or die( "Invalid query ($sql) !!!" ); $sth->finish(); } #Returns the categories array sub get_categories_array { my $dbh = shift(); my $clevel = shift(); my $sql = "SELECT * FROM `category`"; if ( $clevel > 0 ) { $sql .= " WHERE `clevel`=$clevel"; } $sql .= " ORDER BY `weight` DESC, `title` ASC"; my $sth = $dbh->prepare( $sql ); $sth->execute() || die( "Could not execute sql !!!" ); my @category_array = (); while ( my $cat_rows = $sth->fetchrow_hashref ) { push( @category_array, { 'id' => $cat_rows->{ 'id' }, 'title' => $cat_rows->{ 'title' }, 'link' => url_encode( $cat_rows->{ 'title' } ) } ); } $sth->finish(); return @category_array; } sub CategoryName2Id { my $category_name = shift(); my $sql = "SELECT `alias` FROM `category` WHERE `title`='$category_name'"; my $sth = $dbh->prepare( $sql ); $sth->execute() || die( "Could not execute sql !!!" ); my $cat_row = $sth->fetchrow_hashref; return ( ( $aArchiveIndex{ lc( substr( $category_name, 0, 1 ) ) } << 27 ) + $cat_row->{ alias } ); } sub url_encode { my ( $string ) = @_; $string =~ s/(\W)/"%" . unpack("H2", $1)/ge; #$string# =~ tr/.//; return $string; } sub url_decode { my ( $string ) = @_; $string =~ tr/+/ /; $string =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; return $string; } sub get_description { my $content = shift(); return strip_slashes(strip_tags($content)); } sub strip_tags{ my $content = shift(); $content =~ s/\<([^>]+?)\>/ /g; $content =~ s/ +/ /g; return $content; } sub strip_slashes{ my $content = shift(); $content =~ s/\\//g; return $content; } sub get_keywords { my $content = shift(); my $commonWordsArray = "able|about|after|again|all|almost|already|also|although|am|an|and|another|any|are|are|around|as|at|based|be|because|been|before|being|between|both|bring|but|by|came|can|com|come|comes|could|did|do|does|doing|done|each|eight|else|etc|even|every|five|for|four|from|get|gets|getting|go|going|got|had|has|have|he|he|her|here|him|himself|his|how|however|href|http|if|in|including|into|is|it|it|its|just|kb|know|like|looks|mailto|make|making|many|may|mb|me|means|might|more|more|most|move|mr|much|must|my|need|needs|never|nice|nine|no|not|now|of|often|oh|ok|on|on|one|only|or|org|other|our|out|over|own|piece|rather|re|really|said|same|say|says|see|seven|several|she|should|since|single|six|so|some|something|still|stuff|such|take|ten|than|that|the|their|them|them|then|there|there|these|they|they|thing|things|this|those|three|through|to|too|took|two|under|up|us|use|used|using|usual|ve|very|via|want|was|way|we|we|well|were|what|when|where|whether|which|while|whilst|who|why|will|with|within|would|yes|yet|you|your"; $content =~ s/\b($commonWordsArray)\b//g; $content =~ s/<([^>]+?)>//g; $content =~ s/(\s+)/,/g; $content =~ s/,(,+)/,/g; return $content; } =start /** * Creates the navigation bar * @param int $start_record, * @param int $pps, * @param int $total_estimated * *@return string */ =cut sub get_nav_bar { my ( $start_record, $pps, $no_of_records ) = @_; my $uri = $ENV{ REQUEST_URI }; #Get $uri like prefix-Title-s00?p1=v1&p2=v2 $uri =~ s/\-s(\d+?)\b//; #Format $uri like prefix-Title?p1=v1&p2=v2 my $request_uri = $uri; my $total_pages = ceil( $no_of_records / $pps ); my $current_page = ceil( $start_record / $pps ); my $navbar_tpl = HTML::Template->new( filename => "templates/nav_bar.tpl" ); #Construct PREV link my $prev_link = $uri; if ( $start_record > 0 ) { my $start = 0; if ( $start_record - $pps >= 0 ) { $start = $start_record - $pps; } $prev_link =~ s/(\?|$)/-s$start$1/; } my $show_prev = 0; if ( $start_record > 0 ) { $show_prev = 1; } $navbar_tpl->param( show_prev => $show_prev ); $navbar_tpl->param( link_prev => $prev_link ); #Construct NEXT link my $next_link = $uri; if ( $start_record < $no_of_records ) { my $start = $no_of_records; if ( $start_record + $pps <= $no_of_records ) { $start = $start_record + $pps; } $next_link =~ s/(\?|$)/-s$start$1/; } my $show_next = 0; if ( $start_record < $no_of_records ) { $show_next = 1; } $navbar_tpl->param( show_next => $show_next ); $navbar_tpl->param( link_next => $next_link ); #return ""; my $tmp_page; my @pages_array = (); my @progress = ( 1000, 100, 10, 5, 4, 3, 2, 1 ); if ( $request_uri eq '/index.pl?skipcache=y') { $request_uri = 'Top+Stories'; =start my $OLD_FH = select(); select (STDOUT); print ""; select ($OLD_FH); =cut } my $page_link = ""; my $page_nr; foreach $step ( @progress ) { $page_link = $request_uri; my $start = 0; if ( $start_record - $step * $pps >= 0 ) { $start = $start_record - $step * $pps; $page_nr = ceil( $start / $pps ) + 1; $page_link =~ s/(\?|$)/-s$start$1/; push( @pages_array, { 'link_number' => $page_link, 'number' => $page_nr, 'selected' => 0 } ); } } $page_nr = ceil( $start_record / $pps ) + 1; push( @pages_array, { 'link_number' => $request_uri, 'number' => $page_nr, 'selected' => 1 } ); @progress = reverse @progress; foreach $step ( @progress ) { $page_link = $request_uri; my $start = 0; if ( $start_record + $step * $pps <= $no_of_records ) { $start = $start_record + $step * $pps; $page_nr = ceil( $start / $pps ) + 1; $page_link =~ s/(\?|$)/-s$start$1/; push( @pages_array, { 'link_number' => $page_link, 'number' => $page_nr, 'selected' => 0 } ); } } $navbar_tpl->param( pages_array => \@pages_array ); return $navbar_tpl->output(); } sub echo { my $OLD_FH = select(); select( STDOUT ); print Dumper( \@_ ); select( $OLD_FH ); } sub get_comments_list { # Get the comments list my $comments_base_url = "http://wssearch.worldnewx.com/ws_comments.pl?apikey=worldofnews.com-1495998270"; my $comments_list_url = $comments_base_url . "&opt=get&id=0&docid=$news_id"; my @tmp_comments_array = get_and_unserialize( $comments_list_url ); @tmp_comments_array = @{ $tmp_comments_array[ 0 ][ 1 ] }; my @comments_array = (); my $iterator = 0; foreach ( @tmp_comments_array ) { if ( $_->{ pending_delete } eq 'n' ) { $_->{ pending_delete } = 0; } #pending delete $_->{ usermail } = ''; #Hide email $_->{ apikey } = ''; #Hide api key $_->{ bg_color } = ( $iterator % 2 == 0 ) ? '#FFFFFF' : '#FFFF99'; #Add background color push( @comments_array, $_ ); $iterator++; } my $comments_list = ""; if ( $#comments_array > -1 ) { my $tpl_comment_list = HTML::Template->new( filename => "templates/comment_body.tpl", global_vars => 1 ); $tpl_comment_list->param( 'comments_array' => \@comments_array ); $comments_list = $tpl_comment_list->output(); } return $comments_list; } sub print_server_busy_message{ my $message = shift(); print "

$message

\n
\n"; print "Server busy! Please try again in a few seconds !"; exit(); } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #::::::::::: CLASS DEBUG ::::::::::::::::::::::::::::::::: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: package DEBUG; use Data::Dumper; my $flag = 0; #1 = debug activated my $__START_TIME__; sub new() { $__START_TIME__ = time(); bless {}, shift(); } #Gets the start time of the debug sub get_start_time { return $__START_TIME__; } #Show the debug message according with the flag sub show { my $this = shift(); my $message = shift(); if ( $flag == 1 ) { my $hash = shift(); my $OLD_FH = select(); select( STDOUT ); print Dumper( $message ); select( $OLD_FH ); } } #Sets a value for the flag sub set_flag { my $this = shift(); my $newVal = shift(); $flag = $newVal; } #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1;
__AD_MANAGER_ADS__

 
Top Stories

Exactly What's Under the Chrome, Anyway
Sep 6, 2008 07:14
News from Portfolio.comAlso on PortfolioSubscribe to Portfolio magazineBob Rice is the author of , and the former C.E.O. of a tech startup. He now runs merchant bank Tangent Capital, which he founded in 2005.Love 'em to death, but here's the thing to remember about Google: Your business is its business. Google doesn't sell software or hardware or content. It sells you -- or, slightly more precisely, its ability to understand your habits and deliver your attention to particular advertisers. And because of this, I am just a touch nervous about installing Chrome, its new browser software.Of course, Google already collects mountains of information about you from your searches you do realize they keep track of those, right, and from the huge cookie collection delivered fresh daily by their ad bakery the cookie gathers information from all Google products and affiliates -- and doesn't expire until 2038. Gmail users may also have long ago realized they were conceding privacy for convenience and bells and whistles.Indeed, Google has far more and better data about your habits than the relatively modest amounts that set of privacy firestorms for AOL and DoubleClick which Google now owns back in the day. But so far, with Google, it's been like successfully boiling a frog: the temperature has gone up very slowly, so nobody's jumped out of the pot just yet.Perhaps that's because Google offers so many wonderful services. Who wants to head out without checking the traffic with Google Maps oops, more footprints Or plan an event without checking everybody's calendar oy...At first glance, Chrome seems just another browser -- and between us, who cares IE, Safari, Firefox, Chrome -- one has more cup-holders, another has leather trim. So is the idea really just to take a piece of the "browser business," as many say I doubt it, largely because there isn't one: Nobody's paid for browser software since about 1998. Firefox, remember, is the product of a nonprofit -- one that, interestingly, has been heavily funded by Google, for reasons previously unknown.At first, Google's goal will be to change the software game and speed your transition from a desktop-driven environment to its "cloud computing" applications: word processing, spreadsheet, and presentation software. Google hopes that soon, you'll create these documents on one computer, leave them on their servers in the sky, and then continue working on them later from any other computer. Natch, you'll collaborate, share and deliver the docs this way, too. And Chrome will be the interface for it all, on top of serving more mundane web surfing functions.And all the while, Google will be doing the usual, capturing your data, your documents, your habits.And, how will they use all this information To do what they do: deliver ever more precisely targeted ads, with concomitant higher response rates, and thus generate more dollars. Maybe we'll see "This cell sponsored by Fidelity" in our spreadsheets soon.Sure, other companies are in position to track your data, too. The difference is that, for the most part, their business models don't require them to exploit that knowledge. And certainly nobody has the reach that Google has and will have -- especially after they eliminate your last ability to hide with the G-phone this fall.Now we know Big Brother's real name, do we care Free software and services are great, and I'd rather see relevant ads than irrelevant ones. But make no mistake: this lunch, too, has a real cost. It's called privacy.So that's the question consumers have to answer: Is it worth it If they genuinely don't care about one company controlling a complete catalog of their surfing and working, talking and texting, and meetings and greetings, fine. For me, I think I'd rather pay cash and avoid a virtual peeping Tom who only makes money if he predicts my private behavior well. But, then, I admit it: I'm so 2005.So, shine up your computer with Chrome if you like; but at least consider getting that "Do No Evil" promise in writing first.



News related by topic - Top Stories:
Bristol stadium plans submitted - BBC
Historic watermill wheel restored - BBC
Body of man found by hillwalker - BBC
Police chief shortlist revealed - BBC
Owen close to shock Man Utd move - BBC
State Park potluck - SFGate


News related by source - WiredNews:
Court Stiffs Veterans Caught in Privacy Breach - WiredNews
Jury Slaps $2 Million Fine on Jammie Thomas - WiredNews
How Science Fiction Writers Can Help, or Hurt, Homeland Security - WiredNews
Facebook, Google Go Persian, Helping Iran's Activists - WiredNews
How-To Wiki: How to Open a Beer Bottle With a Lighter - WiredNews
You Might Be Married to a GeekDad If ... - WiredNews



 
casino
News, World News, News Headlines, Top Stories, Breaking News, Globals News at www.worldofnews.com
Indian News, News from India, India News, Indian News Headlines, Indian breaking news, News, World news at www.indiasnews.com
UK News, British News, English News, News from UK, UK headlines, UK top stores, England News, Britain news, world news at www.worldofnews.co.uk
Home | About Us | Get News Feeds | Advertise Here | Terms of Service | Privacy Policy | Contact Us | Site Map