Exemplo n.º 1
0
 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');
 }
Exemplo n.º 2
0
 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));
 }
Exemplo n.º 3
0
 /**
  * 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;
 }