function qa_db_connection() { global $qa_db; if (!is_resource($qa_db)) { qa_db_connect(); if (!is_resource($qa_db)) { qa_fatal_error('Failed to connect to database'); } } return $qa_db; }
/** * Outputs cache to the user */ private function get_cache() { qa_report_process_stage('init_page'); qa_db_connect('qa_page_db_fail_handler'); qa_page_queue_pending(); qa_load_state(); qa_check_login_modules(); if (QA_DEBUG_PERFORMANCE) { if (qa_qa_version_below('1.7')) { qa_usage_mark('setup'); } else { //global $qa_usage; //$qa_usage->mark('setup'); null; } } qa_check_page_clicks(); qa_set_form_security_key(); if (!QA_CACHING_FILE) { $contents = $this->get_cache_db(); } else { $contents = $this->get_cache_file(); } $qa_content = array(); // Dummy contents $userid = qa_get_logged_in_userid(); $questionid = qa_request_part(0); $cookieid = qa_cookie_get(true); if (is_numeric($questionid)) { $question = qa_db_select_with_pending(qa_db_full_post_selectspec($userid, $questionid)); if (is_numeric($questionid) && qa_opt('do_count_q_views') && !preg_match("/^(?:POST|PUT)\$/i", $_SERVER["REQUEST_METHOD"]) && !qa_is_http_post() && qa_is_human_probably() && (!$question['views'] || ($question['lastviewip'] != qa_remote_ip_address() || !isset($question['lastviewip'])) && ($question['createip'] != qa_remote_ip_address() || !isset($question['createip'])) && ($question['userid'] != $userid || !isset($question['userid'])) && ($question['cookieid'] != $cookieid || !isset($question['cookieid'])))) { $qa_content['inc_views_postid'] = $questionid; } else { $qa_content['inc_views_postid'] = null; } qa_do_content_stats($qa_content); } if (QA_DEBUG_PERFORMANCE) { ob_start(); if (qa_qa_version_below('1.7')) { qa_usage_output(); } else { global $qa_usage; $qa_usage->output(); } $contents .= ob_get_contents(); ob_end_clean(); } qa_db_disconnect(); header('Content-type: ' . strtr('^type/^format; charset=utf-8', array('^type' => 'text', '^format' => $this->get_cache_file_extension()))); exit($contents); }
qa_exit(); } function qa_feed_load_ifcategory($categoryslugs, $allkey, $catkey, &$title, $questionselectspec1 = null, $questionselectspec2 = null, $questionselectspec3 = null, $questionselectspec4 = null) { $countslugs = @count($categoryslugs); list($questions1, $questions2, $questions3, $questions4, $categories, $categoryid) = qa_db_select_with_pending($questionselectspec1, $questionselectspec2, $questionselectspec3, $questionselectspec4, $countslugs ? qa_db_category_nav_selectspec($categoryslugs, false) : null, $countslugs ? qa_db_slugs_to_category_id_selectspec($categoryslugs) : null); if ($countslugs && !isset($categoryid)) { qa_feed_not_found(); } if (isset($allkey)) { $title = isset($categoryid) && isset($catkey) ? qa_lang_sub($catkey, $categories[$categoryid]['title']) : qa_lang($allkey); } return array_merge(is_array($questions1) ? $questions1 : array(), is_array($questions2) ? $questions2 : array(), is_array($questions3) ? $questions3 : array(), is_array($questions4) ? $questions4 : array()); } // Connect to database and get the type of feed and category requested (in some cases these are overridden later) qa_db_connect('qa_feed_db_fail_handler'); qa_preload_options(); $requestlower = strtolower(qa_request()); $foursuffix = substr($requestlower, -4); if ($foursuffix == '.rss' || $foursuffix == '.xml') { $requestlower = substr($requestlower, 0, -4); } $requestlowerparts = explode('/', $requestlower); $feedtype = @$requestlowerparts[1]; $feedparams = array_slice($requestlowerparts, 2); // Choose which option needs to be checked to determine if this feed can be requested, and stop if no matches $feedoption = null; $categoryslugs = $feedparams; switch ($feedtype) { case 'questions': $feedoption = 'feed_for_questions';
More about this license: http://www.question2answer.org/license.php */ // Ensure no PHP errors are shown in the image data @ini_set('display_errors', 0); function qa_image_db_fail_handler() { header('HTTP/1.1 500 Internal Server Error'); qa_exit('error'); } // Load the Q2A base file which sets up a bunch of crucial stuff require 'qa-base.php'; qa_report_process_stage('init_image'); // Retrieve the scaled image from the cache if available require_once QA_INCLUDE_DIR . 'qa-db-cache.php'; qa_db_connect('qa_image_db_fail_handler'); $blobid = qa_get('qa_blobid'); $size = (int) qa_get('qa_size'); $cachetype = 'i_' . $size; $content = qa_db_cache_get($cachetype, $blobid); // see if we've cached the scaled down version header('Cache-Control: max-age=2592000, public'); // allows browsers and proxies to cache images too if (isset($content)) { header('Content-Type: image/jpeg'); echo $content; } else { require_once QA_INCLUDE_DIR . 'qa-app-options.php'; require_once QA_INCLUDE_DIR . 'qa-app-blobs.php'; require_once QA_INCLUDE_DIR . 'qa-util-image.php'; // Otherwise retrieve the raw image and scale as appropriate
More about this license: http://www.question2answer.org/license.php */ // Ensure no PHP errors are shown in the blob response @ini_set('display_errors', 0); function qa_blob_db_fail_handler() { header('HTTP/1.1 500 Internal Server Error'); qa_exit('error'); } // Load the Q2A base file which sets up a bunch of crucial stuff require 'qa-base.php'; qa_report_process_stage('init_blob'); // Output the blob in question require_once QA_INCLUDE_DIR . 'app/blobs.php'; qa_db_connect('qa_blob_db_fail_handler'); $blob = qa_read_blob(qa_get('qa_blobid')); if (isset($blob)) { header('Cache-Control: max-age=2592000, public'); // allows browsers and proxies to cache the blob switch ($blob['format']) { case 'jpeg': case 'jpg': header('Content-Type: image/jpeg'); break; case 'gif': header('Content-Type: image/gif'); break; case 'png': header('Content-Type: image/png'); break;
More about this license: http://www.question2answer.org/license.php */ // Output this header as early as possible header('Content-Type: text/plain; charset=utf-8'); // Ensure no PHP errors are shown in the Ajax response @ini_set('display_errors', 0); // Load the Q2A base file which sets up a bunch of crucial functions require 'qa-base.php'; qa_report_process_stage('init_ajax'); // Get general Ajax parameters from the POST payload, and clear $_GET qa_set_request(qa_post_text('qa_request'), qa_post_text('qa_root')); $_GET = array(); // for qa_self_html() // Database failure handler function qa_ajax_db_fail_handler() { echo "QA_AJAX_RESPONSE\n0\nA database error occurred."; qa_exit('error'); } // Perform the appropriate Ajax operation $routing = array('notice' => 'qa-ajax-notice.php', 'favorite' => 'qa-ajax-favorite.php', 'vote' => 'qa-ajax-vote.php', 'recalc' => 'qa-ajax-recalc.php', 'mailing' => 'qa-ajax-mailing.php', 'version' => 'qa-ajax-version.php', 'category' => 'qa-ajax-category.php', 'asktitle' => 'qa-ajax-asktitle.php', 'answer' => 'qa-ajax-answer.php', 'comment' => 'qa-ajax-comment.php', 'click_a' => 'qa-ajax-click-answer.php', 'click_c' => 'qa-ajax-click-comment.php', 'click_admin' => 'qa-ajax-click-admin.php', 'show_cs' => 'qa-ajax-show-comments.php', 'wallpost' => 'qa-ajax-wallpost.php', 'click_wall' => 'qa-ajax-click-wall.php'); $operation = qa_post_text('qa_operation'); if (isset($routing[$operation])) { qa_db_connect('qa_ajax_db_fail_handler'); require QA_INCLUDE_DIR . $routing[$operation]; qa_db_disconnect(); } /* Omit PHP closing tag to help avoid accidental output */
/** * Return the current connection to the Q2A database, connecting if necessary and $connect is true. */ function qa_db_connection($connect = true) { if (qa_to_override(__FUNCTION__)) { $args = func_get_args(); return qa_call_override(__FUNCTION__, $args); } global $qa_db_connection; if ($connect && !$qa_db_connection instanceof mysqli) { qa_db_connect(); if (!$qa_db_connection instanceof mysqli) { qa_fatal_error('Failed to connect to database'); } } return $qa_db_connection; }
break; case 'select': $errorhtml .= 'Could not switch to the Question2Answer database. Please check the database name in the config file, and if necessary create the database in MySQL and grant appropriate user privileges.'; break; case 'query': global $pass_failure_from_install; if (@$pass_failure_from_install) { $errorhtml .= "Question2Answer was unable to perform the installation query below. Please check the user in the config file has CREATE and ALTER permissions:\n\n" . qa_html($pass_failure_query . "\n\nError " . $pass_failure_errno . ": " . $pass_failure_error . "\n\n"); } else { $errorhtml .= "A Question2Answer database query failed when generating this page.\n\nA full description of the failure is available in the web server's error log file."; } break; } } else { // this page was requested by user GET/POST, so handle any incoming clicks on buttons qa_db_connect('qa_install_db_fail_handler'); if (qa_clicked('create')) { qa_db_install_tables(); if (QA_FINAL_EXTERNAL_USERS) { if (defined('QA_FINAL_WORDPRESS_INTEGRATE_PATH')) { require_once QA_INCLUDE_DIR . 'qa-db-admin.php'; require_once QA_INCLUDE_DIR . 'qa-app-format.php'; qa_db_page_move(qa_db_page_create(get_option('blogname'), QA_PAGE_FLAGS_EXTERNAL, get_option('home'), null, null, null), 'O', 1); // create link back to WordPress home page $success .= 'Your Question2Answer database has been created and integrated with your WordPress site.'; } else { $success .= 'Your Question2Answer database has been created for external user identity management. Please read the online documentation to complete integration.'; } } else { $success .= 'Your Question2Answer database has been created.'; }
/** * Outputs cache to the user */ private function get_cache() { global $qa_usage; qa_db_connect('qa_page_db_fail_handler'); qa_page_queue_pending(); qa_load_state(); qa_check_login_modules(); qa_check_page_clicks(); $contents = @file_get_contents($this->cache_file); if (!$contents) { return; } //cache failure, graceful exit $qa_content = array(); // Dummy contents $userid = qa_get_logged_in_userid(); $questionid = qa_request_part(0); $cookieid = qa_cookie_get(true); if (is_numeric($questionid)) { $question = qa_db_select_with_pending(qa_db_full_post_selectspec($userid, $questionid)); if (is_numeric($questionid) && qa_opt('do_count_q_views') && !$this->post_method && !qa_is_http_post() && qa_is_human_probably() && (!$question['views'] || ($question['lastviewip'] != qa_remote_ip_address() || !isset($question['lastviewip'])) && ($question['createip'] != qa_remote_ip_address() || !isset($question['createip'])) && ($question['userid'] != $userid || !isset($question['userid'])) && ($question['cookieid'] != $cookieid || !isset($question['cookieid'])))) { $qa_content['inc_views_postid'] = $questionid; } else { $qa_content['inc_views_postid'] = null; } qa_do_content_stats($qa_content); } if (QA_DEBUG_PERFORMANCE) { ob_start(); $qa_usage->output(); $contents .= ob_get_contents(); ob_end_clean(); } qa_db_disconnect(); exit($contents); }
function qa_base_db_connect($failhandler = null) { qa_db_connect($failhandler); }
/** * Return the current connection to the Q2A database, connecting if necessary and $connect is true. */ function qa_db_pdo_connection($connect = true) { global $qa_db_pdo_connection; if ($connect && is_null($qa_db_pdo_connection)) { $host = QA_PERSISTENT_CONN_DB ? 'p:' . QA_FINAL_MYSQL_HOSTNAME : QA_FINAL_MYSQL_HOSTNAME; $port = ''; if (defined('QA_FINAL_MYSQL_PORT')) { $port = ";port=" . QA_FINAL_MYSQL_PORT; } $dbname = QA_FINAL_MYSQL_DATABASE; $username = QA_FINAL_MYSQL_USERNAME; $password = QA_FINAL_MYSQL_PASSWORD; $qa_db_pdo_connection = new PDO("mysql:host={$host};dbname={$dbname}{$port}", $username, $password, array(PDO::ATTR_TIMEOUT => 5, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); qa_db_connect(); if (is_null($qa_db_pdo_connection)) { qa_fatal_error('Failed to connect to database'); } } return $qa_db_pdo_connection; }