function process_event($event, $userid, $handle, $cookieid, $params) { qw_do_action('qw_event_' . $event, $event, $userid, $handle, $cookieid, $params); if (qa_opt('event_logger_to_database')) { $paramstring = ''; foreach ($params as $key => $value) { $value_to_text = $this->value_to_text($value, $key); $value = is_array($value) ? 'array(' . count($value) . ')' . "\t" . $value_to_text : $value_to_text; $paramstring .= (strlen($paramstring) ? "\t" : '') . $key . '=' . $value; } $paramstring = strtr($paramstring, "\n\r", ' '); qa_db_query_sub('INSERT INTO ^eventlog (datetime, ipaddress, userid, handle, cookieid, event, params) ' . 'VALUES (NOW(), $, $, $, #, $, $)', qa_remote_ip_address(), $userid, $handle, $cookieid, $event, $paramstring); } if (qa_opt('event_logger_to_files')) { // Substitute some placeholders if certain information is missing if (!strlen($userid)) { $userid = 'no_userid'; } if (!strlen($handle)) { $handle = 'no_handle'; } if (!strlen($cookieid)) { $cookieid = 'no_cookieid'; } $ip = qa_remote_ip_address(); if (!strlen($ip)) { $ip = 'no_ipaddress'; } // Build the log file line to be written $fixedfields = array('Date' => date('Y\\-m\\-d'), 'Time' => date('H\\:i\\:s'), 'IPaddress' => $ip, 'UserID' => $userid, 'Username' => $handle, 'CookieID' => $cookieid, 'Event' => $event); $fields = $fixedfields; foreach ($params as $key => $value) { $fields['param_' . $key] = $key . '=' . $this->value_to_text($value, $key); } $string = implode("\t", $fields); // Build the full path and file name $directory = qa_opt('event_logger_directory'); if (substr($directory, -1) != '/') { $directory .= '/'; } $filename = $directory . 'q2a-log-' . date('Y\\-m\\-d') . '.txt'; // Open, lock, write, unlock, close (to prevent interference between multiple writes) $exists = file_exists($filename); $file = @fopen($filename, 'a'); if (is_resource($file)) { if (flock($file, LOCK_EX)) { if (!$exists && filesize($filename) === 0 && !qa_opt('event_logger_hide_header')) { $string = "Question2Answer " . QA_VERSION . " log file generated by Event Logger plugin.\n" . "This file is formatted as tab-delimited text with UTF-8 encoding.\n\n" . implode("\t", array_keys($fixedfields)) . "\textras...\n\n" . $string; } fwrite($file, $string . "\n"); flock($file, LOCK_UN); } fclose($file); } } }
function UpdateVote($newevent, $postid, $userid, $params, $eventname, $value) { $effecteduserid = $this->GetUseridFromPost($postid); $posts = qa_db_read_all_values(qa_db_query_sub('SELECT params FROM ^ra_userevent WHERE postid=$ AND event=$', $postid, $newevent)); if (!isset($effecteduserid)) { return; } // post from anonymous user if (count($posts) == 0) { // Add New Event if ($eventname != 'q_vote_nil' && $eventname != 'a_vote_nil' && $eventname != 'unfavorite') { $question = $this->GetQuestion($params); $params['qtitle'] = $question['title']; $params['qid'] = $question['postid']; $params['newvotes'] = $value; $params[$eventname] = 1; $this->AddEvent($postid, $userid, $effecteduserid, $params, $newevent); if (qw_check_pref_for_event($effecteduserid, $newevent, $all_preferences)) { qw_do_action('user_event_' . $newevent, $postid, $userid, $effecteduserid, $params, $newevent); } } } else { $postparams = json_decode($posts[0], true); if ($eventname == 'q_vote_nil' || $eventname == 'a_vote_nil') { $netvotes = $this->GetVotesFromPost($postid); $params['newvotes'] = $netvotes; $diffrence = (int) $postparams['newvotes'] - (int) $netvotes; switch ($eventname) { case 'q_vote_nil': if ($diffrence == 1) { //upvote cancelled $params['q_vote_up'] = (int) $postparams['q_vote_up'] - 1; } elseif ($diffrence == -1) { //downvote cancelled $params['q_vote_down'] = (int) $postparams['q_vote_down'] - 1; } break; case 'a_vote_nil': if ($diffrence == 1) { //upvote cancelled $params['a_vote_up'] = (int) $postparams['a_vote_up'] - 1; } elseif ($diffrence == -1) { //downvote cancelled $params['a_vote_down'] = (int) $postparams['a_vote_down'] - 1; } break; } } else { if (isset($postparams[$eventname]) && ($eventname == 'favorite' || $eventname == 'unfavorite')) { $params[$eventname] = (int) $postparams[$eventname] + $value; } else { $params[$eventname] = (int) $postparams[$eventname] + 1; $params['newvotes'] = (int) $postparams['newvotes'] + $value; } } foreach ($postparams as $key => $value) { if (!isset($params[$key])) { $params[$key] = $value; } } $paramstring = $this->ParamToString($params); qa_db_query_sub("UPDATE ^ra_userevent SET datetime=NOW(), userid=\$, effecteduserid=\$, postid=\$, event=\$, params=\$ WHERE postid=\$ AND event=\$", $userid, $effecteduserid, $postid, $newevent, $paramstring, $postid, $newevent); if (qw_check_pref_for_event($effecteduserid, $newevent, $all_preferences)) { qw_do_action('user_event_' . $newevent, $postid, $userid, $effecteduserid, $params, $newevent); } } }
less_css('dude'); $context->ra_builder_css(); $css = qw_get_all_styles($context->template); if (!empty($css)) { foreach ($css as $css_src) { if (isset($css_src['file']) && filter_var($css_src['file'], FILTER_VALIDATE_URL) !== FALSE) { echo '<link rel="stylesheet" type="text/css" href="' . $css_src['file'] . '"/>'; } } } if (!empty($context->content['notices'])) { echo '<style><!--', '.qa-body-js-on .qa-notice {display:none;}', '//--></style>'; } //register a hook if (qw_hook_exist('head_script')) { echo qw_do_action('head_script', $context); } $scripts = qw_get_all_scripts($context->template); echo '<script> ajax_url = "' . QW_CONTROL_URL . '/ajax.php"; theme_url = "' . Q_THEME_URL . '"; site_url = "' . QW_BASE_URL . '";</script>'; if (!empty($scripts)) { foreach ($scripts as $script_src) { if (filter_var($script_src['file'], FILTER_VALIDATE_URL) !== FALSE) { echo '<script type="text/javascript" src="' . $script_src['file'] . '"></script>'; } } } ?> <link rel="stylesheet" type="text/css" href="<?php echo DUDE_THEME_URL; ?> /font/style.css">
<?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_once '../../qa-include/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')); require_once QA_INCLUDE_DIR . 'qa-app-users.php'; require_once QA_INCLUDE_DIR . 'qa-app-cookies.php'; require_once QA_INCLUDE_DIR . 'qa-app-votes.php'; require_once QA_INCLUDE_DIR . 'qa-app-format.php'; require_once QA_INCLUDE_DIR . 'qa-app-options.php'; require_once QA_INCLUDE_DIR . 'qa-db-selects.php'; if (isset($_REQUEST['action'])) { $action = 'qw_ajax_' . $_REQUEST['action']; qw_do_action($action, array()); }