private function onEdit(WC_Challenge $chall) { $form = $this->getForm($chall); if (false !== ($error = $form->validate($this->module))) { return $error; } $msgs = ''; $wc = WC_Site::getWeChall(); # Solution $is_case_i = isset($_POST['case_i']); if ('' !== ($solution = Common::getPostString('solution', ''))) { if (false === $chall->saveVar('chall_solution', $chall->hashSolution($solution, $is_case_i))) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } } # CASE_I $case_i = WC_Challenge::CHALL_CASE_I; if ($chall->isOptionEnabled($case_i) !== $is_case_i) { if (false === $chall->saveOption($case_i, $is_case_i)) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } } # Save score $new_score = $form->getVar('score'); $old_score = $chall->getVar('chall_score'); if ($new_score !== $old_score) { if (!WC_Challenge::isValidScore($new_score)) { $msgs .= $this->module->error('err_chall_score', array($new_score, WC_Challenge::MIN_SCORE, WC_Challenge::MAX_SCORE)); } if (false === $chall->saveVar('chall_score', $new_score)) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } if (false === $wc->saveVar('site_maxscore', WC_Challenge::getMaxScore())) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } $wc->recalcSite(); } # URL+Title (dangerous) if (false === $chall->saveVars(array('chall_url' => $form->getVar('url'), 'chall_title' => $form->getVar('title')))) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } # Creator: if (false === $chall->updateCreators($form->getVar('creators'))) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } # Tags: if (false === $chall->saveVar('chall_tags', trim($form->getVar('tags'), ' ,'))) { $msgs .= GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__)); } Module_WeChall::instance()->cacheChallTags(); # Done return $msgs . $this->module->message('msg_chall_edited'); }
private function outputScore($username) { if (false === ($user = GWF_User::getByName($username))) { die('Unknown User'); } if (false === ($site = WC_Site::getWeChall())) { die('Unknown Site'); } require_once GWF_CORE_PATH . 'module/WeChall/WC_RegAt.php'; require_once GWF_CORE_PATH . 'module/WeChall/WC_ChallSolved.php'; $score = WC_Challenge::getScoreForUser($user); $maxscore = WC_Challenge::getMaxScore(); $challs_solved = WC_ChallSolved::getChallsSolvedForUser($user); $challcount = WC_Challenge::getChallCount(); $usercount = GDO::table('GWF_User')->countRows(); $rank = WC_RegAt::calcExactRank($user); die(sprintf('%d:%s:%s:%s:%s:%s', $rank, $score, $maxscore, $challs_solved, $challcount, $usercount)); }
/** * Wechall internally bot response. * The advantage over the other method is accurate challcount. * @param string $input * @return string */ public function wechallChalls($input) { if ($input === '') { return sprintf('Try wechallchalls.php?userame=blub'); } require_once GWF_CORE_PATH . 'module/WeChall/WC_ChallSolved.php'; $wechall = WC_Site::getWeChall(); $siteid = $wechall->getID(); if (false !== ($user = GWF_User::getByName($input))) { if ($user->isOptionEnabled(0x10000000)) { die('This user is not ranked!'); } $rank = WC_RegAt::calcExactSiteRank($user, $siteid); } elseif (false !== ($user = WC_RegAt::getUserBySiteRank($siteid, $input))) { $rank = intval($input); } else { return sprintf('The user does not exist.'); } // if (false !== ($error = $this->module->isExcludedFromAPI($user))) { // return $error; // } $userid = $user->getID(); $username = $user->displayUsername(); $solvedCount = WC_ChallSolved::getSolvedCount($userid); $score = WC_Challenge::getScoreForUser($user); $challcount = WC_Challenge::getChallCount(); $maxScore = WC_Challenge::getMaxScore(); $percent = $score / $maxScore * 100; $out = sprintf('%s solved %d of %d Challenges with %d of %d possible points (%.02f%%).', $username, $solvedCount, $challcount, $score, $maxScore, $percent); if ($rank !== false) { $out .= sprintf(' Rank for the site WeChall: %d', $rank); } return $out; }