} else { $where_sql = ''; $html_keywords_line = ''; $text_keywords_line = ''; if ($user_row['alert_keywords'] == 'Y') { // Alert filter is enabled! $_Q_STRING = array(); if ($user_row['alert_query'] != '') { $_Q_STRING = unserialize($user_row['alert_query']); } if (is_array($_Q_STRING)) { foreach ($_Q_STRING as $key => $val) { $_SEARCH_INPUT[$key] = $val; } $_SEARCH_INPUT['action'] = 'search'; $where_sql = JB_generate_search_sql(2, $_SEARCH_INPUT); } } if (JB_JOB_ALERTS_ITEMS != 'JB_JOB_ALERTS_ITEMS') { $JB_JOB_ALERTS_ITEMS = JB_JOB_ALERTS_ITEMS; } else { $JB_JOB_ALERTS_ITEMS = 10; } $now = gmdate("Y-m-d H:i:s"); // $sql = "SELECT *, DATE_FORMAT(`resume_date`, '%d-%b-%Y') AS formatted_date FROM `resumes_table` where `resume_date` > '$user_row[alert_last_run]' AND DATE_SUB('$now', INTERVAL ".JB_POSTS_DISPLAY_DAYS." DAY) <= `resume_date` $where_sql ORDER BY `resume_date` DESC LIMIT $JB_JOB_ALERTS_ITEMS"; if (JB_RESUME_ALERTS_ITEMS != 'JB_RESUME_ALERTS_ITEMS') { $JB_RESUME_ALERTS_ITEMS = JB_RESUME_ALERTS_ITEMS; } else { $JB_RESUME_ALERTS_ITEMS = 10; } $sql = "Select *, DATE_FORMAT(`resume_date`, '%d-%b-%Y') AS formatted_app_date, t1.user_id AS user_id FROM `resumes_table` AS t1 LEFT JOIN `skill_matrix_data` AS t2 ON t1.resume_id=t2.object_id WHERE `status`='ACT' AND `approved`='Y' AND `resume_date` > '" . $user_row['alert_last_run'] . "' AND DATE_SUB('{$now}', INTERVAL " . JB_POSTS_DISPLAY_DAYS . " DAY) <= `resume_date` {$where_sql} group by resume_id ORDER BY `resume_date` DESC LIMIT {$JB_RESUME_ALERTS_ITEMS} ";
function JB_list_jobs($list_mode) { if (func_num_args() > 1) { // what kind of posts to show $show = func_get_arg(1); } global $label; global $post_count; $post_count = null; // reset post count. ############################################# # Build the apporved SQL part $approved_sql = " approved='Y' "; if ($show == "WA") { // waiting $approved_sql = " approved='N' "; $where_sql .= " AND `reason` ='' "; } elseif ($show == "NA") { // not approved $approved_sql = " approved ='N' "; $where_sql .= " AND `reason` !='' "; } elseif ($show == "EX") { // expired $approved_sql = ' 1=1 '; } elseif ($show == "EMP") { // expired $approved_sql = ' 1=1 '; } ############################################# # Build the ORDER BY part $order = jb_alpha_numeric($_REQUEST['order_by']); if ($_REQUEST['ord'] == 'asc') { $ord = 'ASC'; } elseif ($_REQUEST['ord'] == 'desc') { $ord = 'DESC'; } else { $ord = 'DESC'; // sort descending by default } if ($order == '' || !JB_is_field_valid($order, 1)) { // by default, order by the post_date, if the field is invalid $order = " `post_date` "; } elseif ($order == 'summary') { // order by title instead $order = JB_get_template_field_id('TITLE', 1); } else { $order = " `" . jb_escape_sql($order) . "` "; } ############################################ # Search Posts $where_sql .= JB_generate_search_sql(1); ############################################ # PREMIUM list mode # To list only premium jobs, call like this: JB_list_jobs('PREMIUM') if (!defined('JB_SHOW_PREMIUM_LIST')) { // new setting since 3.4.13, may not be in config.php JB_SHOW_PREMIUM_LIST == 'YES'; } # Set $premium_sql # This determines whether to: # - include only premium posts to the list # - include only standard posts to the list # - do not show the premium list at all, return the call if ($list_mode == 'PREMIUM') { if (JB_SHOW_PREMIUM_LIST != 'YES') { // PREMIUM list is turned off in Admin->Main Config // do not show the premium list at all, return the call return; } // - include only premium posts to the list $premium_sql = "AND ( " . "post_mode " . "= 'premium'" . ") "; $post_count = JB_get_post_count('PAP'); // PAP - Approved premium posts, not expired } elseif (JB_DONT_REPEAT_PREMIUM == 'YES') { // Premium posts are listed on top in a seperate list // This ensures that when listing the standard posts, the premium // posts are not repeated. // If listing jobs on the front page, no search executed and the page is index.php global $JB_HOME_PAGE, $JOB_LIST_PAGE; if ($JB_HOME_PAGE | $JOB_LIST_PAGE && $list_mode == 'ALL' && JB_SHOW_PREMIUM_LIST == 'YES') { // - include only standard posts to the list $premium_sql .= "AND ( " . "post_mode " . "!= 'premium'" . ") "; $post_count = JB_get_post_count('SAP'); // Approved, not premium, not expired } } ############################################# # Show posts by employer? $_REQUEST['show_emp'] = (int) $_REQUEST['show_emp']; if ($_REQUEST['show_emp'] > 0) { // is user_id > 0 ? $show_emp_sql = " AND user_id='" . jb_escape_sql($_REQUEST['show_emp']) . "' "; } ############################################# # Get todays date (in GMT) $now = gmdate("Y-m-d"); ############################################# # build the LIMIT part $offset = (int) $_REQUEST['offset']; if ($offset < 0) { $offset = abs($offset); } $limit_sql = " LIMIT {$offset}, "; if ($list_mode == 'PREMIUM') { if (JB_PREMIUM_POSTS_LIMIT == 'YES') { $limit_sql .= JB_PREMIUM_POSTS_PER_PAGE; } else { // there's no limit $limit_sql = ''; } } elseif ($list_mode == 'EMPLOYER') { $limit_sql .= JB_MANAGER_POSTS_PER_PAGE; } else { $limit_sql .= JB_POSTS_PER_PAGE; } # Include a SQL_CALC_FOUND_ROWS option to count the number of posts returned # See http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows if ($where_sql != '' || $show_emp_sql != '' || $post_count === null) { // If its not a search, or by listing employer, and the post count // is unknown, we need to tell MySQL to count the posts returned without // the LIMIT clause $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; } ############################################# # Glue the SQL query, basted on $list_mode if ($list_mode == 'SAVED') { $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; $sql = "SELECT {$calc_found_rows_sql} *, posts_table.user_id as user_id FROM `posts_table`, `saved_jobs` WHERE saved_jobs.user_id='" . jb_escape_sql($_SESSION['JB_ID']) . "' AND (saved_jobs.post_id=posts_table.post_id) AND expired='N' ORDER BY {$order} {$ord} {$limit_sql}"; } elseif ($list_mode == 'BY_CATEGORY' || $list_mode == "BY_CATEGORY_ADMIN") { $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; $cat = JB_search_category_tree_for_posts(); $sql = "SELECT {$calc_found_rows_sql} * FROM posts_table where {$approved_sql} {$where_sql} {$show_emp_sql} AND expired='N' {$cat} ORDER BY ({$order}) {$ord} {$limit_sql}"; } elseif ($list_mode == 'EMPLOYER') { // employer's post manager. $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; if ($show == "OFFLINE") { $date_range_sql = ''; // include posts that are expired. $date_range_sql = "AND expired='Y' "; $approved_sql = " OR (approved='N' AND user_id='" . jb_escape_sql($_SESSION['JB_ID']) . "') "; } else { // show current posts $date_range_sql = "AND expired='N' "; $approved_sql = " AND approved='Y' "; } $sql = "SELECT {$calc_found_rows_sql} * FROM posts_table where (1=1 {$where_sql} {$date_range_sql} AND user_id='" . jb_escape_sql($_SESSION['JB_ID']) . "') {$approved_sql} ORDER BY ({$order}) {$ord} {$limit_sql}"; } else { if ($show == 'EX') { // show expired? $expired_sql = " AND expired='Y' "; } else { $expired_sql = " AND expired='N' "; } $sql = "SELECT {$calc_found_rows_sql} * FROM posts_table where {$approved_sql} {$expired_sql} {$premium_sql} {$where_sql} {$show_emp_sql} ORDER BY ({$order}) {$ord} {$limit_sql} "; } //echo '<hr>sql:'.$sql." where_sql:[$where_sql] show_emp:[$show_emp_sql] cat:[$cat] calc_found_rows_sql:[$calc_found_rows_sql] (LM: $list_mode)<br>"; // some debugging & performance test //$result = JB_mysql_query("EXPLAIN ".$sql) or die ("[$sql]".mysql_error()); //$row = mysql_fetch_array($result, MYSQL_ASSOC); //echo "<pre>";print_r($row);echo "</pre>"; //echo "<br>".$sql."<br>"; ################################# # Execute the SQL query if (!JBPLUG_do_callback('job_list_custom_query', $result, $sql)) { // A plugin can modify the result with a custom query $result = JB_mysql_query($sql); } ################################# # Get the post_count # If $calc_found_rows_sql was not used, then we assume that the post # was is cashed in the database. if ($calc_found_rows_sql == '') { // MySQL did not count the number of posts // that were returned, then get the cached number. if ($list_mode == 'PREMIUM') { $post_count = JB_get_post_count('PAP'); // premium approved } elseif ($post_count == '') { if ($show == 'NA') { // not approved (admin) $post_count = JB_get_post_count('NA'); // get non approved posts count, admin list } elseif ($show == 'ALL') { $post_count = JB_get_post_count('AP'); // AP - Approved (expired='N' AND approved='Y'), admin list } elseif ($show == "WA") { // waiting count, admin list $post_count = JB_get_post_count('WA'); } elseif ($show == "EX") { // expired count, admin list $post_count = JB_get_post_count('EX'); } else { // get all the count of all apporved and not expired $post_count = JB_get_post_count('AP'); // AP - Approved (expired='N' AND approved='Y') } } } else { # Ask MySQL to get the number of rows from the last query # Even though the last query had a LIMIT clause $row = mysql_fetch_row(jb_mysql_query("SELECT FOUND_ROWS()")); $post_count = $row[0]; } JBPLUG_do_callback('job_list_set_count', $post_count, $list_mode); // A plugin can modify the post count ######################################## # Print how many jobs returned $PLM =& JB_get_PostListMarkupObject(); // load the ListMarkup Class if ($post_count == 0) { if ($list_mode == "PREMIUM") { //echo "<p> </p>"; } elseif ($list_mode == "SAVED") { //echo "<p> </p>"; } elseif ($list_mode == "BY_CATEGORY") { //echo "<p> </p>"; } elseif ($list_mode == "EMPLOYER") { $PLM->no_posts_employer(); } else { $PLM->no_posts(); } } else { if ($list_mode == "PREMIUM") { $PLM->sponsored_heading($post_count); } elseif ($list_mode == "ALL") { $label['post_list_count'] = str_replace("%COUNT%", $post_count, $label['post_list_count']); $label['post_list_count'] = str_replace("%POSTS_DISPLAY_DAYS%", JB_POSTS_DISPLAY_DAYS, $label['post_list_count']); $PLM->post_count($post_count); } elseif ($list_mode == "BY_CATEGORY") { $label['post_list_cat_count'] = str_replace("%COUNT%", $post_count, $label['post_list_cat_count']); $label['post_list_cat_count'] = str_replace("%POSTS_DISPLAY_DAYS%", JB_POSTS_DISPLAY_DAYS, $label['post_list_cat_count']); $PLM->post_count_category($post_count); } ################################################# JB_display_post_list($result, $list_mode, $show); } // end else if mysql num rows > 0 return $post_count; }
function JB_list_resumes($list_mode, $show = '') { global $resume_tag_to_field_id; global $tag_to_search; global $label; // languages array $LM =& JB_get_ResumeListMarkupObject(); // load the ListMarkup Class $LM->set_list_mode($list_mode); $LM->set_show($show); if ($list_mode == 'ADMIN') { $admin = true; } ########################################### # initialize # if (!defined('JB_RESUMES_PER_PAGE')) { $resumes_per_page = 30; } else { $resumes_per_page = JB_RESUMES_PER_PAGE; } $order = jb_alpha_numeric($_REQUEST['order_by']); if ($_REQUEST['ord'] == 'asc') { $ord = 'ASC'; } elseif ($_REQUEST['ord'] == 'desc') { $ord = 'DESC'; } else { $ord = 'DESC'; // sort descending by default } if ($order == '' || !JB_is_field_valid($order, 2)) { // by default, order by the post_date $order = " `resume_date` "; } else { $order = " `" . jb_escape_sql($order) . "` "; } $offset = (int) $_REQUEST['offset']; if ($offset < 0) { $offset = abs($offset); } if ($offset == '') { $offset = 0; } // build the search query string global $action; // process search result if ($_REQUEST['action'] == 'search') { $q_string = JB_generate_q_string(2); $where_sql = JB_generate_search_sql(2); } $cat = (int) $_REQUEST['cat']; if ($cat != '') { $cat = "&cat={$cat}"; $cat_sql = JB_search_category_tree_for_resumes(); } if ($admin) { $where_status = " `status` != 'x' "; } else { $where_status = " `status`='ACT' "; } $approved = ""; if ($show == 'WA') { // Admin is true, WA will show posts waiting to be approved $where_sql = " AND approved='N' "; } else { $approved = "t1.approved='Y' AND "; } #####################3 # Set the LIMIT part of the sql query $limit_sql = "LIMIT " . jb_escape_sql($offset) . "," . jb_escape_sql($resumes_per_page) . " "; ################################## # How to get the resume count # If not searching by category, then if ($where_sql == '' && $cat_sql == '') { if ($admin) { // showing all resumes, active, not approved and suspended $resume_count = JB_get_resume_count('ALL'); } else { // showing active & approved $resume_count = JB_get_resume_count('ACT'); } if ($resume_count === null) { $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; } } else { $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; } if ($list_mode == 'SAVED') { $order = 'save_date'; $calc_found_rows_sql = 'SQL_CALC_FOUND_ROWS'; $sql = "SELECT {$calc_found_rows_sql} * FROM `saved_resumes` AS t1\n\t\tLEFT JOIN `resumes_table` as t2 on t2.resume_id=t1.resume_id\n\t\t WHERE t1.user_id='" . jb_escape_sql($_SESSION['JB_ID']) . "' ORDER BY {$order} {$ord} {$limit_sql}"; } elseif ($tag_to_search['smx_exists']) { // a skill matrix exists.. use the JOIN version of the query (Slower) // Using a LEFT JOIN because we want to have null values if no data for skill_matrix_data $sql = "Select {$calc_found_rows_sql} *, t1.user_id AS user_id FROM `resumes_table` AS t1 LEFT JOIN `skill_matrix_data` AS t2 ON t1.resume_id=t2.object_id WHERE {$approved} {$where_status} {$where_sql} {$cat_sql} group by t1.resume_id ORDER BY {$order} {$ord} {$appr_order} {$limit_sql} "; } else { $sql = "Select {$calc_found_rows_sql} * FROM `resumes_table` as t1 WHERE {$approved} {$where_status} {$where_sql} {$cat_sql} ORDER BY {$order} {$ord} {$limit_sql} "; } $result = JB_mysql_query($sql) or die(mysql_error()); ############ # get the count if not initialized # Ask MySQL to get the number of rows from the last query if ($calc_found_rows_sql) { # Even though the last query had a LIMIT clause $row = mysql_fetch_row(jb_mysql_query("SELECT FOUND_ROWS()")); $resume_count = $row[0]; } if ($resume_count > 0) { // estimate number of pages. $pages = ceil($resume_count / $resumes_per_page); if ($pages == 1) { // only one page - no need to show page navigation links } else { $pages = ceil($resume_count / $resumes_per_page); $cur_page = $offset / $resumes_per_page; $cur_page++; $LM->nav_pages_start(); //echo "Page $cur_page of $pages - "; $label["navigation_page"] = str_replace("%CUR_PAGE%", $cur_page, $label["navigation_page"]); $label["navigation_page"] = str_replace("%PAGES%", $pages, $label["navigation_page"]); $LM->nav_pages_status(); $nav = JB_nav_pages_struct($result, $q_string, $resume_count, $resumes_per_page); $LINKS = 10; JB_render_nav_pages($nav, $LINKS, $q_string, $show_emp, $cat); $LM->nav_pages_end(); } // How many columns? (the hits column does not count here...) ob_start(); // buffer the output, so that we can calculate the colspan. $colspan = JB_echo_list_head_data(2, $admin); // output the header columns $list_head_data = ob_get_contents(); ob_end_clean(); JBPLUG_do_callback('resume_list_set_colspan', $colspan); // set the colspan value $LM->set_colspan($colspan); if ($list_mode == 'EMPLOYER' || $list_mode == 'ADMIN' || $list_mode == 'SAVED') { $LM->open_form(); } $LM->list_start(); if ($list_mode == 'ADMIN') { // controls (approve button / disapprove button) $LM->admin_list_controls(); } elseif ($list_mode == 'EMPLOYER') { $LM->employer_list_controls(); } elseif ($list_mode == 'SAVED') { $LM->saved_list_controls(); } ####################################### # Open the list heading section $LM->list_head_open(); if ($list_mode == 'ADMIN') { $LM->list_head_admin_action(); JBPLUG_do_callback('resume_list_head_admin_action', $A = false); } elseif ($list_mode == 'EMPLOYER') { $LM->list_head_employer_action(); } elseif ($list_mode == 'SAVED') { $LM->list_head_saved_action(); } JBPLUG_do_callback('resume_list_head_user_action', $A = false); ####################################### echo $list_head_data; ####################################### # Close the list heading section $LM->list_head_close(); $i = 0; JBPLUG_do_callback('resume_list_pre_fill', $i, $admin); //A plugin can list its own records before, and adjust the $i while (($row = mysql_fetch_array($result, MYSQL_ASSOC)) && $i < $resumes_per_page) { $LM->set_values($row); JBPLUG_do_callback('resume_list_set_data', $row, $i, $list_mode); // A plugin can modify the prams $i++; if ($admin) { // If Administrator, then can view private details. $row['anon'] = 'N'; } $LM->list_item_open($admin); if ($list_mode == 'ADMIN') { $LM->list_data_admin_action(); JBPLUG_do_callback('resume_list_data_admin_action', $LM); } elseif ($list_mode == 'SAVED') { $LM->list_data_saved_action(); } elseif ($list_mode == 'EMPLOYER') { $LM->list_data_employer_action(); } JBPLUG_do_callback('resume_list_data_user_action', $LM); JB_echo_resume_list_data($admin); $LM->list_item_close(); } JBPLUG_do_callback('resume_list_back_fill', $i, $admin); // A plugin can list its own records after $LM->list_end(); if ($list_mode == 'EMPLOYER' || $list_mode == 'ADMIN') { $LM->close_form(); } $LM->nav_pages_start(); JB_render_nav_pages($nav, $LINKS, $q_string, $show_emp, $cat); $LM->nav_pages_end(); } else { $LM->no_resumes(); } }
function JB_list_profiles($admin = false, $order, $offset) { global $label; // languages array $records_per_page = 40; // process search result if ($_REQUEST['action'] == 'search') { $q_string = JB_generate_q_string(3); $where_sql = JB_generate_search_sql(3); } // JB_DATE_FORMAT(`adate`, '%d-%b-%Y') AS formatted_date $order = $_REQUEST['order_by']; if ($_REQUEST['ord'] == 'asc') { $ord = 'ASC'; } elseif ($_REQUEST['ord'] == 'desc') { $ord = 'DESC'; } else { $ord = 'DESC'; // sort descending by default } if ($order == '' || !JB_is_field_valid($order, 3)) { // by default, order by the post_date $order = " `profile_date` "; } else { $order = " `" . jb_escape_sql($order) . "` "; } $offset = (int) $_REQUEST['offset']; if ($offset < 0) { $offset = abs($offset); } $sql = "Select SQL_CALC_FOUND_ROWS *, DATE_FORMAT(`profile_date`, '%d-%b-%Y') AS formatted_profile_date FROM `profiles_table` WHERE 1=1 {$where_sql} ORDER BY {$order} {$ord} LIMIT {$offset}, {$records_per_page}"; //echo "[".$sql."]"; $result = JB_mysql_query($sql) or die(mysql_error()); ############ # get the count /* $count = mysql_num_rows($result); if ($count > $records_per_page) { mysql_data_seek($result, $offset); } */ $row = mysql_fetch_row(jb_mysql_query("SELECT FOUND_ROWS()")); $count = $row[0]; if ($count > 0) { if ($pages == 1) { } else { $pages = ceil($count / $records_per_page); $cur_page = $_REQUEST['offset'] / $records_per_page; $cur_page++; echo '<p class="nav_page_links">'; //echo "Page $cur_page of $pages - "; $label["navigation_page"] = str_replace("%CUR_PAGE%", $cur_page, $label["navigation_page"]); $label["navigation_page"] = str_replace("%PAGES%", $pages, $label["navigation_page"]); echo "<span > " . $label["navigation_page"] . "</span> "; $nav = JB_nav_pages_struct($result, $q_string, $count, $records_per_page); $LINKS = 10; JB_render_nav_pages($nav, $LINKS, $q_string, $show_emp, $cat); echo "</p>"; } ?> <table style="margin: 0 auto; width:100%; border:0px; background-color:d9d9d9; " cellspacing="1" cellpadding="5" > <tr bgcolor="#EAEAEA"> <?php if ($admin == true) { echo '<td> </td>'; JBPLUG_do_callback('profile_list_head_admin_action', $A = false); } JBPLUG_do_callback('profile_list_head_user_action', $A = false); JB_echo_list_head_data(3, $admin); ?> </tr> <?php $i = 0; $ProfileForm =& JB_get_DynamicFormObject(3); while (($row = mysql_fetch_array($result, MYSQL_ASSOC)) && $i < $records_per_page) { $ProfileForm->set_values($row); $i++; ?> <tr bgcolor="<?php echo JB_LIST_BG_COLOR; ?> " onmouseover="old_bg=this.getAttribute('bgcolor');this.setAttribute('bgcolor', '<?php echo JB_LIST_HOVER_COLOR; ?> ', 0);" onmouseout="this.setAttribute('bgcolor', old_bg, 0);"> <?php if ($admin == true) { echo '<td>'; ?> <input style="font-size: 8pt" type="button" value="Delete" onClick="if (!confirmLink(this, 'Delete, are you sure?')) {return false;} window.location='<?php echo htmlentities($_SERVER['PHP_SELF']); ?> ?action=delete&profile_id=<?php echo $row['profile_id']; ?> '"><br> <input type="button" style="font-size: 8pt" value="Edit" onClick="window.location='<?php echo htmlentities($_SERVER['PHP_SELF']); ?> ?action=edit&profile_id=<?php echo $row['profile_id']; ?> '"> <?php echo '</td>'; JBPLUG_do_callback('profile_list_data_admin_action', $A = false); } JBPLUG_do_callback('profile_list_data_user_action', $A = false); JB_echo_proile_list_data($admin); ?> </tr> <?php //$data[file_photo] = ''; // $new_name=''; } echo "</table>"; } else { echo "<p class='profiles_no_result'>" . $label["profiles_not_found"] . "</p>"; } }
function JBXML_generate_xml_feed($feed_id) { if (!is_numeric($feed_id)) { return; } $offset = 0; if (isset($_REQUEST['offset'])) { $offset = (int) $_REQUEST['offset']; } $sql = "SELECT * from xml_export_feeds WHERE feed_id='" . jb_escape_sql($feed_id) . "' "; $result = JB_mysql_query($sql); $feed_row = mysql_fetch_array($result, MYSQL_ASSOC); if ($feed_row['publish_mode'] == 'PRI') { // private mode if ($feed_row['feed_key'] != $_REQUEST['k']) { die('Invalid Key. Please contact ' . JB_SITE_CONTACT_EMAIL); } } $hosts = array(); $hosts = explode(',', $feed_row['hosts_allow']); $allowed = false; if (sizeof($hosts) > 0) { foreach ($hosts as $host) { if (strtoupper($host) == 'ALL') { // all hosts $allowed = true; } if (strtolower($host) == 'localhost' && $_SERVER['REMOTE_ADDR'] == '127.0.0.1') { $allowed = true; } if ($host == $_SERVER['REMOTE_ADDR']) { $allowed = true; } } if (!$allowed) { die('Access is restricted form your IP. Please contact ' . JB_SITE_CONTACT_EMAIL); } } $feed_row['field_settings'] = unserialize($feed_row['field_settings']); $feed_row['search_settings'] = unserialize($feed_row['search_settings']); // build the search query up... if (is_array($feed_row['search_settings'])) { foreach ($feed_row['search_settings'] as $key => $val) { $_SEARCH_INPUT[$key] = $val; } $_SEARCH_INPUT['action'] = 'search'; global $post_tag_to_search; global $tag_to_search; $where_sql = JB_generate_search_sql($feed_row['form_id'], $_SEARCH_INPUT); } if ($feed_row['max_records'] > 0) { $limit = "LIMIT {$offset}, " . jb_escape_sql($feed_row['max_records']); } switch ($feed_row['form_id']) { case 1: if ($feed_row['include_imported'] == 'Y') { if ($where_sql) { $where_sql = ' AND ' . $where_sql; } $sql = "SELECT * FROM posts_table WHERE `expired`='N' AND `approved`='Y' {$where_sql} ORDER BY `post_date` DESC {$limit} "; } else { $sql = "SELECT * FROM posts_table WHERE `expired`='N' AND `approved`='Y' AND `guid`='' {$where_sql} ORDER BY `post_date` DESC {$limit} "; } break; case 2: break; case 3: break; case 4: break; case 5: break; } $records = JB_mysql_query($sql); // Gzip compress the output, if supported by PHP & the browser //if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) { //ob_start("ob_gzhandler"); //} else { //ob_start(); //} header('Content-type: application/xml; charset=UTF-8'); if ($_REQUEST['d'] != '') { // download? header('Content-Disposition: attachment; filename="feed-' . htmlentities($feed_id) . '.xml"'); } // check to see if we have this feed in the cache if (function_exists('JB_get_cache_dir')) { $cache_dir = JB_get_cache_dir(); } else { $cache_dir = JB_basedirpath() . 'cache/'; } if (is_dir($cache_dir)) { if ($dh = opendir($cache_dir)) { while (($file = readdir($dh)) !== false) { if (filetype($cache_dir . $file) == 'file' && strpos($file, '.xml') !== false) { $stats = stat($cache_dir . $file); if ($stats['mtime'] + 3600 < time()) { // has 1 hour elapsed? (3600 sec) unlink($cache_dir . $file); } } } closedir($dh); } } $do_update = false; $filename = $cache_dir . 'feed_' . md5($feed_row['feed_id'] . $feed_row['feed_key'] . $offset) . ".xml"; if (!file_exists($filename)) { $do_update = true; } $do_update = true; if ($do_update) { // Generate the XML feed & cache the result. echo '<?xml version="1.0" encoding="UTF-8" ?>'; $fh = fopen($filename, "wb"); if (flock($fh, LOCK_EX)) { // do an exclusive lock ftruncate($fh, 0); // truncate file JBXM_xml_feed_gen_engine($feed_row, '', $records, $data, false, $fh); flock($fh, LOCK_UN); // release the lock } else { echo "<error>Couldn't get the lock!</error>"; } fclose($fh); } else { // Return the cached xml feed $fh = fopen($filename, 'rb'); $contents = fread($fh, filesize($filename)); fclose($fh); echo $contents; } ob_end_flush(); }