示例#1
0
    static function calculateScore($conn)
    {
        // calculate score
        $query = '
			SELECT 
				ifnull(SUM(quest.score),0) as sum_score 
			FROM 
				users_quests
			INNER JOIN 
				quest ON quest.idquest = users_quests.questid AND quest.gameid = ?
			WHERE 
				(users_quests.userid = ?)
		';
        $score = 0;
        $stmt = $conn->prepare($query);
        $stmt->execute(array(APIGame::id(), APISecurity::userid()));
        if ($row = $stmt->fetch()) {
            $score = $row['sum_score'];
        }
        return $score;
    }
示例#2
0
文件: pass.php 项目: azizjonm/fhq
     $stmt_users_quests = $conn->prepare("INSERT INTO users_quests(userid, questid, dt_passed) VALUES(?,?,NOW())");
     $stmt_users_quests->execute(array(APISecurity::userid(), $questid));
     $new_user_score = APIHelpers::calculateScore($conn);
     $response['new_user_score'] = intval($new_user_score);
     if (APISecurity::score() != $response['new_user_score']) {
         APISecurity::setUserScore($response['new_user_score']);
         $query2 = 'UPDATE users_games SET date_change = NOW(), score = ? WHERE userid = ? AND gameid = ?;';
         $stmt2 = $conn->prepare($query2);
         $stmt2->execute(array(intval($new_user_score), APISecurity::userid(), APIGame::id()));
     }
     APIQuest::updateCountUserSolved($conn, $questid);
     APIAnswerList::addTryAnswer($conn, $questid, $answer, $real_answer, $levenshtein, 'Yes');
     APIAnswerList::movedToBackup($conn, $questid);
     // add to public events
     if (!APISecurity::isAdmin()) {
         APIEvents::addPublicEvents($conn, "users", 'User #' . APISecurity::userid() . ' {' . APISecurity::nick() . '} passed quest #' . $questid . ' {' . $questname . '} from game #' . APIGame::id() . ' {' . APIGame::title() . '} (new user score: ' . $new_user_score . ')');
     }
 } else {
     // check already try pass
     $stmt_check_tryanswer = $conn->prepare('select count(*) as cnt from tryanswer where answer_try = ? and iduser = ? and idquest = ?');
     $stmt_check_tryanswer->execute(array($answer, $userid, intval($questid)));
     if ($row_check_tryanswer = $stmt_check_tryanswer->fetch()) {
         $count = intval($row_check_tryanswer['cnt']);
         $response['checkanswer'] = array($answer, $userid, intval($questid));
         if ($count > 0) {
             APIHelpers::showerror(1318, 'Your already try this answer. Levenshtein distance: ' . $levenshtein);
         }
     }
     APIAnswerList::addTryAnswer($conn, $questid, $answer, $real_answer, $levenshtein, 'No');
     APIHelpers::showerror(1216, 'Answer incorrect. Levenshtein distance: ' . $levenshtein);
 }
示例#3
0
文件: delete.php 项目: azizjonm/fhq
    $stmt = $conn->prepare('SELECT * FROM quest WHERE idquest = ?');
    $stmt->execute(array(intval($questid)));
    if ($row = $stmt->fetch()) {
        $name = $row['name'];
        $subject = $row['subject'];
    } else {
        APIHelpers::showerror(1190, 'Quest #' . $gameid . ' does not exists.');
    }
} catch (PDOException $e) {
    APIHelpers::showerror(1152, $e->getMessage());
}
// todo recalculate score for users
try {
    $stmt_quest = $conn->prepare('DELETE FROM quest WHERE idquest = ?');
    $stmt_quest->execute(array(intval($questid)));
    // remove from tryanswer
    $stmt_tryanswer = $conn->prepare('DELETE FROM tryanswer WHERE idquest = ?');
    $stmt_tryanswer->execute(array(intval($questid)));
    // remove from tryanswer_backup
    $stmt_tryanswer_backup = $conn->prepare('DELETE FROM tryanswer_backup WHERE idquest = ?');
    $stmt_tryanswer_backup->execute(array(intval($questid)));
    // remove from users_quests
    $stmt_users_quests = $conn->prepare('DELETE FROM users_quests WHERE questid = ?');
    $stmt_users_quests->execute(array(intval($questid)));
    $response['result'] = 'ok';
    APIEvents::addPublicEvents($conn, "quests", "Removed quest #" . $questid . ' ' . htmlspecialchars($name) . ' (subject: ' . htmlspecialchars($subject) . ') ');
} catch (PDOException $e) {
    APIHelpers::showerror(1063, $e->getMessage());
}
APIQuest::updateMaxGameScore($conn, APIGame::id());
APIHelpers::endpage($response);
示例#4
0
文件: get.php 项目: azizjonm/fhq
$response['result'] = 'ok';
$conn = APIHelpers::createConnection($config);
$response['userid'] = APISecurity::userid();
$params = array();
$params[] = APISecurity::userid();
$params[] = intval($questid);
$filter_by_state = '';
$filter_by_score = '';
$filter_by_game = '';
if (!APISecurity::isAdmin()) {
    $filter_by_state = ' AND quest.state = ?';
    $params[] = 'open';
    $filter_by_score = ' AND quest.min_score <= ?';
    $params[] = APISecurity::score();
    $filter_by_game = ' AND quest.gameid = ? ';
    $params[] = APIGame::id();
}
$query = '
			SELECT 
				quest.idquest,
				quest.name,
				quest.score,
				quest.min_score,
				quest.text,
				quest.state,
				quest.subject,
				quest.author,
				quest.gameid,
				users_quests.dt_passed
			FROM
				quest
示例#5
0
/*
 * API_NAME: User Answer List
 * API_DESCRIPTION: Method will be returned answer list for current user and questid
 * API_ACCESS: authorized users
 * API_INPUT: token - string, token
 * API_INPUT: questid - integer, Identificator of the quest
 */
$curdir_statistics_user_answers = dirname(__FILE__);
include_once $curdir_statistics_user_answers . "/../api.lib/api.base.php";
include_once $curdir_statistics_user_answers . "/../api.lib/api.game.php";
include_once $curdir_statistics_user_answers . "/../../config/config.php";
include_once $curdir_statistics_user_answers . "/../api.lib/loadtoken.php";
$response = APIHelpers::startpage($config);
APIHelpers::checkAuth();
$message = '';
if (!APIGame::checkGameDates($message)) {
    APIHelpers::showerror(1085, $message);
}
if (!APIHelpers::issetParam('questid')) {
    APIHelpers::showerror(1086, 'Not found parameter "questid"');
}
$questid = APIHelpers::getParam('questid', 0);
if (!is_numeric($questid)) {
    APIHelpers::showerror(1087, 'parameter "questid" must be numeric');
}
$response['result'] = 'ok';
$conn = APIHelpers::createConnection($config);
$response['userid'] = APISecurity::userid();
$response['questid'] = $questid;
$params[] = APISecurity::userid();
$params[] = intval($questid);
示例#6
0
文件: list.php 项目: azizjonm/fhq
			WHERE
				gameid = ?
				' . $filter_by_state . '
				' . $filter_by_score . '
			GROUP BY
				quest.subject
	');
    $stmt->execute(array(APIGame::id()));
    while ($row = $stmt->fetch()) {
        $response['subjects'][$row['subject']] = $row['cnt'];
    }
} catch (PDOException $e) {
    APIHelpers::showerror(1100, $e->getMessage());
}
/*$userid = APIHelpers::getParam('userid', 0);*/
$params = array(APISecurity::userid(), APIGame::id());
// filter by status
$arrWhere_status = array();
if ($response['filter']['open']) {
    $arrWhere_status[] = '(isnull(users_quests.dt_passed))';
}
if ($response['filter']['completed']) {
    $arrWhere_status[] = '(not isnull(users_quests.dt_passed))';
}
$where_status = '';
if (count($arrWhere_status) > 0) {
    $where_status = ' AND (' . implode(' OR ', $arrWhere_status) . ')';
}
// filter by subjects
$filter_subjects = getParam('filter_subjects', '');
$filter_subjects = explode(',', $filter_subjects);