From ebcd4567da374dfa3a710b38ed9fa5ab62628141 Mon Sep 17 00:00:00 2001 From: bdaloukas Date: Sun, 14 Oct 2012 12:30:06 +0300 Subject: [PATCH] First commit 2.0 to git --- attempt.php | 271 ++ .../backup_game_activity_task.class.php | 70 + backup/moodle2/backup_game_settingslib.php | 27 + backup/moodle2/backup_game_stepslib.php | 214 ++ .../restore_game_activity_task.class.php | 233 ++ backup/moodle2/restore_game_stepslib.php | 267 ++ bookquiz/importodt.php | 866 +++++++ bookquiz/importppt.php | 468 ++++ bookquiz/play.php | 370 +++ bookquiz/questions.php | 180 ++ bookquiz/toc.php | 135 + bookquiz/view.php | 202 ++ cross/cross_class.php | 745 ++++++ cross/crossdb_class.php | 244 ++ cross/play.php | 1128 +++++++++ cryptex/cryptexdb_class.php | 229 ++ cryptex/play.php | 332 +++ db/access.php | 101 + db/createsnakes.php | 8 + db/importsnakes.php | 53 + db/importsudoku.php | 1849 ++++++++++++++ db/install.xml | 353 +++ db/upgrade.php | 1482 +++++++++++ docs/Readme_en.pdf | Bin 0 -> 176918 bytes docs/database.pdf | Bin 0 -> 35027 bytes docs/database.xmi | 1048 ++++++++ docs/readme_el.pdf | Bin 0 -> 196972 bytes export.php | 267 ++ export/html/snakes/css/game.css | 40 + export/html/snakes/css/modal.css | 41 + export/html/snakes/css/snakes.css | 134 + export/html/snakes/css/style.css | 15 + export/html/snakes/css/subModal.css | 69 + export/html/snakes/js/common.js | 78 + export/html/snakes/js/jquery-1.6.1.min.js | 18 + .../snakes/js/jquery-ui-1.7.2.custom.min.js | 298 +++ export/html/snakes/js/snakes-mod.js | 473 ++++ export/html/snakes/js/subModal.js | 295 +++ export/html/snakes/maskBG.png | Bin 0 -> 137 bytes export/html/snakes/modalContent.html | 14 + export/javame/hangman/simple/KeyCanvas.class | Bin 0 -> 11726 bytes export/javame/hangman/simple/KeyCanvas.java | 537 ++++ export/javame/hangman/simple/hangman-1.class | Bin 0 -> 718 bytes export/javame/hangman/simple/hangman.class | Bin 0 -> 1186 bytes export/javame/hangman/simple/hangman.java | 566 +++++ .../hangman/simple/lang/el_utf8/language.txt | 3 + .../hangman/simple/lang/en_utf8/language.txt | 4 + .../hangman/simple/lang/es_utf8/language.txt | 4 + .../javame/hangmanp/simple/hangmanp-1.class | Bin 0 -> 724 bytes export/javame/hangmanp/simple/hangmanp.class | Bin 0 -> 1192 bytes export/javame/hangmanp/simple/hangmanp.java | 33 + .../javame/hangmanp/simple/keycanvasp.class | Bin 0 -> 12075 bytes export/javame/hangmanp/simple/keycanvasp.java | 570 +++++ .../hangmanp/simple/lang/el_utf8/language.txt | 3 + .../hangmanp/simple/lang/en_utf8/language.txt | 4 + .../hangmanp/simple/lang/es_utf8/language.txt | 4 + exporthtml.php | 418 ++++ exporthtml_hangman.php | 360 +++ exporthtml_millionaire.php | 526 ++++ exporthtml_snakes.php | 502 ++++ exportjavame.php | 391 +++ hangman/play.php | 487 ++++ header.php | 79 + hiddenpicture/numbers.png | Bin 0 -> 6574 bytes hiddenpicture/picture.php | 107 + hiddenpicture/play.php | 482 ++++ images/soundplay.gif | Bin 0 -> 449 bytes index.php | 96 + lang/ca/game.php | 305 +++ lang/de/game.php | 304 +++ lang/el/game.php | 307 +++ lang/en/game.php | 304 +++ lang/es/game.php | 305 +++ lang/eu/game.php | 304 +++ lang/fr/game.php | 304 +++ lang/he/game.php | 304 +++ lang/hr/game.php | 306 +++ lang/it/game.php | 305 +++ lang/lt/game.php | 306 +++ lang/nl/game.php | 305 +++ lang/no/game.php | 305 +++ lang/pl/game.php | 304 +++ lang/pt_br/game.php | 305 +++ lang/ru/game.php | 305 +++ lang/sq/game.php | 304 +++ lang/uk/game.php | 304 +++ lang/zh_cn/game.php | 304 +++ lib.php | 1101 +++++++++ locallib.php | 1896 ++++++++++++++ millionaire/play.php | 638 +++++ mod_form.php | 473 ++++ pagelib.php | 92 + pix/bookquiz/add.gif | Bin 0 -> 68 bytes pix/bookquiz/generateimscp.gif | Bin 0 -> 803 bytes pix/bookquiz/nav_exit.gif | Bin 0 -> 248 bytes pix/bookquiz/nav_next.gif | Bin 0 -> 246 bytes pix/bookquiz/nav_prev.gif | Bin 0 -> 247 bytes pix/bookquiz/nav_prev_dis.gif | Bin 0 -> 209 bytes pix/bookquiz/nav_sep.gif | Bin 0 -> 41 bytes pix/bookquiz/print_book.gif | Bin 0 -> 204 bytes pix/bookquiz/print_chapter.gif | Bin 0 -> 158 bytes pix/hangman/1/hangman_0.jpg | Bin 0 -> 3241 bytes pix/hangman/1/hangman_1.jpg | Bin 0 -> 3649 bytes pix/hangman/1/hangman_2.jpg | Bin 0 -> 3932 bytes pix/hangman/1/hangman_3.jpg | Bin 0 -> 4176 bytes pix/hangman/1/hangman_4.jpg | Bin 0 -> 4344 bytes pix/hangman/1/hangman_5.jpg | Bin 0 -> 4500 bytes pix/hangman/1/hangman_6.jpg | Bin 0 -> 4646 bytes pix/icon.gif | Bin 0 -> 998 bytes pix/millionaire/1/5050.png | Bin 0 -> 1018 bytes pix/millionaire/1/5050x.png | Bin 0 -> 1399 bytes pix/millionaire/1/people.png | Bin 0 -> 1314 bytes pix/millionaire/1/peoplex.png | Bin 0 -> 1577 bytes pix/millionaire/1/telephone.png | Bin 0 -> 1037 bytes pix/millionaire/1/telephonex.png | Bin 0 -> 1440 bytes pix/millionaire/1/x.png | Bin 0 -> 927 bytes preview.php | 67 + print.php | 57 + report.php | 79 + report/default.php | 49 + report/overview/report.php | 615 +++++ review.php | 327 +++ showanswers.php | 405 +++ showattempts.php | 256 ++ snakes/1/dice1.png | Bin 0 -> 52307 bytes snakes/1/dice2.png | Bin 0 -> 53409 bytes snakes/1/dice3.png | Bin 0 -> 55368 bytes snakes/1/dice4.png | Bin 0 -> 52442 bytes snakes/1/dice5.png | Bin 0 -> 52681 bytes snakes/1/dice6.png | Bin 0 -> 53038 bytes snakes/1/la01.png | Bin 0 -> 1877 bytes snakes/1/la02.png | Bin 0 -> 3003 bytes snakes/1/la03.png | Bin 0 -> 4277 bytes snakes/1/la04.png | Bin 0 -> 5379 bytes snakes/1/la11.png | Bin 0 -> 3163 bytes snakes/1/la12.png | Bin 0 -> 20170 bytes snakes/1/la13.png | Bin 0 -> 27178 bytes snakes/1/la14.png | Bin 0 -> 31888 bytes snakes/1/la21.png | Bin 0 -> 3874 bytes snakes/1/la22.png | Bin 0 -> 31144 bytes snakes/1/la23.png | Bin 0 -> 43251 bytes snakes/1/la24.png | Bin 0 -> 66981 bytes snakes/1/la31.png | Bin 0 -> 5334 bytes snakes/1/la33.png | Bin 0 -> 55106 bytes snakes/1/la34.png | Bin 0 -> 80835 bytes snakes/1/la44.png | Bin 0 -> 106336 bytes snakes/1/meter.png | Bin 0 -> 2795 bytes snakes/1/numbers.png | Bin 0 -> 4983 bytes snakes/1/player1.png | Bin 0 -> 1582 bytes snakes/1/sa01.png | Bin 0 -> 3740 bytes snakes/1/sa02.png | Bin 0 -> 6877 bytes snakes/1/sa03.png | Bin 0 -> 7827 bytes snakes/1/sa04.png | Bin 0 -> 8852 bytes snakes/1/sa11.png | Bin 0 -> 7503 bytes snakes/1/sa12.png | Bin 0 -> 12423 bytes snakes/1/sa13.png | Bin 0 -> 14875 bytes snakes/1/sa14.png | Bin 0 -> 15879 bytes snakes/1/sa21.png | Bin 0 -> 3903 bytes snakes/1/sa22.png | Bin 0 -> 14801 bytes snakes/1/sa23.png | Bin 0 -> 19424 bytes snakes/1/sa24.png | Bin 0 -> 22955 bytes snakes/1/sa33.png | Bin 0 -> 23432 bytes snakes/1/sa34.png | Bin 0 -> 28049 bytes snakes/1/sa42.png | Bin 0 -> 5062 bytes snakes/1/sa44.png | Bin 0 -> 28160 bytes snakes/boards/fidaki.jpg | Bin 0 -> 48398 bytes snakes/boards/fidaki2.jpg | Bin 0 -> 38119 bytes snakes/createboard.php | 317 +++ snakes/play.php | 439 ++++ sudoku/class.Sudoku.php | 2181 +++++++++++++++++ sudoku/create.php | 144 ++ sudoku/export.php | 33 + sudoku/license.htm | 44 + sudoku/play.php | 631 +++++ sudoku/sdd/class.SDD.php | 495 ++++ sudoku/sdd/class.logfile.php | 69 + tabs.php | 102 + translate.php | 489 ++++ version.php | 16 + view.php | 294 +++ 180 files changed, 34892 insertions(+) create mode 100644 attempt.php create mode 100644 backup/moodle2/backup_game_activity_task.class.php create mode 100644 backup/moodle2/backup_game_settingslib.php create mode 100644 backup/moodle2/backup_game_stepslib.php create mode 100644 backup/moodle2/restore_game_activity_task.class.php create mode 100644 backup/moodle2/restore_game_stepslib.php create mode 100644 bookquiz/importodt.php create mode 100644 bookquiz/importppt.php create mode 100644 bookquiz/play.php create mode 100644 bookquiz/questions.php create mode 100644 bookquiz/toc.php create mode 100644 bookquiz/view.php create mode 100644 cross/cross_class.php create mode 100644 cross/crossdb_class.php create mode 100644 cross/play.php create mode 100644 cryptex/cryptexdb_class.php create mode 100644 cryptex/play.php create mode 100644 db/access.php create mode 100644 db/createsnakes.php create mode 100644 db/importsnakes.php create mode 100644 db/importsudoku.php create mode 100644 db/install.xml create mode 100644 db/upgrade.php create mode 100644 docs/Readme_en.pdf create mode 100644 docs/database.pdf create mode 100644 docs/database.xmi create mode 100644 docs/readme_el.pdf create mode 100644 export.php create mode 100755 export/html/snakes/css/game.css create mode 100755 export/html/snakes/css/modal.css create mode 100755 export/html/snakes/css/snakes.css create mode 100755 export/html/snakes/css/style.css create mode 100755 export/html/snakes/css/subModal.css create mode 100644 export/html/snakes/js/common.js create mode 100644 export/html/snakes/js/jquery-1.6.1.min.js create mode 100644 export/html/snakes/js/jquery-ui-1.7.2.custom.min.js create mode 100644 export/html/snakes/js/snakes-mod.js create mode 100644 export/html/snakes/js/subModal.js create mode 100644 export/html/snakes/maskBG.png create mode 100644 export/html/snakes/modalContent.html create mode 100755 export/javame/hangman/simple/KeyCanvas.class create mode 100755 export/javame/hangman/simple/KeyCanvas.java create mode 100755 export/javame/hangman/simple/hangman-1.class create mode 100755 export/javame/hangman/simple/hangman.class create mode 100755 export/javame/hangman/simple/hangman.java create mode 100644 export/javame/hangman/simple/lang/el_utf8/language.txt create mode 100644 export/javame/hangman/simple/lang/en_utf8/language.txt create mode 100644 export/javame/hangman/simple/lang/es_utf8/language.txt create mode 100644 export/javame/hangmanp/simple/hangmanp-1.class create mode 100644 export/javame/hangmanp/simple/hangmanp.class create mode 100644 export/javame/hangmanp/simple/hangmanp.java create mode 100644 export/javame/hangmanp/simple/keycanvasp.class create mode 100644 export/javame/hangmanp/simple/keycanvasp.java create mode 100644 export/javame/hangmanp/simple/lang/el_utf8/language.txt create mode 100644 export/javame/hangmanp/simple/lang/en_utf8/language.txt create mode 100644 export/javame/hangmanp/simple/lang/es_utf8/language.txt create mode 100644 exporthtml.php create mode 100644 exporthtml_hangman.php create mode 100644 exporthtml_millionaire.php create mode 100644 exporthtml_snakes.php create mode 100644 exportjavame.php create mode 100644 hangman/play.php create mode 100644 header.php create mode 100644 hiddenpicture/numbers.png create mode 100644 hiddenpicture/picture.php create mode 100644 hiddenpicture/play.php create mode 100644 images/soundplay.gif create mode 100644 index.php create mode 100644 lang/ca/game.php create mode 100644 lang/de/game.php create mode 100644 lang/el/game.php create mode 100644 lang/en/game.php create mode 100644 lang/es/game.php create mode 100644 lang/eu/game.php create mode 100644 lang/fr/game.php create mode 100644 lang/he/game.php create mode 100644 lang/hr/game.php create mode 100644 lang/it/game.php create mode 100644 lang/lt/game.php create mode 100644 lang/nl/game.php create mode 100644 lang/no/game.php create mode 100644 lang/pl/game.php create mode 100644 lang/pt_br/game.php create mode 100644 lang/ru/game.php create mode 100644 lang/sq/game.php create mode 100644 lang/uk/game.php create mode 100644 lang/zh_cn/game.php create mode 100644 lib.php create mode 100644 locallib.php create mode 100644 millionaire/play.php create mode 100644 mod_form.php create mode 100644 pagelib.php create mode 100644 pix/bookquiz/add.gif create mode 100644 pix/bookquiz/generateimscp.gif create mode 100644 pix/bookquiz/nav_exit.gif create mode 100644 pix/bookquiz/nav_next.gif create mode 100644 pix/bookquiz/nav_prev.gif create mode 100644 pix/bookquiz/nav_prev_dis.gif create mode 100644 pix/bookquiz/nav_sep.gif create mode 100644 pix/bookquiz/print_book.gif create mode 100644 pix/bookquiz/print_chapter.gif create mode 100644 pix/hangman/1/hangman_0.jpg create mode 100644 pix/hangman/1/hangman_1.jpg create mode 100644 pix/hangman/1/hangman_2.jpg create mode 100644 pix/hangman/1/hangman_3.jpg create mode 100644 pix/hangman/1/hangman_4.jpg create mode 100644 pix/hangman/1/hangman_5.jpg create mode 100644 pix/hangman/1/hangman_6.jpg create mode 100644 pix/icon.gif create mode 100644 pix/millionaire/1/5050.png create mode 100644 pix/millionaire/1/5050x.png create mode 100644 pix/millionaire/1/people.png create mode 100644 pix/millionaire/1/peoplex.png create mode 100644 pix/millionaire/1/telephone.png create mode 100644 pix/millionaire/1/telephonex.png create mode 100644 pix/millionaire/1/x.png create mode 100644 preview.php create mode 100644 print.php create mode 100644 report.php create mode 100644 report/default.php create mode 100644 report/overview/report.php create mode 100644 review.php create mode 100644 showanswers.php create mode 100644 showattempts.php create mode 100644 snakes/1/dice1.png create mode 100644 snakes/1/dice2.png create mode 100644 snakes/1/dice3.png create mode 100644 snakes/1/dice4.png create mode 100644 snakes/1/dice5.png create mode 100644 snakes/1/dice6.png create mode 100644 snakes/1/la01.png create mode 100644 snakes/1/la02.png create mode 100644 snakes/1/la03.png create mode 100644 snakes/1/la04.png create mode 100644 snakes/1/la11.png create mode 100644 snakes/1/la12.png create mode 100644 snakes/1/la13.png create mode 100644 snakes/1/la14.png create mode 100644 snakes/1/la21.png create mode 100644 snakes/1/la22.png create mode 100644 snakes/1/la23.png create mode 100644 snakes/1/la24.png create mode 100644 snakes/1/la31.png create mode 100644 snakes/1/la33.png create mode 100644 snakes/1/la34.png create mode 100644 snakes/1/la44.png create mode 100644 snakes/1/meter.png create mode 100644 snakes/1/numbers.png create mode 100644 snakes/1/player1.png create mode 100644 snakes/1/sa01.png create mode 100644 snakes/1/sa02.png create mode 100644 snakes/1/sa03.png create mode 100644 snakes/1/sa04.png create mode 100644 snakes/1/sa11.png create mode 100644 snakes/1/sa12.png create mode 100644 snakes/1/sa13.png create mode 100644 snakes/1/sa14.png create mode 100644 snakes/1/sa21.png create mode 100644 snakes/1/sa22.png create mode 100644 snakes/1/sa23.png create mode 100644 snakes/1/sa24.png create mode 100644 snakes/1/sa33.png create mode 100644 snakes/1/sa34.png create mode 100644 snakes/1/sa42.png create mode 100644 snakes/1/sa44.png create mode 100644 snakes/boards/fidaki.jpg create mode 100644 snakes/boards/fidaki2.jpg create mode 100644 snakes/createboard.php create mode 100644 snakes/play.php create mode 100644 sudoku/class.Sudoku.php create mode 100644 sudoku/create.php create mode 100644 sudoku/export.php create mode 100644 sudoku/license.htm create mode 100644 sudoku/play.php create mode 100644 sudoku/sdd/class.SDD.php create mode 100644 sudoku/sdd/class.logfile.php create mode 100644 tabs.php create mode 100644 translate.php create mode 100644 version.php create mode 100644 view.php diff --git a/attempt.php b/attempt.php new file mode 100644 index 0000000..1905f17 --- /dev/null +++ b/attempt.php @@ -0,0 +1,271 @@ +get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + if (! $game = $DB->get_record('game', array('id' => $cm->instance))) { + print_error('invalidcoursemodule'); + } + } else { + if (! $game = $DB->get_record('game', array('id' => $q))) { + print_error('invalidgameid', 'game'); + } + if (! $course = $DB->get_record('course', array('id' => $game->course))) { + print_error('invalidcourseid'); + } + if (! $cm = get_coursemodule_from_instance('game', $game->id, $course->id)) { + print_error('invalidcoursemodule'); + } + } + + /// Check login and get context. + require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/game:view', $context); + + /// Cache some other capabilites we use several times. + $canattempt = has_capability('mod/game:attempt', $context); + $canreviewmine = has_capability('mod/game:reviewmyattempts', $context); + + /// Create an object to manage all the other (non-roles) access rules. + $timenow = time(); + //$accessmanager = new game_access_manager(game::create($game->id, $USER->id), $timenow); + + /// If no questions have been set up yet redirect to edit.php + //if (!$game->questions && has_capability('mod/game:manage', $context)) { + // redirect($CFG->wwwroot . '/mod/game/edit.php?cmid=' . $cm->id); + //} + + /// Log this request. + add_to_log($course->id, 'game', 'view', "view.php?id=$cm->id", $game->id, $cm->id); + + /// Initialize $PAGE, compute blocks + $PAGE->set_url('/mod/game/view.php', array('id' => $cm->id)); + + $edit = optional_param('edit', -1, PARAM_BOOL); + if ($edit != -1 && $PAGE->user_allowed_editing()) { + $USER->editing = $edit; + } + + $PAGE->requires->yui2_lib('event'); + + // Note: MDL-19010 there will be further changes to printing header and blocks. + // The code will be much nicer than this eventually. + $title = $course->shortname . ': ' . format_string($game->name); + + if ($PAGE->user_allowed_editing() && !empty($CFG->showblocksonmodpages)) { + $buttons = '
'. + ''. + ''. + '
'; + $PAGE->set_button($buttons); + } + + $PAGE->set_title($title); + $PAGE->set_heading($course->fullname); + + echo $OUTPUT->header(); + } + + function game_do_attempt( $id, $game, $action, $course, $context) + { + global $OUTPUT; + + $forcenew = optional_param('forcenew', false, PARAM_BOOL); // Teacher has requested new preview + $endofgame = optional_param('endofgame', false, PARAM_BOOL); + $pos = optional_param('pos', 0, PARAM_INT); + $num = optional_param('num', 0, PARAM_INT); + $q = optional_param('q', 0, PARAM_INT); + $attemptid = optional_param('attemptid', 0, PARAM_INT); + $g = optional_param('g', '', PARAM_RAW); + $finishattempt = optional_param('finishattempt', '', PARAM_TEXT); + $answer = optional_param('answer', '', PARAM_TEXT); + $continue = false; + +/// Print the main part of the page + switch( $action) + { + case 'crosscheck': + $attempt = game_getattempt( $game, $detail); + $g = game_cross_unpackpuzzle( $g); + game_cross_continue( $id, $game, $attempt, $detail, $g, $finishattempt, $context); + break; + case 'crossprint': + $attempt = game_getattempt( $game, $detail); + game_cross_play( $id, $game, $attempt, $detail, '', true, false, false, true, $context); + break; + case 'sudokucheck': //the student tries to answer a question + $attempt = game_getattempt( $game, $detail); + game_sudoku_check_questions( $id, $game, $attempt, $detail, $finishattempt, $course, $context); + $continue = true; + break; + case 'sudokucheckg': //the student tries to guess a glossaryenry + $attempt = game_getattempt( $game, $detail); + $endofgame = array_key_exists( 'endofgame', $_GET); + $continue = game_sudoku_check_glossaryentries( $id, $game, $attempt, $detail, $endofgame, $course); + $continue = true; + break; + case 'sudokucheckn': //the user tries to guess a number + $attempt = game_getattempt( $game, $detail); + game_sudoku_check_number( $id, $game, $attempt, $detail, $pos, $num, $context); + $continue = false; + break; + case 'cryptexcheck': //the user tries to guess a question + $attempt = game_getattempt( $game, $detail); + game_cryptex_check( $id, $game, $attempt, $detail, $q, $answer, $context); + break; + case 'bookquizcheck': //the student tries to answer a question + $attempt = game_getattempt( $game, $detail); + game_bookquiz_check_questions( $id, $game, $attempt, $detail, $context); + break; + case 'snakescheck': //the student tries to answer a question + $attempt = game_getattempt( $game, $detail); + game_snakes_check_questions( $id, $game, $attempt, $detail, $context); + break; + case 'snakescheckg': //the student tries to answer a question from glossary + $attempt = game_getattempt( $game, $detail); + game_snakes_check_glossary( $id, $game, $attempt, $detail, $context); + break; + case 'hiddenpicturecheck': //the student tries to answer a question + $attempt = game_getattempt( $game, $detail); + $continue = game_hiddenpicture_check_questions( $id, $game, $attempt, $detail, $finishattempt, $context); + break; + case 'hiddenpicturecheckg': //the student tries to guess a glossaryenry + $attempt = game_getattempt( $game, $detail); + game_hiddenpicture_check_mainquestion( $id, $game, $attempt, $detail, $endofgame, $context); + break; + default: + $continue = true; + break; + } + if( $continue){ + game_create( $game, $id, $forcenew, $course, $context); + } +/// Finish the page + echo $OUTPUT->footer(); + } + + + function game_create( $game, $id, $forcenew, $course, $context) + { + global $USER, $CFG, $DB; + + $attempt = game_getattempt( $game, $detail); + $chapterid = optional_param('chapterid', 0, PARAM_INT); + $newletter = optional_param('newletter', '', PARAM_ALPHA); + $action2 = optional_param('action2', '', PARAM_ALPHA); + + switch( $game->gamekind) + { + case 'cross': + game_cross_continue( $id, $game, $attempt, $detail, '', $forcenew, $context); + break; + case 'hangman': + game_hangman_continue( $id, $game, $attempt, $detail, $newletter, $action2, $context); + break; + case 'millionaire': + game_millionaire_continue( $id, $game, $attempt, $detail, $context); + break; + case 'bookquiz': + game_bookquiz_continue( $id, $game, $attempt, $detail, $chapterid, $context); + break; + case 'sudoku': + game_sudoku_continue( $id, $game, $attempt, $detail, '', $context); + break; + case 'cryptex': + game_cryptex_continue( $id, $game, $attempt, $detail, $forcenew, $context); + break; + case 'snakes': + game_snakes_continue( $id, $game, $attempt, $detail, $context); + break; + case 'hiddenpicture': + game_hiddenpicture_continue( $id, $game, $attempt, $detail, $context); + break; + default: + print_error( "Game {$game->gamekind} not found"); + break; + } + } + +function game_cross_unpackpuzzle( $g) +{ + $ret = ""; + $len = textlib::strlen( $g); + while( $len) + { + for( $i=0; $i < $len; $i++) + { + $c = textlib::substr( $g, $i, 1); + if( $c >= '1' and $c <= '9'){ + if( $i > 0){ + //found escape character + if( textlib::substr( $g, $i-1, 1) == '/'){ + $g = textlib::substr( $g, 0, $i-1).textlib::substr( $g, $i); + $i--; + $len--; + continue; + } + } + break; + } + } + + if( $i < $len){ + //found the start of a number + for( $j=$i+1; $j < $len; $j++) + { + $c = textlib::substr( $g, $j, 1); + if( $c < '0' or $c > '9'){ + break; + } + } + $count = textlib::substr( $g, $i, $j-$i); + $ret .= textlib::substr( $g, 0, $i) . str_repeat( '_', $count); + + $g = textlib::substr( $g, $j); + $len = textlib::strlen( $g); + + }else + { + $ret .= $g; + break; + } + } + + return $ret; +} diff --git a/backup/moodle2/backup_game_activity_task.class.php b/backup/moodle2/backup_game_activity_task.class.php new file mode 100644 index 0000000..05e8729 --- /dev/null +++ b/backup/moodle2/backup_game_activity_task.class.php @@ -0,0 +1,70 @@ +. + +/** + * @package mod_game + * @subpackage backup-moodle2 + * class backup_game_activity_task + * @author + * @version $Id: backup_game_activity_task.class.php,v 1.2 2012/07/25 11:16:04 bdaloukas Exp $ + * @package game + **/ + +require_once($CFG->dirroot . '/mod/game/backup/moodle2/backup_game_stepslib.php'); // Because it exists (must) +require_once($CFG->dirroot . '/mod/game/backup/moodle2/backup_game_settingslib.php'); // Because it exists (optional) + +/** + * game backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_game_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Game only has one structure step + $this->add_step(new backup_game_activity_structure_step('game_structure', 'game.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot,"/"); + + // Link to the list of gamess + $search="/(".$base."\/mod\/game\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@GAMEINDEX*$2@$', $content); + + // Link to game view by moduleid + $search="/(".$base."\/mod\/game\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@GAMEVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/backup/moodle2/backup_game_settingslib.php b/backup/moodle2/backup_game_settingslib.php new file mode 100644 index 0000000..ab78ff4 --- /dev/null +++ b/backup/moodle2/backup_game_settingslib.php @@ -0,0 +1,27 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards YOUR_NAME_GOES_HERE {@link YOUR_URL_GOES_HERE} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + // This activity has not particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) diff --git a/backup/moodle2/backup_game_stepslib.php b/backup/moodle2/backup_game_stepslib.php new file mode 100644 index 0000000..fb26b80 --- /dev/null +++ b/backup/moodle2/backup_game_stepslib.php @@ -0,0 +1,214 @@ +. + +/** + * @package mod_game + * @subpackage backup-moodle2 + * @author bdaloukas + * @version $Id: backup_game_stepslib.php,v 1.5 2012/07/25 11:16:04 bdaloukas Exp $ + */ + +/** + * Define all the backup steps that will be used by the backup_game_activity_task + */ + +/** + * Define the complete game structure for backup, with file and id annotations + */ +class backup_game_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // To know if we are including userinfo + $userinfo = $this->get_setting_value('userinfo'); + + // Define each element separated + $game = new backup_nested_element('game', array('id'), array( + 'name', 'sourcemodule', 'timeopen', 'timeclose', 'quizid', + 'glossaryid', 'glossarycategoryid', 'questioncategoryid', 'bookid', + 'gamekind', 'param1', 'param2', 'param3', + 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', + 'shuffle', 'timemodified', 'toptext', 'bottomtext', + 'grademethod', 'grade', 'decimalpoints', 'popup', + 'review', 'attempts', 'glossaryid2', 'glossarycategoryid2', + 'language', 'subcategories' + )); + + $exporthtmls = new backup_nested_element('game_export_htmls'); + $exporthtml = new backup_nested_element('game_export_html', array('id'), array( + 'filename', 'title', 'checkbutton', 'printbutton', 'inputsize', 'maxpicturewidth', 'maxpictureheight')); + + $exportjavames = new backup_nested_element('game_export_javames'); + $exportjavame = new backup_nested_element('game_export_javame', array('id'), array( + 'filename', 'icon', 'createdby', 'vendor', 'name', 'description', 'version', 'maxpicturewidth', 'maxpictureheight')); + + $grades = new backup_nested_element('game_grades'); + $grade = new backup_nested_element('game_grade', array('id'), array( + 'userid', 'score', 'timemodified')); + + $repetitions = new backup_nested_element('game_repetitions'); + $repetition = new backup_nested_element('game_repetition', array('id'), array( + 'userid', 'questionid', 'glossaryentryid', 'repetitions')); + + $attempts = new backup_nested_element('game_attempts'); + $attempt = new backup_nested_element('game_attempt', array('id'), array( + 'userid', 'timestart','timefinish', 'timelastattempt', 'lastip', + 'lastremotehost', 'preview', 'attempt','score', 'attempts', 'language')); + + $querys = new backup_nested_element('game_queries'); + $query = new backup_nested_element('game_query', array('id'), array( + 'gamekind', 'userid','sourcemodule', 'questionid', 'glossaryentryid', + 'questiontext', 'score', 'timelastattempt','studentanswer', 'col', 'row', + 'horizontal', 'answertext', 'correct', 'attachment', 'answerid', 'tries')); + + $bookquizs = new backup_nested_element('game_bookquizs'); + $bookquiz = new backup_nested_element('game_bookquiz', array('id'), array('lastchapterid')); + + $bookquiz_chapters = new backup_nested_element('game_bookquiz_chapters'); + $bookquiz_chapter = new backup_nested_element('game_bookquiz_chapter', array('id'), array( 'chapterid')); + + $bookquiz_questions = new backup_nested_element('game_bookquiz_questions'); + $bookquiz_question = new backup_nested_element('game_bookquiz_question', array('id'), array( + 'chapterid', 'questioncategoryid')); + + $crosss = new backup_nested_element('game_crosss'); + $cross = new backup_nested_element('game_cross', array('id'), array( + 'cols', 'rows', 'words', 'wordsall', 'createscore', 'createtries', + 'createtimelimit', 'createconnectors', 'createfilleds', 'createspaces', 'triesplay')); + + $cryptexs = new backup_nested_element('game_cryptexs'); + $cryptex = new backup_nested_element('game_cryptex', array('id'), array('letters')); + + $hangmans = new backup_nested_element('game_hangmans'); + $hangman = new backup_nested_element('game_hangman', array('id'), array( + 'queryid', 'letters', 'allletters', 'try', 'maxtries', 'finishedword', + 'corrects', 'iscorrect')); + + $hiddenpictures = new backup_nested_element('game_hiddenpictures'); + $hiddenpicture = new backup_nested_element('game_hiddenpicture', array('id'), array('correct', 'wrong', 'found')); + + $millionaires = new backup_nested_element('game_millionaires'); + $millionaire = new backup_nested_element('game_millionaire', array('id'), array('queryid', 'state', 'level')); + + $snakes = new backup_nested_element('game_snakes'); + $snake = new backup_nested_element('game_snake', array('id'), array('snakesdatabaseid', 'position', 'queryid', 'dice')); + + $sudokus = new backup_nested_element('game_sudokus'); + $sudoku = new backup_nested_element('game_sudoku', array('id'), array('level', 'data', 'opened', 'guess')); + + // Build the tree + $game->add_child($bookquiz_questions); + $bookquiz_questions->add_child($bookquiz_question); + + $game->add_child( $exporthtmls); + $exporthtmls->add_child( $exporthtml); + + $game->add_child( $exportjavames); + $exportjavames->add_child( $exportjavame); + + $game->add_child( $grades); + $grades->add_child( $grade); + + $game->add_child( $repetitions); + $repetitions->add_child( $repetition); + + // All these source definitions only happen if we are including user info + if ($userinfo) { + $game->add_child( $attempts); + $attempts->add_child( $attempt); + + $attempts->add_child( $querys); + $querys->add_child( $query); + + $attempts->add_child( $bookquizs); + $bookquizs->add_child( $bookquiz); + + $game->add_child($bookquiz_chapters); + $bookquiz_chapters->add_child($bookquiz_chapter); + + $attempts->add_child( $crosss); + $crosss->add_child( $cross); + + $attempts->add_child( $cryptexs); + $cryptexs->add_child( $cryptex); + + $attempts->add_child( $hangmans); + $hangmans->add_child( $hangman); + + $attempts->add_child( $hiddenpictures); + $hiddenpictures->add_child( $hiddenpicture); + + $attempts->add_child( $millionaires); + $millionaires->add_child( $millionaire); + + $attempts->add_child( $snakes); + $snakes->add_child( $snake); + + $attempts->add_child( $sudokus); + $sudokus->add_child( $sudoku); + } + + // Define sources + $game->set_source_table('game', array('id' => backup::VAR_ACTIVITYID)); + $bookquiz_question->set_source_table('game_bookquiz_questions', array('gameid' => backup::VAR_ACTIVITYID)); + $exporthtml->set_source_table('game_export_html', array('id' => backup::VAR_ACTIVITYID)); + $exportjavame->set_source_table('game_export_javame', array('id' => backup::VAR_ACTIVITYID)); + + // All the rest of elements only happen if we are including user info + if ($userinfo) { + $grade->set_source_table('game_grades', array('gameid' => backup::VAR_ACTIVITYID)); + $repetition->set_source_table('game_repetitions', array('gameid' => backup::VAR_ACTIVITYID)); + + $attempt->set_source_table('game_attempts', array( 'gameid' => backup::VAR_ACTIVITYID)); + $attempt->set_source_table('game_queries', array( 'attemptid' => backup::VAR_PARENTID)); + + $bookquiz->set_source_table('game_bookquiz', array( 'id' => backup::VAR_ACTIVITYID)); + $bookquiz_chapter->set_source_table('game_bookquiz_chapters', array( 'id' => backup::VAR_PARENTID)); + + $cross->set_source_table('game_cross', array( 'id' => backup::VAR_PARENTID)); + $cryptex->set_source_table('game_cryptex', array( 'id' => backup::VAR_PARENTID)); + $hangman->set_source_table('game_hangman', array( 'id' => backup::VAR_PARENTID)); + $hiddenpicture->set_source_table('game_hiddenpicture', array( 'id' => backup::VAR_PARENTID)); + $millionaire->set_source_table('game_millionaire', array( 'id' => backup::VAR_PARENTID)); + $snake->set_source_table('game_snakes', array( 'id' => backup::VAR_PARENTID)); + $sudoku->set_source_table('game_sudoku', array( 'id' => backup::VAR_PARENTID)); + } + // Define id annotations + $attempt->annotate_ids('user', 'userid'); + $grade->annotate_ids('user', 'userid'); + $repetition->annotate_ids('user', 'userid'); + $repetition->annotate_ids('question', 'questionid'); + $repetition->annotate_ids('glossary_entry', 'glossaryentryid'); + $query->annotate_ids('user', 'userid'); + $query->annotate_ids('question', 'questionid'); + $query->annotate_ids('glossary_enrty', 'glossaryentryid'); + $query->annotate_ids('question_answer', 'answerid'); + + $bookquiz_question->annotate_ids('book_chapter', 'chapterid'); + $bookquiz_question->annotate_ids('question_category', 'questioncategoryid'); + $bookquiz_chapter->annotate_ids('book_chapter', 'chapterid'); + $hangman->annotate_ids('game_query', 'queryid'); + $millionaire->annotate_ids('game_query', 'queryid'); + + // Define file annotations + $game->annotate_files('mod_game', 'snakes_file', null); // This file area hasn't itemid + $game->annotate_files('mod_game', 'snakes_board', null); // This file area hasn't itemid + + // Return the root element (game), wrapped into standard activity structure + return $this->prepare_activity_structure( $game); + } +} diff --git a/backup/moodle2/restore_game_activity_task.class.php b/backup/moodle2/restore_game_activity_task.class.php new file mode 100644 index 0000000..81b9134 --- /dev/null +++ b/backup/moodle2/restore_game_activity_task.class.php @@ -0,0 +1,233 @@ +. + +/** + * @package mod_game + * @subpackage backup-moodle2 + * @author bdaloukas + * @version $Id: restore_game_activity_task.class.php,v 1.3 2012/07/25 11:16:04 bdaloukas Exp $ + */ + +defined('MOODLE_INTERNAL') || die(); +require_once($CFG->dirroot . '/mod/game/backup/moodle2/restore_game_stepslib.php'); // Because it exists (must) + +/** + * game restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_game_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Game only has one structure step + $this->add_step(new restore_game_activity_structure_step('game_structure', 'game.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('game', array('toptext'), 'game'); + $contents[] = new restore_decode_content('game', array('bottomtext'), 'game'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * game logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('game', 'add', 'view.php?id={course_module}', '{game}'); + $rules[] = new restore_log_rule('game', 'update', 'view.php?id={course_module}', '{game}'); + $rules[] = new restore_log_rule('game', 'view', 'view.php?id={course_module}', '{game}'); + $rules[] = new restore_log_rule('game', 'choose', 'view.php?id={course_module}', '{game}'); + $rules[] = new restore_log_rule('game', 'choose again', 'view.php?id={course_module}', '{game}'); + $rules[] = new restore_log_rule('game', 'report', 'report.php?id={course_module}', '{game}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('game', 'view all', 'index?id={course}', null, + null, null, 'index.php?id={course}'); + $rules[] = new restore_log_rule('game', 'view all', 'index.php?id={course}', null); + + return $rules; + } + + public function after_restore() { + // Do something at end of restore + global $DB; + + // Get the blockid + $gameid = $this->get_activityid(); + + // Extract Game configdata and update it to point to the new glossary + $rec = $DB->get_record_select( 'game', 'id='.$gameid, null, + 'id,quizid,glossaryid,glossarycategoryid,questioncategoryid,bookid,glossaryid2,glossarycategoryid2'); + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'quiz', $rec->quizid); + if( $ret != false) + $rec->quizid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary', $rec->glossaryid); + if( $ret != false) + $rec->glossaryid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary_categories', $rec->glossarycategoryid); + if( $ret != false) + $rec->glossarycategoryid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question_categories', $rec->questioncategoryid); + if( $ret != false) + $rec->questioncategoryid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book', $rec->bookid); + if( $ret != false) + $rec->bookid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary', $rec->glossaryid2); + if( $ret != false) + $rec->glossaryid2 = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary_categories', $rec->glossarycategoryid); + if( $ret != false) + $rec->glossarycategoryid = $ret->newitemid; + + $DB->update_record( 'game', $rec); + + //game_repetitions + $recs = $DB->get_records_select( 'game_repetitions', 'gameid='.$gameid, null, '', + 'id,questionid,glossaryentryid'); + if( $recs != false){ + foreach( $recs as $rec){ + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question', $rec->questionid); + if( $ret != false) + $rec->questionid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary_entry', $rec->glossaryentryid); + if( $ret != false) + $rec->glossaryentryid = $ret->newitemid; + + $DB->update_record( 'game_repetitions', $rec); + } + } + + //game_queries + $recs = $DB->get_records_select( 'game_queries', 'gameid='.$gameid, null, '', + 'id,questionid,glossaryentryid,answerid'); + if( $recs != false){ + foreach( $recs as $rec){ + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question', $rec->questionid); + if( $ret != false) + $rec->questionid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary_entry', $rec->glossaryentryid); + if( $ret != false) + $rec->glossaryentryid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question_answers', $rec->glossaryentryid); + if( $ret != false) + $rec->answerid = $ret->newitemid; + + $DB->update_record( 'game_queries', $rec); + } + } + + //bookquiz + $recs = $DB->get_records_select( 'game_bookquiz', 'id='.$gameid, null, '', 'id,lastchapterid'); + if( $recs != false){ + foreach( $recs as $rec){ + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->lastchapterid); + if( $ret != false) + $rec->lastchapterid = $ret->newitemid; + + $DB->update_record( 'game_bookquiz', $rec); + } + } + + //bookquiz_chapters + $sql = "SELECT gbc.* FROM {game_bookquiz_chapters} gbc LEFT JOIN {game_attempts} a ON gbc.attemptid = a.id WHERE a.gameid=$gameid"; + $recs = $DB->get_records_sql( $sql); + if( $recs != false){ + foreach( $recs as $rec){ + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->chapterid); + if( $ret != false) + $rec->chapterid = $ret->newitemid; + + $DB->update_record( 'game_bookquiz_chapter', $rec); + } + } + + //bookquiz_questions + $recs = $DB->get_records_select( 'game_bookquiz_questions', 'id='.$gameid, null, '', 'id,chapterid,questioncategoryid'); + if( $recs != false){ + foreach( $recs as $rec){ + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->chapterid); + if( $ret != false) + $rec->chapterid = $ret->newitemid; + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->questioncategoryid); + if( $ret != false) + $rec->questioncategoryid = $ret->newitemid; + + $DB->update_record( 'game_bookquiz_questions', $rec); + } + } + + } +} diff --git a/backup/moodle2/restore_game_stepslib.php b/backup/moodle2/restore_game_stepslib.php new file mode 100644 index 0000000..08d8f7d --- /dev/null +++ b/backup/moodle2/restore_game_stepslib.php @@ -0,0 +1,267 @@ +. + +/** + * @package mod_game + * @subpackage backup-moodle2 + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Define all the restore steps that will be used by the restore_game_activity_task + */ + +/** + * Structure step to restore one game activity + */ +class restore_game_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + $userinfo = $this->get_setting_value('userinfo'); + + $paths[] = new restore_path_element('game', '/activity/game'); + $paths[] = new restore_path_element('game_export_html', '/activity/game/game_export_htmls/game_export_html'); + $paths[] = new restore_path_element('game_export_javame', '/activity/game/game_export_htmls/game_export_javame'); + $paths[] = new restore_path_element('game_bookquiz_question', '/activity/game/game_bookquiz_questions/game_bookquiz_question'); + if ($userinfo) { + $paths[] = new restore_path_element('game_grade', '/activity/game/game_grades/game_grade'); + $paths[] = new restore_path_element('game_repetition', '/activity/game/game_repetiotions/game_repetition'); + $paths[] = new restore_path_element('game_attempt', '/activity/game/game_attempts/game_attempt'); + $paths[] = new restore_path_element('game_query', '/activity/game/game_querys/game_query'); + $paths[] = new restore_path_element('game_bookquiz', '/activity/game/game_bookquizs/game_bookquiz'); + $paths[] = new restore_path_element('game_bookquiz_chapter', '/activity/game/game_bookquiz_chapters/game_bookquiz_chapter'); + $paths[] = new restore_path_element('game_cross', '/activity/game/game_crosss/game_cross'); + $paths[] = new restore_path_element('game_cryptex', '/activity/game/game_cryptexs/game_cryptex'); + $paths[] = new restore_path_element('game_hangman', '/activity/game/game_hangmans/game_hangman'); + $paths[] = new restore_path_element('game_hiddenpicture', '/activity/game/game_hiddenpictures/game_hiddenpicture'); + $paths[] = new restore_path_element('game_millionaire', '/activity/game/game_millionaires/game_millionaire'); + $paths[] = new restore_path_element('game_snake', '/activity/game/game_snakes/game_snake'); + $paths[] = new restore_path_element('game_sudoku', '/activity/game/game_sudokus/game_sudoku'); + } + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_game($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the game record + $newitemid = $DB->insert_record('game', $data); + + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function process_game_export_html($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_export_html', $data); + } + + protected function process_game_export_javame($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_export_javame', $data); + } + + protected function process_game_grade($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->gameid = $this->get_new_parentid('game'); + $data->userid = $this->get_mappingid('user', $data->userid); + + $DB->insert_record('game_grades', $data); + } + + protected function process_game_repetition($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->gameid = $this->get_new_parentid('game'); + $data->userid = $this->get_mappingid('user', $data->userid); + + $DB->insert_record('game_repetitions', $data); + } + + protected function process_game_attempt($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->gameid = $this->get_new_parentid('game'); + $data->userid = $this->get_mappingid('user', $data->userid); + + if( !isset( $data->timestart)) + $data->timestart = 0; + if( !isset( $data->timefinish)) + $data->timefinish = 0; + if( !isset( $data->timelastattempt)) + $data->timelastattempt = 0; + + $data->timestart = $this->apply_date_offset($data->timestart); + $data->timefinish = $this->apply_date_offset($data->timefinish); + $data->timelastattempt = $this->apply_date_offset($data->timelastattempt); + + $newitemid = $DB->insert_record('game_attempts', $data); + $this->set_mapping('game_attempt', $oldid, $newitemid); + } + + protected function process_game_query($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->gameid = $this->get_new_parentid('game'); + $data->attemptid = get_mappingid('game_attempt', $data->attemptid); + $data->userid = $this->get_mappingid('user', $data->userid); + + $newitemid = $DB->insert_record('game_queries', $data); + $this->set_mapping('game_query', $oldid, $newitemid); + } + + protected function process_game_bookquiz($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_bookquiz', $data); + } + + protected function process_game_bookquiz_chapter($data) { + global $DB; + + $data = (object)$data; + + $data->gameid = $this->get_new_parentid('game'); + + $DB->insert_record('game_bookquiz_chapters', $data); + } + + protected function process_game_bookquiz_question($data) { + global $DB; + + $data = (object)$data; + + $data->gameid = $this->get_new_parentid('game'); + + $DB->insert_record('game_bookquiz_questions', $data); + } + + protected function process_game_cross($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_cross', $data); + } + + protected function process_game_cryptex($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_cryptex', $data); + } + + protected function process_game_hangman($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + $data->queryid = $this->get_mappingid('game_query', $data->queryid); + + $DB->insert_record('game_hangman', $data); + } + + protected function process_game_hiddenpicture($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_hiddenpicture', $data); + } + + protected function process_game_millionaire($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + $data->queryid = $this->get_mappingid('game_query', $data->queryid); + + $DB->insert_record('game_millionaire', $data); + } + + protected function process_game_snake($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + $data->queryid = $this->get_mappingid('game_query', $data->queryid); + + $DB->insert_record('game_snakes', $data); + } + + protected function process_game_sudoku($data) { + global $DB; + + $data = (object)$data; + + $data->id = $this->get_new_parentid('game'); + + $DB->insert_record('game_sudoku', $data); + } + + protected function after_execute() { + // Add Game related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_game', 'snakes_file', null); + $this->add_related_files('mod_game', 'snakes_board', null); + } +} diff --git a/bookquiz/importodt.php b/bookquiz/importodt.php new file mode 100644 index 0000000..e2907fa --- /dev/null +++ b/bookquiz/importodt.php @@ -0,0 +1,866 @@ +bookid; + if( $bookid == 0){ + print_error( get_string( 'bookquiz_not_select_book', 'game')); + } + + if ($form = data_submitted()) + { /// Filename + + if (empty($_FILES['newfile'])) + { // file was just uploaded + notify(get_string("uploadproblem") ); + } + + if ((!is_uploaded_file($_FILES['newfile']['tmp_name']) or $_FILES['newfile']['size'] == 0)) + { + notify(get_string("uploadnofilefound") ); + } else + { // Valid file is found + if ( readdata( $course->id, 'game', $dirtemp, $r_levels, $r_titles, $r_texts, $dirfordelete)) + { // first try to reall all of the data in + if( $overwrite){ + game_bookquiz_deletebook( $course->id, $bookid); + } + $pageobjects = extract_data( $course->id, 'book', $bookid, $dirtemp, $subchapter, $r_levels, $r_titles, $r_texts); // parse all the html files into objects + clean_temp( $dirfordelete); // all done with files so dump em + + $objects = game_bookquiz_create_objects( $pageobjects, $bookid); // function to preps the data to be sent to DB + + if( !game_bookquiz_save_objects($objects)) + { // sends it to DB + print_error('could not save'); + } + }else + print_error('could not get data'); + + print_continue("{$CFG->wwwroot}/mod/game/view.php?id=$cm->id"); + echo $OUTPUT->footer($course); + exit; + } + } + + /// Print upload form + + print_heading_with_help( get_string( "bookquiz_import_odt", "game"), "importodt", "game"); + + echo $OUTPUT->box_start('center'); + ?> +
+ + + + + + + + + + + + +
+ : + + +
+ : + +
+
  + " /> +
+
+ box_end(); + + echo $OUTPUT->footer($course); + +// START OF FUNCTIONS + +//the r_basedir variable contains the directory where the temp files are +//At the end the directory must be deleted +function readdata( $courseid, $modname, &$r_basedir, &$r_levels, &$r_titles, &$r_texts, &$dirfordelete) +{ +// this function expects a odt file to be uploaded. Then it parses +// the content.xml to determine. +// Then copies the image + global $CFG; + + // create a random upload directory in temp + $newdir = $CFG->dataroot."/temp/$modname"; + if (!file_exists( $newdir)) + mkdir( $newdir); + + $i = 1; + srand((double)microtime()*1000000); + while(true) + { + $r_basedir = "$modname/$i-".rand(0,10000); + $newdir = $CFG->dataroot.'/temp/'.$r_basedir; + if (!file_exists( $newdir)) + { + mkdir( $newdir); + $newdir .= '/'; + break; + } + $i++; + } + $dirfordelete = $r_basedir; + $r_basedir .= '/'; + + $zipfile = $_FILES["newfile"]["name"]; + $tempzipfile = $_FILES["newfile"]["tmp_name"]; + + // create our directory + $path_parts = pathinfo($zipfile); + $dirname = substr($zipfile, 0, strpos($zipfile, '.'.$path_parts['extension'])); // take off the extension + if (!file_exists($newdir.$dirname)){ + mkdir($newdir.$dirname); + } + + // move our uploaded file to temp/game + move_uploaded_file( $tempzipfile, $newdir.$zipfile); + + //if the file ends with .lnk then use .odt instead + if( substr( $zipfile, -4) == ".lnk") + $zipfile = substr( $zipfile, 0, -4).".odt"; + + // unzip it! + unzip_file ( $newdir.$zipfile, $newdir.$dirname, false); + + $r_basedir .= $dirname; // update the base + $newdir .= $dirname; + + // this is the file where we get the names of the files for the slides (in the correct order too) + $content = $newdir.'/content.xml'; + $data = file_get_contents( $content); + + $content = $newdir.'/styles.xml'; + if (file_exists( $content)){ + $datastyle = file_get_contents( $content); + }else + { + $datastyle = ''; + } + + oo_game_convert_ver2( $data, $datastyle, $r_levels, $r_titles, $r_texts); + + return true; +} + + + //////////////////////// + function oo_game_convert_ver2( $data, $datastyle, &$r_levels, &$r_titles, &$r_texts) + { + $r_levels = array(); + $r_titles = array(); + $r_texts = array(); + + // we have tables, encode it here so all ', '', $data); + $data = preg_replace('##es', "base64_encode('\\1')", $data); + } + + $styles = array(); + game_bookquiz_convert_ver2_computestyles( $datastyle, $styles, true); + game_bookquiz_convert_ver2_computestyles( $data, $styles, false); + + game_bookquiz_splitsections($data, $positions, $inputs, $titles, $titleframes, $texts); + for( $i=0; $i < count( $positions); $i++) + { + preg_match_all( "#text:outline-level=\"([0-9]*)\"#es", $inputs[ $i], $matches); + $levels = $matches[ 1]; + if( count( $levels) > 0){ + $level = $levels[ 0]; + }else + { + $level = 0; + } + + $r_levels[] = $level; + $r_titles[] = strip_tags( $titles[ $i]); + + $textframe = game_bookquiz_convert($titleframes[ $i], $styles, $images); + $text = game_bookquiz_convert($texts[ $i], $styles, $images); + if( $textframe != ''){ + $text = $textframe.'
'.$text; + } + + echo "
".$titles[ $i]."
".$text."\r\n\r\n\r\n\r\n"; + + $r_texts[] = $text; + } + } + +function extract_data( $courseid, $modname, $id, $basedir, $subchapter, $levels, $titles, $texts) +{ + global $CFG; + global $matches; + + $dirtemp = $CFG->dataroot.'/temp/'.$basedir; + + for($i=0; $i < count( $levels); $i++){ + echo $levels[ $i]." ".$titles[ $i]."
"; + } + + $extractedpages = array(); + + // directory for images + make_mod_upload_directory( $courseid); // make sure moddata is made + make_upload_directory( $courseid.'/moddata/'.$modname, false); + make_upload_directory( $courseid.'/moddata/'.$modname."/".$id, false); // we store our images in a subfolder in here + + $imagedir = $CFG->dataroot.'/'.$courseid.'/moddata/'.$modname."/".$id; + + if ($CFG->slasharguments) + $imagelink = $CFG->wwwroot.'/file.php/'.$courseid.'/moddata/'.$modname."/".$id; + else + $imagelink = $CFG->wwwroot.'/file.php?file=/'.$courseid.'/moddata/'.$modname."/".$id; + + // try to make a unique subfolder to store the images + $i = 1; + while(true) + { + $newdir = $imagedir.'/'.$i; + if (!file_exists( $newdir)) + { + // ok doesnt exist so make the directory and update our paths + mkdir( $newdir); + $imagedir = $newdir; + $imagelink = $imagelink.'/'.$i; + break; + } + $i++; + } + + for( $i=0; $i < count( $titles); $i++) + { + // start building our page + $page = new stdClass; + $page->title = $titles[ $i]; + $page->content = $texts[ $i]; + //$page->source = $path_parts['basename']; // need for book only + $page->subchapter = ( $levels[ $i] >= 2); + + //check if the nexts are subchapters + for( $j=$i+1; $j < count( $titles); $j++){ + if( $levels[ $j] > 2){ + $page->content .= '
'.$titles[ $j].'
'.$texts[ $j]; + $i = $j; + continue; + } + break; + } + + preg_match_all('#="Pictures/([a-z .A-Z_0-9]*)"#es', $page->content, $imgs); + + foreach ($imgs[1] as $img) + { + $src = $dirtemp.'/Pictures/'.$img; + $dest = $imagedir.'/'.$img; + rename( $src, $dest); + + $page->content = str_replace( "Pictures/$img", $imagelink."/".$img, $page->content); + } + + // add the page to the array; + $extractedpages[] = $page; + + } // end $pages foreach loop + + return $extractedpages; +} + +/** + Clean up the temp directory +*/ +function clean_temp( $base) +{ + global $CFG; + + // this function is broken, use it to clean up later + // should only clean up what we made as well because someone else could be importing ppt as well + $dir = $CFG->dataroot.'/temp/'.$base; + + remove_dir( $dir); + //game_full_rmdir( $dir); +} + + +/** + Creates objects an chapter object that is to be inserted into the database +*/ + +function game_bookquiz_create_objects( $pageobjects, $bookid) +{ + global $DB; + + $chapters = array(); + + $lastpagenum = $DB->get_field('book_chapters', 'MAX(pagenum) as num', array( 'bookid' => $bookid)); + + foreach ($pageobjects as $pageobject) + { + $chapter = new stdClass; + + // same for all chapters + $chapter->bookid = $bookid; + $chapter->pagenum = ++$lastpagenum; + $chapter->timecreated = time(); + $chapter->timemodified = time(); + $chapter->subchapter = 0; + + if ($pageobject->title == '') + $chapter->title = "Page $count"; // no title set so make a generic one + else + $chapter->title = addslashes($pageobject->title); + + $chapter->subchapter = $pageobject->subchapter; + + $content = str_replace("\n", '', $pageobject->content); + $content = str_replace("\r", '', $content); + $content = str_replace(' ', '', $content); // puts in returns? + $content = '

'.$content.'

'; + + $chapter->content = addslashes( $content); + + $chapters[] = $chapter; + } + + return $chapters; +} + +/** + Save the chapter objects to the database +*/ +function game_bookquiz_save_objects($chapters) +{ + global $DB; + + // nothing fancy, just save them all in order + foreach ($chapters as $chapter) + { + if (!$newid=$DB->insert_record('book_chapters', $chapter)) { + print_error('Could not insert to table book_chapters'); + } + } + + return true; +} + +//splits the data to +function game_bookquiz_splitsections($data, &$positions, &$inputs, &$titles, &$titleframes, &$texts) +{ + preg_match_all('#(.*?)#es', $data, $matches, PREG_OFFSET_CAPTURE); + + $in = $matches[ 1] ; + $title = $matches[ 2]; + + $positions = array(); + $inputs = array(); + $titles = array(); + + $oldposition = 0; + $oldlen = 0; + for($i=0; $i < count( $in); $i++) + { + $inputs[] = $in[ $i][ 0]; + + $newposition = $in[ $i][ 1]; + $positions[] = $newposition; + + $titlenet = $title[ $i][ 0]; + $titleframe = ''; + + //frames inside header + preg_match_all('#(.*?)#es', $titlenet, $titlematches, PREG_OFFSET_CAPTURE); + $frames = $titlematches[ 2]; + if( count( $frames) > 0){ + for($j=0; $j < count( $frames); $j++) + { + $titleframe .= $frames[ $j][ 0]; + $titlenet = substr( $titlenet, $frames[ $j][ 1] + strlen( $frames[ $j][ 0]) + 13); + } + } + + $titles[] = $titlenet; + $titleframes[] = $titleframe; + + if( $i > 0){ + $texts[] = substr( $data, $oldposition+$oldlen, $newposition - $oldposition - $oldlen); + } + + $oldlen = strlen( $title[ $i][ 0]) + strlen( $in[ $i][ 0]) + 10; + $oldposition = $newposition; + + } + $newposition = strlen( $data); + $texts[] = substr( $data, $oldposition+$oldlen, $newposition - $oldposition - $oldlen); +} + + function game_bookquiz_convert( $data, $styles, &$images) + { + $images = array(); + + // get data + preg_match_all('#(.*?)#es', $data, $text); + $originals = $text[ 0]; + $names = $text[ 1]; + $texts = $text[ 2]; + + for( $i=0; $i < count( $texts); $i++) + { + $name = $names[ $i]; + $text = $texts[ $i]; + + //repairs draw:frame + $pattern = "##es"; + preg_match_all( $pattern, $text, $matches); + if( count( $matches[ 1]) ){ + $new = game_bookquiz_convert_image( $matches, $styles, $images); + $data = str_replace( $originals[ $i], $new, $data); + }else IF($name == 'RKRK') + { + $new = game_bookquiz_convert_RKRK( $text); + $data = str_replace( $originals[ $i], $new, $data); + }else + { + $new = '

'.game_bookquiz_convert_text( $text, $styles).'

'; + $data = str_replace( $originals[ $i], $new, $data); + } + } + + // repairs text:span text:style-name + preg_match_all( '#(.*?)#es', $data, $text); + $originals = $text[ 0]; + $names = $text[ 1]; + $texts = $text[ 2]; + for( $i=0; $i < count( $texts); $i++) + { + $name = $names[ $i]; + $text = $texts[ $i]; + + $pattern = "##es"; + preg_match_all( $pattern, $text, $matches); + if( count( $matches[ 1]) ){ + $new = game_bookquiz_convert_image( $matches, $styles, $images); + $data = str_replace( $originals[ $i], $new, $data); + }else IF($name == 'RKRK') + { + $new = game_bookquiz_convert_RKRK( $text); + $data = str_replace( $originals[ $i], $new, $data); + }else + { + $new = "'.game_bookquiz_convert_text( $text, $styles).''; + $data = str_replace( $originals[ $i], $new, $data); + } + } + + // repairs text:a + preg_match_all( '#(.*?)#es', $data, $text); + $originals = $text[ 0]; + $hrefs = $text[ 2]; + $texts = $text[ 3]; + for( $i=0; $i < count( $texts); $i++) + { + $href = $hrefs[ $i]; + $text = $texts[ $i]; + + $new = "$text"; + $data = str_replace( $originals[ $i], $new, $data); + } + + //repair text:list + preg_match_all( '#(.*?)#es', $data, $text); + $originals = $text[ 0]; + $names = $text[ 1]; + $texts = $text[ 2]; + + for( $i=0; $i < count( $texts); $i++) + { + $new = '
    '.$texts[ $i].'
'; + $data = str_replace( $originals[ $i], $new, $data); + + //I have to repair the listitems + preg_match_all( '#(.*?)#es', $data, $listitems); + $originallistitems = $listitems[ 0]; + $items = $listitems[ 1]; + for( $j=0; $j < count( $items); $j++){ + $new = '
  • '.$items[ $j]; + $data = str_replace( $originallistitems[ $j], $new, $data); + + } + } + + $data = str_replace( '', '
    ', $data); + + + + return $data; + } + + function game_bookquiz_convert_text( $text, $styles) + { + $pattern = "#(.*?)#es"; + preg_match_all( $pattern, $text, $matches); + + $originals = $matches[ 0]; + $names = $matches[ 1]; + $spantexts = $matches[ 2]; + + for( $i=0; $i < count( $names); $i++) + { + $name = $names[ $i]; + $style = $styles[ $name]; + + $new = "".$spantexts[ $i].""; + $text = str_replace( $originals[ $i], $new, $text); + } + + return $text; + } + + function game_bookquiz_convert_image( $matches, $xmlstyles, &$images) + { + $ret = ''; + + $styles = $matches[ 1]; + $pictures = $matches[ 3]; + + for( $j=0; $j < count( $pictures); $j++){ + $style = $styles[ $j]; + + $ret .= '
    '; + $images[] = $pictures[$j]; + } + + return $ret; + } + + function game_bookquiz_convert_RKRK( $text) + { + $table = base64_decode($text); + $table = stripslashes($table); + $table = strtr($table, array('' => '', '' => '', '' => '', '' => '', '' => '', '' => '', '>' => ">\n", '' => '')); + + //preg_match_all('#table:name="([a-z A-Z_0-9]*)" table:style-name="([a-z A-Z_0-9]*)">#es', $table, $repl); + preg_match_all('#table:name="(.*?)" table:style-name="(.*?)">#es', $table, $repl); + foreach($repl[0] as $val) + { + //$table = str_replace($val, '
    ', $table); + $table = str_replace($val, '', $table); + } + //preg_match_all('##es', $table, $repl); + preg_match_all('##es', $table, $repl); + foreach($repl[0] as $key => $val) + { + $table = str_replace($val, '', $table); + } + preg_match_all('##es', $table, $repl); + foreach($repl[0] as $val) + { + $table = str_replace($val, '', $table); + } + //preg_match_all('##es', $table, $repl); + preg_match_all('##es', $table, $repl); + foreach($repl[0] as $val) + { + $table = str_replace($val, '
    ', $table); + } + //maybe there are a lot of pictures inside a table + preg_match_all('#xlink:href="Pictures/([a-z.A-Z_0-9]*)"#es', $table, $repl); + foreach( $repl[ 1] as $picture) + { + $table = str_replace('', '', $table); + } + if( strpos( $table,"
    ") === false) + $table .= "
    "; + + $ret = '
    '.$table.'
    '; + + return $ret; + } +/* + function game_bookquiz_oo_unzip($file, $dir) + { + unzip_file ( $file, $dir, false); + + $dir .= '/'; + if( file_exists( $dir.'content.xml')){ + $content = file_get_contents( $dir.'content.xml'); + }else + { + $content = ''; + } + + if( file_exists( $dir.'styles.xml')){ + $contentstyles = file_get_contents( $dir.'styles.xml'); + }else + { + $contentstyles = ''; + } + + $img = array(); + $handle = opendir($dir.'Pictures'); + while (false!==($item = readdir($handle))) { + if($item != '.' && $item != '..') { + if(!is_dir($dir.'/'.$item)) { + $img[ $item] = file_get_contents( $dir.'/'.$item); + }else{ + unlink($dir.'/'.$item); + } + } + } + } +*/ + function old_game_bookquiz_oo_unzip($file, $save, $dir) + { + IF($zip = game_zip_open($file)) + { + while ($zip_entry = game_zip_read($zip)) + { + $filename = game_zip_entry_name($zip_entry); + + IF($filename == 'content.xml' and game_zip_entry_open($zip, $zip_entry, "r")) + { + $content = game_zip_entry_read($zip_entry, game_zip_entry_filesize($zip_entry)); + game_zip_entry_close($zip_entry); + } + + IF( $filename == 'styles.xml' and game_zip_entry_open($zip, $zip_entry, "r")) + { + $contentstyles = game_zip_entry_read($zip_entry, game_zip_entry_filesize($zip_entry)); + game_zip_entry_close($zip_entry); + } + + IF(ereg('Pictures/', $filename) and !ereg('Object', $filename) and game_zip_entry_open($zip, $zip_entry, "r")) + { + $img[$filename] = game_zip_entry_read($zip_entry, game_zip_entry_filesize($zip_entry)); + game_zip_entry_close($zip_entry); + } + } + IF(isset($content)) + { + IF($save == false) + return array($content, $img); + else + { + file_put_contents("$dir/content.xml", $content); + IF(isset($contentstyles)){ + file_put_contents("$dir/styles.xml", $contentstyles); + } + + IF(is_array($img)) + { + IF(!is_dir("$dir/Pictures")) + mkdir( "$dir/Pictures"); + + foreach($img as $key => $val) + file_put_contents("$dir/$key", $val); + } + } + } + } + } + + function game_bookquiz_deletebook( $courseid, $bookid) + { + global $CFG; + + if( !delete_records( 'book_chapters', 'bookid', $bookid)){ + print_error( "Can't delete records from book_chapters bookid=$bookid"); + } + + game_full_rmdir( "$CFG->dataroot/$courseid/moddata/book/$bookid"); + + } + + function game_bookquiz_convert_ver2_computestyles( $data, &$styles, $isstyle) + { + preg_match_all('#(.*?)#es', $data, $style); + + $stylenames = $style[ 1]; + $styleinfos = $style[ 2]; + $styledatas = $style[ 3]; + for($i=0; $i < count( $stylenames); $i++){ + $name = $stylenames[ $i]; + + $change = false; + for(;;){ + $pos1 = strpos( $styledatas[ $i], 'style:parent-style-name'); + $pos2 = strpos( $styledatas[ $i], '/>'); + if( ($pos1 === false) or ($pos2 === false)){ + break; + } + if( $pos1 > $pos2){ + break; + } + //is a parent style + $s = substr( $styledatas[ $i], 0, $pos2+2); + game_bookquiz_convertstyle_parent( $s, $styles); + + $styledatas[ $i] = substr( $styledatas[ $i], $pos2 + 2); + $change = true; + } + if( $change){ + //Must to recompute name, styledatas, styleinfos + preg_match_all('#(.*?)#es', $data, $style); + $name = $style[ 1][ 0]; + $styleinfos[ $i] = $style[ 2][ 0]; + $styledatas[ $i] = $style[ 3][ 0]; + } + + $styles[ $name] = game_bookquiz_convertstyle( $styledatas[ $i], $styleinfos[ $i], $styles); + } + } + + function game_bookquiz_convertstyle_parent( $data, &$styles) + { + $styleitems = array(); + + preg_match_all( '#(.*?)style:name="(.*?)"(.*?)style:parent-style-name="(.*?)"(.*?)#es', $data, $infos); + $names = $infos[ 2]; + $parents = $infos[ 4]; + if( count( $parents)){ + if( array_key_exists( $parents[ 0], $styles)){ + //is a child style. Must to copy the properties of the parent style + $a = explode( ';', $styles[ $parents[ 0]]); + foreach( $a as $s){ + $pos = strpos( $s, ':'); + $key = substr( $s, 0, $pos); + $item = substr( $s, $pos + 1); + if( $item == ''){ + continue; + } + $styleitems[ $key] = $item; + } + } + $name = $names[ 0]; + } + + $style = ''; + foreach( $styleitems as $key => $item){ + $style .= ';'.$key.':'.$item; + } + $styles[ $name] = substr( $style, 1); + } + + function game_bookquiz_convertstyle( $data, $styleinfo, $styles) + { + $styleitems = array(); + + preg_match_all( '##es', $data, $infos); + $lines = $infos[ 1]; + if( count( $lines)){ + $line = $lines[ 0]; //print_object( $lines); + + if( $line != ''){ + game_bookquiz_convertstyle_paragraph( $line, $styleitems); + } + } + + preg_match_all( '##es', $data, $infos); + $lines = $infos[ 1]; + if( count( $lines)){ + $line = $lines[ 0]; + + if( $line != ''){ + game_bookquiz_convertstyle_textproperties( $line, $styleitems); + } + } + + if( count( $styleitems) == 0){ + return ''; + } + + $style = ''; + foreach( $styleitems as $key => $item){ + $style .= ';'.$key.':'.$item; + } + + return substr( $style, 1); + } + + function game_bookquiz_convertstyle_paragraph( $line, &$styleitems) + { + preg_match_all( '#(.*?)=(.*?) #es', $line.' ', $datas); + $data1 = $datas[ 1]; + $data2 = $datas[ 2]; + + $ret = ''; + for( $i=0; $i < count( $data1); $i++){ + $eq1 = $data1[ $i]; + $eq2 = $data2[ $i]; + + if( (substr( $eq2, 0, 1) == '"') and (substr( $eq2, -1, 1) == '"')){ + $eq2 = substr( $eq2, 1, -1); + } + + switch( $eq1){ + case 'fo:text-align': + $styleitems[ 'align'] = $eq2; + //print_object( $styleitems); + break; + case 'fo:background-color': + $styleitems[ 'background-color'] = $eq2; + break; + } + } + } + + function game_bookquiz_convertstyle_textproperties( $line, &$styleitems) + { + preg_match_all( '#(.*?)=(.*?) #es', $line.' ', $datas); + $data1 = $datas[ 1]; + $data2 = $datas[ 2]; + + $ret = ''; + for( $i=0; $i < count( $data1); $i++){ + $eq1 = $data1[ $i]; + $eq2 = $data2[ $i]; + + if( (substr( $eq2, 0, 1) == '"') and (substr( $eq2, -1, 1) == '"')){ + $eq2 = substr( $eq2, 1, -1); + } + + switch( $eq1){ + case 'fo:font-size': + case 'fo:color': + case 'fo:background-color': + case 'fo:font-style': + case 'fo:font-weight': + $styleitems[ substr( $eq1, 3)] = $eq2; + break; + case 'style_text_underline_style': + if( $eq2 == 'solid'){ + $styleitems[ 'text-decoration'] = 'underline'; + } + break; + } + } + } diff --git a/bookquiz/importppt.php b/bookquiz/importppt.php new file mode 100644 index 0000000..9d63925 --- /dev/null +++ b/bookquiz/importppt.php @@ -0,0 +1,468 @@ +get_record('course', array( 'id' => $cm->course))) { + print_error('Course is misconfigured'); + } + + // allows for adaption for multiple modules + if(! $modname = $DB->get_field('modules', 'name', array( 'id' => $cm->module))) { + print_error('Could not find module name'); + } + + if (! $mod = $DB->get_record($modname, array( "id" => $cm->instance))) { + print_error('Course module is incorrect'); + } + + require_login($course->id, false); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/lesson:edit', $context); + + $strimportppt = get_string("importppt", "lesson"); + $strlessons = get_string("modulenameplural", "lesson"); + + echo $OUTPUT->heading("$strimportppt", " $strimportppt", "id\">$strlessons -> wwwroot}/mod/$modname/view.php?id=$cm->id\">".format_string($mod->name,true)."-> $strimportppt"); + + if ($form = data_submitted()) { /// Filename + + if (empty($_FILES['newfile'])) { // file was just uploaded + notify(get_string("uploadproblem") ); + } + + if ((!is_uploaded_file($_FILES['newfile']['tmp_name']) or $_FILES['newfile']['size'] == 0)) { + notify(get_string("uploadnofilefound") ); + + } else { // Valid file is found + + if ($rawpages = readdata($_FILES, $course->id, $modname)) + { // first try to reall all of the data in + $pageobjects = extract_data($rawpages, $course->id, $mod->name, $modname); // parse all the html files into objects + clean_temp(); // all done with files so dump em + + $mod_create_objects = $modname.'_create_objects'; + $mod_save_objects = $modname.'_save_objects'; + + $objects = $mod_create_objects($pageobjects, $mod->id); // function to preps the data to be sent to DB + + if(! $mod_save_objects($objects, $mod->id, $pageid)) { // sends it to DB + print_error( 'could not save'); + } + } else { + print_error('could not get data'); + } + + echo "
    "; + print_continue("{$CFG->wwwroot}/mod/$modname/view.php?id=$cm->id"); + echo $OUTPUT->footer($course); + exit; + } + } + + /// Print upload form + + print_heading_with_help($strimportppt, "importppt", "lesson"); + + echo $OUTPUT->box_start('center'); + echo "
    "; + echo "id\" />\n"; + echo "\n"; + echo ""; + + echo ""; + + echo "
    "; + print_string("upload"); + echo ":"; + echo ""; + echo "
     "; + echo ""; + echo "
    "; + echo "
    "; + echo $OUTPUT->box_end(); + + echo $OUTPUT->footer($course); + +// START OF FUNCTIONS + +function readdata($file, $courseid, $modname) { +// this function expects a zip file to be uploaded. Then it parses +// outline.htm to determine the slide path. Then parses each +// slide to get data for the content + + global $CFG; + + // create an upload directory in temp + make_upload_directory('temp/'.$modname); + + $base = $CFG->dataroot."/temp/$modname/"; + + $zipfile = $_FILES["newfile"]["name"]; + $tempzipfile = $_FILES["newfile"]["tmp_name"]; + + // create our directory + $path_parts = pathinfo($zipfile); + $dirname = substr($zipfile, 0, strpos($zipfile, '.'.$path_parts['extension'])); // take off the extension + if (!file_exists($base.$dirname)) { + mkdir($base.$dirname); + } + + // move our uploaded file to temp/lesson + move_uploaded_file($tempzipfile, $base.$zipfile); + + // unzip it! + unzip_file($base.$zipfile, $base, false); + + $base = $base.$dirname; // update the base + + // this is the file where we get the names of the files for the slides (in the correct order too) + $outline = $base.'/outline.htm'; + + $pages = array(); + + if (file_exists($outline) and is_readable($outline)) { + $outlinecontents = file_get_contents($outline); + $filenames = array(); + preg_match_all("/javascript:GoToSld\('(.*)'\)/", $outlinecontents, $filenames); // this gets all of our files names + + // file $pages with the contents of all of the slides + foreach ($filenames[1] as $file) { + $path = $base.'/'.$file; + if (is_readable($path)) { + $pages[$path] = file_get_contents($path); + } else { + return false; + } + } + } else { + // cannot find the outline, so grab all files that start with slide + $dh = opendir($base); + while (false !== ($file = readdir($dh))) { // read throug the directory + if ('slide' == substr($file, 0, 5)) { // check for name (may want to check extension later) + $path = $base.'/'.$file; + if (is_readable($path)) { + $pages[$path] = file_get_contents($path); + } else { + return false; + } + } + } + + ksort($pages); // order them by file name + } + + if (empty($pages)) { + return false; + } + + return $pages; +} + +function extract_data($pages, $courseid, $lessonname, $modname) { + // this function attempts to extract the content out of the slides + // the slides are ugly broken xml. and the xml is broken... yeah... + + global $CFG; + global $matches; + + $extratedpages = array(); + + // directory for images + make_mod_upload_directory($courseid); // make sure moddata is made + make_upload_directory($courseid.'/moddata/'.$modname, false); // we store our images in a subfolder in here + + $imagedir = $CFG->dataroot.'/'.$courseid.'/moddata/'.$modname; + + if ($CFG->slasharguments) { + $imagelink = $CFG->wwwroot.'/file.php/'.$courseid.'/moddata/'.$modname; + } else { + $imagelink = $CFG->wwwroot.'/file.php?file=/'.$courseid.'/moddata/'.$modname; + } + + // try to make a unique subfolder to store the images + $lessonname = str_replace(' ', '_', $lessonname); // get rid of spaces + $i = 0; + while(true) { + if (!file_exists($imagedir.'/'.$lessonname.$i)) { + // ok doesnt exist so make the directory and update our paths + mkdir($imagedir.'/'.$lessonname.$i); + $imagedir = $imagedir.'/'.$lessonname.$i; + $imagelink = $imagelink.'/'.$lessonname.$i; + break; + } + $i++; + } + + foreach ($pages as $file => $content) { + // to make life easier on our preg_match_alls, we strip out all tags except + // for div and img (where our content is). We want div because sometimes we + // can identify the content in the div based on the div's class + + $tags = '
    '; // should also allow + $string = strip_tags($content,$tags); + //echo s($string); + + $matches = array(); + // this will look for a non nested tag that is closed + // want to allow (maybe more) tags but when we do that + // the preg_match messes up. + preg_match_all("/(<([\w]+)[^>]*>)([^<\\2>]*)(<\/\\2>)/", $string, $matches); + //(<([\w]+)[^>]*>)([^<\\2>]*)(<\/\\2>) original pattern + //(<(div+)[^>]*>)[^() work in progress + + $path_parts = pathinfo($file); + $file = substr($path_parts['basename'], 0, strpos($path_parts['basename'], '.')); // get rid of the extension + + $imgs = array(); + // this preg matches all images + preg_match_all("/]*(src\=\"(".$file."\_image[^>^\"]*)\"[^>]*)>/i", $string, $imgs); + + // start building our page + $page = new stdClass; + $page->title = ''; + $page->contents = array(); + $page->images = array(); + $page->source = $path_parts['basename']; // need for book only + + // this foreach keeps the style intact. Found it doesn't help much. But if you want back uncomment + // this foreach and uncomment the line with the comment imgstyle in it. Also need to comment out + // the $page->images[]... line in the next foreach + /*foreach ($imgs[1] as $img) { + $page->images[] = ''; + }*/ + foreach ($imgs[2] as $img) { + copy($path_parts['dirname'].'/'.$img, $imagedir.'/'.$img); + $page->images[] = ""; // comment out this line if you are using the above foreach loop + } + for($i = 0; $i < count($matches[1]); $i++) { // go through all of our div matches + + $class = isolate_class($matches[1][$i]); // first step in isolating the class + + // check for any static classes + switch ($class) { + case 'T': // class T is used for Titles + $page->title = $matches[3][$i]; + break; + case 'B': // I would guess that all bullet lists would start with B then go to B1, B2, etc + case 'B1': // B1-B4 are just insurance, should just hit B and all be taken care of + case 'B2': + case 'B3': + case 'B4': + $page->contents[] = build_list('
    ');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/* + * jQuery UI Selectable 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.rightg||j.bottomd&&j.righth&&j.bottom=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)f&&(e+h)m[this.floating?"width":"height"])){return g}else{return(f0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/* + * jQuery UI Accordion 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/* + * jQuery UI Dialog 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * ui.core.js + * ui.draggable.js + * ui.resizable.js + */ +(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||" ",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("
    ")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||" ");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("
    ").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e
    ");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("
    ")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('
    ').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(cthis._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/* + * jQuery UI Tabs 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"
    ",spinner:"Loading…",tabTemplate:'
  • #{label}
  • '}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
    '))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$(''+appendText+"");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
    '+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
    ":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
    =currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
    "+(isMultiMonth?""+((numMonths[0]>0&&col==numMonths[1]-1)?'
    ':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/* + * jQuery UI Progressbar 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('
    ').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/* + * jQuery UI Effects 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/* + * jQuery UI Effects Fold 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * effects.core.js + */ +(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/* + * jQuery UI Effects Highlight 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * effects.core.js + */ +(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* + * jQuery UI Effects Pulsate 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * effects.core.js + */ +(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);; \ No newline at end of file diff --git a/export/html/snakes/js/snakes-mod.js b/export/html/snakes/js/snakes-mod.js new file mode 100644 index 0000000..2d54238 --- /dev/null +++ b/export/html/snakes/js/snakes-mod.js @@ -0,0 +1,473 @@ +/*This code was originally based on code by +Husain Limdiyawala(MSc IT DA-IICT)*/ + + + +$(document).ready(function () { + + +}); + + +//Global Variables +var totblocks=0; +var data=""; +var currentblock=0; +var position=0; +var lastposition = new Array(); +var randomno=0; +var tots= new Array(); +var l=0; +var srcsnake=new Array(4); +var destsnake=new Array(4); + +var ladsrc = new Array(3); +var laddest = new Array(3); +var quest = new Array(); //available questions along with multiple answers +var COR_answered = new Array(); //record all questions (along with answers) the user responded CORRECTLY +var WRO_answered = new Array(); //record all questions (along with answers) the user responded WRONGLY + + + +//var door = new Array(1) + +var user = new Array(); + +//var pythons = new Array(1); + +//Constract table with questions and answers and pick question to display + +quest[0]="Spell 1"; +quest[1]="one"; +quest[2]="two"; +quest[3]="three"; +quest[4]="Spell 2"; +quest[5]="two"; +quest[6]="three"; +quest[7]="four"; +quest[8]="Spell 3"; +quest[9]="three"; +quest[10]="two"; +quest[11]="four"; +quest[12]="Spell 4"; +quest[13]="four"; +quest[14]="three"; +quest[15]="one"; +z=0; +for (z=0;quest[z]!=null;z++); +allQuest=z/4; + + +function selectQuest(all) +{ +pickOne = Math.floor((Math.random() * all)); +return pickOne; +} + + + + +//The Below Function will hide all the snakes + +function hideAll() +{ + document.getElementById("img1").style.display = "none"; + document.getElementById("img2").style.display = "none"; + document.getElementById("img3").style.display = "none"; + document.getElementById("img4").style.display = "none"; + + document.getElementById("lad1").style.display = "none"; + document.getElementById("lad2").style.display = "none"; + document.getElementById("lad3").style.display = "none"; +} + + +//The Below Function will Render The Main Board + +function paintBoard(a) +{ + totblocks = (a*a); + if((a*a) % 2 == 0) + { + currentblock = (a*a) - a + 1; + for(j=0;j<(a/2);j++) + { + + for(i=0;i" + currentblock + ""; + currentblock++; + } + currentblock -= (a+1); + + for(i=0;i" + currentblock + ""; + currentblock--; + } + currentblock -= (a-1); + } + } + else + { + + currentblock = (a*a); + for(j=0;j<(a/2);j++) + { + + + for(i=0;i" + currentblock + ""; + currentblock--; + } + + currentblock -= (a-1); + + if(currentblock < 2) + break; + + for(i=0;i" + currentblock + ""; + currentblock++; + } + currentblock -= (a+1); + } + } + document.getElementById("cont").style.width = (a*52+52) + "px" + + + document.getElementById("cont").innerHTML = data; + $("#cont").slideDown("slow"); + $("#cont").effect("shake",3000); + $("img:hidden").fadeIn(5000); + + if(a == 6) + { + + + registerSnake(158,196,"img1",14,3,0); + registerSnake(62,183,"img2",27,24,1); + registerSnake(175,18,"img3",18,4,2); + registerSnake(10,45,"img4",32,23,3); + + registerLadder(27,132,"lad1",28,34,0); + registerLadder(90,22,"lad2",19,30,1); + registerLadder(179,137,"lad3",2,16,2); + + //registerDoor("5",5,0); + //registerDoor("21",21,1) + + //registerPython("15",15,0) + } + + + else if(a == 8) + { + + + registerSnake(300,380,"img1",44,29,0); + registerSnake(180,550,"img2",51,46,1); + registerSnake(290,50,"img3",41,40,2); + registerSnake(500,280,"img4",27,22,3); + + registerLadder(350,515,"lad1",19,35,0); + registerLadder(180,230,"lad2",43,54,1); + registerLadder(80,350,"lad3",53,60,2); + + //registerDoor("14",14,0); + //registerDoor("26",26,1) + + //registerPython("32",32,0) + } + + +} + +//The below Function will simulate throwing of a dice + +function throwDice(i) +{ + + randomno = Math.floor((Math.random() * 6)) + 1; + document.getElementById("diceimg").src = "images/dice_" + randomno + ".PNG"; + document.getElementById("diceimg").style.display = "block"; + if(lastposition[i]>0) + { + document.getElementById(lastposition[i]).style.background = "url(images/square52.png)"; + + } + tots[i] += randomno; + + if(totblocks - tots[i] >= 0) + { + + lastposition[i] = tots[i]; + document.getElementById(tots[i]).style.background = "url(images/pawn1.png)"; + } + else + { + + tots[i] -= randomno; + document.getElementById(tots[i]).style.background = "url(images/pawn1.png)"; + } + +} + +//The below Function Checks The Snake Biting for a user + +function snakescheck(k) +{ + i=0; + + for(i=0;i<=srcsnake.length;i++) + { + + if(srcsnake[i] == tots[k]) + { + alert("Ωχ! Σε τσίμπησε φίδι στο τετράγωνο " + srcsnake[i] + " και θα πρέπει να γυρίσεις στο τετράγωνο " + destsnake[i] + ", εκτός κι αν απαντήσεις σωστά στην ερώτηση που ακολουθεί."); + document.getElementById(destsnake[i]).style.background = "url(images/pawn1.png)"; + document.getElementById(tots[k]).style.background = "url(images/square52.png)"; + lastposition[k] = destsnake[i]; + tots[k] = destsnake[i]; + break; + } + } + + if(!checkWin(k)) + alert("???d?se?!S???a??t???a!"); +} + +//The below function checks the ladders for a user + + function laddercheck(k) +{ + i=0; + + for(i=0;i<=ladsrc.length;i++) + { + + if(ladsrc[i] == tots[k]) + { + alert("Υπάρχει μια σκάλα στο τετράγωνο " + ladsrc[i] + " και θα σας οδηγήσει κατευθείαν στο τετράγωνο " + laddest[i] +"αν απαντήσεις σωστά στην ερώτηση που ακολουθεί."); + document.getElementById(laddest[i]).style.background = "url(images/pawn1.png)"; + document.getElementById(tots[k]).style.background = "url(images/square52.png)"; + lastposition[k] = laddest[i]; + tots[k] = laddest[i]; + break; + } + } + if(!checkWin(k)) + alert("You have won!"); +} + +//The below function checks the existence of doors + +/*function doorcheck(k) +{ + i=0; + + for(i=0;i<=door.length;i++) + { + + if(door[i] == tots[k]) + { + + + var randomdoor = Math.floor((Math.random() * totblocks)) + 1; + alert("Magic Door Entered!! You are redirected to " + randomdoor); + document.getElementById(randomdoor).style.background = "url(images/pawn.png) #000000"; + document.getElementById(tots[k]).style.background = "url(images/door.png) #000000"; + lastposition[k] = randomdoor; + tots[k] = randomdoor; + + } + } + if(!checkWin(k)) + alert("You Have Won!!"); +} */ + +//The below Function checks for pythons + +function pythoncheck(k) +{ + i=0; + + for(i=0;i
  • brisketai sto tetragwno " + tots[l] + "
  • "; +// + Question(); + document.getElementById("status").innerHTML = "
    • O Paiktis " + (l+1) + "
    • vrisketai sto tetragwno " + tots[l] + "
    "; + } + else + document.getElementById("status").innerHTML = "
    • Molis exases...
    "; + + if(l == lastposition.length-1) + l = 0; + else + l++; + + +} + +//The below function regulates the play + +function doit(i) +{ + + throwDice(i); + + if(checkWin(i)) + { + + //doorcheck(i); + snakescheck(i); + laddercheck(i); + //pythoncheck(i); + } + else + alert("ÏëïêëÞñùóåò ôçí ðßóôá, óõã÷áñçôÞñéá!!!"); +} + +//The below function checks whether the player has won or not + +function checkWin(i) +{ + if(tots[i] == totblocks) + return false; + else + return true; + +} + +//The below function will disable both the combobox + +function disableField() +{ + document.getElementById("players").disabled = "disabled"; + document.getElementById("boardtype").disabled = "disabled"; + +} + +function Question() +{ + picked=selectQuest(allQuest); + alert("Randomly selected number:" +picked); + Q1=prompt(quest[picked*4],"Απάντηση"); + if (Q1==quest[picked*4+1]) + { + alert("Σωστά!") + doit(l); + + COR_answered.concat(quest.splice(picked*4,4)); + } + else + { + alert("Η απάντηση δεν ήταν σωστή. Χάνεις τη σειρά σου για αυτό το γύρο!") + //document.getElementById("playbtn").disabled = "disabled"; + WRO_answered.concat(quest.splice(picked*4,4)); + } + //remove question and answers from available questions - (thus not allowing to have a Repeated question) ---XOXOXO + allQuest--; + } \ No newline at end of file diff --git a/export/html/snakes/js/subModal.js b/export/html/snakes/js/subModal.js new file mode 100644 index 0000000..28de858 --- /dev/null +++ b/export/html/snakes/js/subModal.js @@ -0,0 +1,295 @@ +var gPopupMask = null; +var gPopupContainer = null; +var gPopFrame = null; +var gReturnFunc; +var gPopupIsShown = false; +var gDefaultPage = "/loading.html"; +var gHideSelects = false; +var gReturnVal = null; + +var gTabIndexes = new Array(); +// Pre-defined list of tags we want to disable/enable tabbing into +var gTabbableTags = new Array("A","BUTTON","TEXTAREA","INPUT","IFRAME"); + +// If using Mozilla or Firefox, use Tab-key trap. +if (!document.all) { + document.onkeypress = keyDownHandler; +} + +/** + * Initializes popup code on load. + */ +function initPopUp() { + // Add the HTML to the body + theBody = document.getElementsByTagName('BODY')[0]; + popmask = document.createElement('div'); + popmask.id = 'popupMask'; + popcont = document.createElement('div'); + popcont.id = 'popupContainer'; + popcont.innerHTML = '' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '' + + '
    ' + + '
    ' + + '' + + '
    '; + theBody.appendChild(popmask); + theBody.appendChild(popcont); + + gPopupMask = document.getElementById("popupMask"); + gPopupContainer = document.getElementById("popupContainer"); + gPopFrame = document.getElementById("popupFrame"); + + // check to see if this is IE version 6 or lower. hide select boxes if so + // maybe they'll fix this in version 7? + var brsVersion = parseInt(window.navigator.appVersion.charAt(0), 10); + if (brsVersion <= 6 && window.navigator.userAgent.indexOf("MSIE") > -1) { + gHideSelects = true; + } + + // Add onclick handlers to 'a' elements of class submodal or submodal-width-height + var elms = document.getElementsByTagName('a'); + for (i = 0; i < elms.length; i++) { + if (elms[i].className.indexOf("submodal") == 0) { + // var onclick = 'function (){showPopWin(\''+elms[i].href+'\','+width+', '+height+', null);return false;};'; + // elms[i].onclick = eval(onclick); + elms[i].onclick = function(){ + // default width and height + var width = 400; + var height = 200; + // Parse out optional width and height from className + params = this.className.split('-'); + if (params.length == 3) { + width = parseInt(params[1]); + height = parseInt(params[2]); + } + showPopWin(this.href,width,height,null); return false; + } + } + } +} +addEvent(window, "load", initPopUp); + + /** + * @argument width - int in pixels + * @argument height - int in pixels + * @argument url - url to display + * @argument returnFunc - function to call when returning true from the window. + * @argument showCloseBox - show the close box - default true + */ +function showPopWin(url, width, height, returnFunc, showCloseBox) { + // show or hide the window close widget + if (showCloseBox == null || showCloseBox == true) { + document.getElementById("popCloseBox").style.display = "block"; + } else { + document.getElementById("popCloseBox").style.display = "none"; + } + gPopupIsShown = true; + disableTabIndexes(); + gPopupMask.style.display = "block"; + gPopupContainer.style.display = "block"; + // calculate where to place the window on screen + centerPopWin(width, height); + + var titleBarHeight = parseInt(document.getElementById("popupTitleBar").offsetHeight, 10); + + + gPopupContainer.style.width = width + "px"; + gPopupContainer.style.height = (height+titleBarHeight) + "px"; + + setMaskSize(); + + // need to set the width of the iframe to the title bar width because of the dropshadow + // some oddness was occuring and causing the frame to poke outside the border in IE6 + gPopFrame.style.width = parseInt(document.getElementById("popupTitleBar").offsetWidth, 10) + "px"; + gPopFrame.style.height = (height) + "px"; + + // set the url + gPopFrame.src = url; + + gReturnFunc = returnFunc; + // for IE + if (gHideSelects == true) { + hideSelectBoxes(); + } + + window.setTimeout("setPopTitle();", 600); +} + +// +var gi = 0; +function centerPopWin(width, height) { + if (gPopupIsShown == true) { + if (width == null || isNaN(width)) { + width = gPopupContainer.offsetWidth; + } + if (height == null) { + height = gPopupContainer.offsetHeight; + } + + //var theBody = document.documentElement; + var theBody = document.getElementsByTagName("BODY")[0]; + //theBody.style.overflow = "hidden"; + var scTop = parseInt(getScrollTop(),10); + var scLeft = parseInt(theBody.scrollLeft,10); + + setMaskSize(); + + //window.status = gPopupMask.style.top + " " + gPopupMask.style.left + " " + gi++; + + var titleBarHeight = parseInt(document.getElementById("popupTitleBar").offsetHeight, 10); + + var fullHeight = getViewportHeight(); + var fullWidth = getViewportWidth(); + + gPopupContainer.style.top = (scTop + ((fullHeight - (height+titleBarHeight)) / 2)) + "px"; + gPopupContainer.style.left = (scLeft + ((fullWidth - width) / 2)) + "px"; + //alert(fullWidth + " " + width + " " + gPopupContainer.style.left); + } +} +addEvent(window, "resize", centerPopWin); +addEvent(window, "scroll", centerPopWin); +window.onscroll = centerPopWin; + + +/** + * Sets the size of the popup mask. + * + */ +function setMaskSize() { + var theBody = document.getElementsByTagName("BODY")[0]; + + var fullHeight = getViewportHeight(); + var fullWidth = getViewportWidth(); + + // Determine what's bigger, scrollHeight or fullHeight / width + if (fullHeight > theBody.scrollHeight) { + popHeight = fullHeight; + } else { + popHeight = theBody.scrollHeight; + } + + if (fullWidth > theBody.scrollWidth) { + popWidth = fullWidth; + } else { + popWidth = theBody.scrollWidth; + } + + gPopupMask.style.height = popHeight + "px"; + gPopupMask.style.width = popWidth + "px"; +} + +/** + * @argument callReturnFunc - bool - determines if we call the return function specified + * @argument returnVal - anything - return value + */ +function hidePopWin(callReturnFunc) { + gPopupIsShown = false; + var theBody = document.getElementsByTagName("BODY")[0]; + theBody.style.overflow = ""; + restoreTabIndexes(); + if (gPopupMask == null) { + return; + } + gPopupMask.style.display = "none"; + gPopupContainer.style.display = "none"; + if (callReturnFunc == true && gReturnFunc != null) { + // Set the return code to run in a timeout. + // Was having issues using with an Ajax.Request(); + gReturnVal = window.frames["popupFrame"].returnVal; + window.setTimeout('gReturnFunc(gReturnVal);', 1); + } + gPopFrame.src = gDefaultPage; + // display all select boxes + if (gHideSelects == true) { + displaySelectBoxes(); + } +} + +/** + * Sets the popup title based on the title of the html document it contains. + * Uses a timeout to keep checking until the title is valid. + */ +function setPopTitle() { + return; + if (window.frames["popupFrame"].document.title == null) { + window.setTimeout("setPopTitle();", 10); + } else { + document.getElementById("popupTitle").innerHTML = window.frames["popupFrame"].document.title; + } +} + +// Tab key trap. iff popup is shown and key was [TAB], suppress it. +// @argument e - event - keyboard event that caused this function to be called. +function keyDownHandler(e) { + if (gPopupIsShown && e.keyCode == 9) return false; +} + +// For IE. Go through predefined tags and disable tabbing into them. +function disableTabIndexes() { + if (document.all) { + var i = 0; + for (var j = 0; j < gTabbableTags.length; j++) { + var tagElements = document.getElementsByTagName(gTabbableTags[j]); + for (var k = 0 ; k < tagElements.length; k++) { + gTabIndexes[i] = tagElements[k].tabIndex; + tagElements[k].tabIndex="-1"; + i++; + } + } + } +} + +function returnRefresh() +{ + //alert("I am active!"); + window.location.reload(); +} + +// For IE. Restore tab-indexes. +function restoreTabIndexes() { + if (document.all) { + var i = 0; + for (var j = 0; j < gTabbableTags.length; j++) { + var tagElements = document.getElementsByTagName(gTabbableTags[j]); + for (var k = 0 ; k < tagElements.length; k++) { + tagElements[k].tabIndex = gTabIndexes[i]; + tagElements[k].tabEnabled = true; + i++; + } + } + } +} + + +/** + * Hides all drop down form select boxes on the screen so they do not appear above the mask layer. + * IE has a problem with wanted select form tags to always be the topmost z-index or layer + * + * Thanks for the code Scott! + */ +function hideSelectBoxes() { + var x = document.getElementsByTagName("SELECT"); + + for (i=0;x && i < x.length; i++) { + x[i].style.visibility = "hidden"; + } +} + +/** + * Makes all drop down form select boxes on the screen visible so they do not + * reappear after the dialog is closed. + * + * IE has a problem with wanting select form tags to always be the + * topmost z-index or layer. + */ +function displaySelectBoxes() { + var x = document.getElementsByTagName("SELECT"); + + for (i=0;x && i < x.length; i++){ + x[i].style.visibility = "visible"; + } +} \ No newline at end of file diff --git a/export/html/snakes/maskBG.png b/export/html/snakes/maskBG.png new file mode 100644 index 0000000000000000000000000000000000000000..b89babc2f12a93b80cd1e3e1166d741a477a4229 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4v7|ftIx;YR|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Dax?djqeQgJIOB_Y8hS%JyGP=M1- fG{{}ip@ETMa}q<9(n~jWpfUzeS3j3^P6 + + + + + + + + + +

    !

    .

    % , .

    ;

    + + + diff --git a/export/javame/hangman/simple/KeyCanvas.class b/export/javame/hangman/simple/KeyCanvas.class new file mode 100755 index 0000000000000000000000000000000000000000..7f1cc9cc6ce1bffdcd1db5f720e9e7e05673ca6f GIT binary patch literal 11726 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 -1 && readChar != '\n') { + + // Append the read character to the string. Some operating systems + // such as Microsoft Windows prepend newline character ('\n') with + // carriage return ('\r'). This is part of the newline character and + // therefore an exception that should not be appended to the string. + if (readChar != '\r') { + string.append( (char )readChar); + } + + // Read the next character + readChar = reader.read(); + } + return string.toString(); + } + + private void LoadLocales() throws IOException{ + m_hashLocales = new Hashtable(); + + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( "hangman/language.txt"); + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + String line = null; + String key, data; + + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + int pos = line.indexOf( "="); + if( pos >= 0){ + key = line.substring( 0, pos); + data = line.substring( pos+1); + m_hashLocales.put(key, data); + } + } + reader.close(); + } + + protected boolean SetCurrentWord( String line) throws IOException{ + + int pos=line.indexOf( '='); + if( pos == -1){ + return false; + } + m_answer = line.substring( 0, pos); + m_question = line.substring( pos+1); + + return true; + } + + protected int SelectWord( String fname) throws IOException{ + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( fname); + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + String line = null; + int count=0; + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + // Append the read line to the main form with a linefeed ('\n') + count = count + 1; + } + reader.close(); + + //select randomly one word + Random r = new Random(); + int curline = r.nextInt(); + curline = curline % count; + if( curline < 0) + curline = curline + count; + + InputStreamReader reader2 = new InputStreamReader( + getClass().getResourceAsStream(fname), "UTF-8"); + int i = 0; + + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader2)) != null) { + if( i == curline){ + line = decrypt( line); + SetCurrentWord( line); + return 1; + } + i = i + 1; + } + reader.close(); + + return 0; + } + + + public void paint(Graphics g) { + switch( m_state){ + case 0: + try { + paint_state_start(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + case 1: + try { + paint_state_play( g); + } catch (StringIndexOutOfBoundsException ex) { + ex.printStackTrace(); + } + break; + case 2: + try { + paint_state_nextword(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + case 3: + paint_state_lose( g); + break; + case 4: + try { + paint_state_win(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + } + } + +private void paint_state_start(Graphics g) throws IOException{ + + m_init_letters = getlocale( "keyboardletters"); + m_init_allletters = m_init_letters; + + String sRemove = "1234567890:#"; + for(int i=0; i < sRemove.length(); i++){ + for(;;){ + int pos = m_init_allletters.indexOf( sRemove.charAt(i)); + if( pos < 0) + break; + m_init_allletters = m_init_allletters.substring( 0, pos) + m_init_allletters.substring( pos+1); + } + } + + m_state = 2; + paint_state_nextword( g); +} + +private void paint_state_nextword(Graphics g) throws IOException{ + m_letters = m_init_letters; + m_allletters = m_init_allletters; + + SelectWord( m_filewords); + + m_lastletter = ""; + int len = m_answer.length(); + m_guess = ""; + m_wrong = ""; + for(int i=0; i < len; i++){ + m_guess = m_guess + "-"; + } + m_wrongletters = 0; + + m_state = 1; //play + paint_state_play( g); +} + +private void paint_state_win(Graphics g) throws IOException{ + m_count_games++; + m_count_wins++; + + m_state = 2; + paint_state_nextword( g); +} + +private void paint_state_lose(Graphics g){ + m_count_games++; + + //clear the screen + g.setColor(255,255,255); + g.fillRect(0, 0, getWidth(), getHeight()); + //set color to black + g.setColor(0,0,0); + //get the font height + + int y=10; + + int iHeight=g.getFont().getHeight(); + + String s = m_answer; + + if( m_wrong.length() > 0){ + s = s + " (" + m_wrong + ")"; + } + + s = s + " [" + String.valueOf( m_count_wins) + "/" + String.valueOf( m_count_games) + "]"; + + y = drawtextmultiline( g, s, 0, y); + + y = drawtextmultiline( g, m_question, 0, y+iHeight); + + m_state = 2; +} + +private void paint_state_play(Graphics g){ + + //clear the screen + g.setColor(255,255,255); + g.fillRect(0, 0, getWidth(), getHeight()); + //set color to black + g.setColor(0,0,0); + //get the font height + + int y=0; + Font font = g.getFont(); + + int iHeight=g.getFont().getHeight(); + + String s = m_guess; + if( m_wrong.compareTo( "") != 0){ + s = s + " (" + m_wrong + ")"; + } + + s = s + " (" + String.valueOf( m_count_wins) + "/" + String.valueOf( m_count_games) + ")"; + + y = drawtextmultiline( g, s, 0, y); + + int x = getWidth() - 3 * font.charWidth( '-'); + y = drawtextmultiline( g, mMessage, x, y) + iHeight; + + y = drawtextmultiline( g, m_question, 0, y) + iHeight; + + Image im = null; + try { + String filename = "/hangman/hangman_" + String.valueOf(m_wrongletters) + ".jpg"; + im = Image.createImage( filename); + } catch (IOException ex) { + ex.printStackTrace(); + } + + int xMul = (100 * getWidth()) / im.getWidth(); + int yMul = (100 * (getHeight() - y)) / im.getHeight(); + + if( yMul < xMul){ + xMul = yMul; + } + int cx = (xMul * im.getWidth()) / 100; + int cy = (yMul * im.getHeight()) / 100; + Image resize = resizeImage( im, cx, cy); + + g.drawImage(resize, 0, y, Graphics.LEFT | Graphics.TOP); + } + + protected int drawtextmultiline(Graphics g, String text, int x, int y){ + Font font = g.getFont(); + int fontHeight = font.getHeight(); + //change string to char data + char[] data = new char[text.length()]; + text.getChars(0, text.length(), data, 0); + int width = getWidth(); + int lineWidth = 0; + int charWidth = 0; + int xStart = x; + char ch; + for(int ccnt=0; ccnt < data.length; ccnt++) + { + ch = data[ccnt]; + //measure the char to draw + charWidth = font.charWidth(ch); + lineWidth = lineWidth + charWidth; + //see if a new line is needed + if (lineWidth > width) + { + y = y + fontHeight; + lineWidth = 0; + x = xStart; + } + //draw the char + g.drawChar(ch, x, y, + Graphics.TOP|Graphics.LEFT); + x = x + charWidth; + } + + return y; + } + + protected void keyPressed(int keyCode) { + char number; + + if( m_state == 2){ + repaint(); + return; + } + + if( (keyCode >= 49) && (keyCode <= 57)){ + String numbers = "123456789"; + number = numbers.charAt(keyCode - 49); + + int pos = m_letters.indexOf( number + ":"); + String letters = ""; + + String letters2 = m_letters.substring( pos+2); + + if( pos >= 0){ + pos = letters2.indexOf( '#'); + if( pos >= 0){ + letters = letters2.substring( 0, pos); + //Compute the letters that correspond to the key pressed + + if( m_lastletter.compareTo( "") != 0){ + pos = letters.indexOf( m_lastletter); + + if( pos >= 0){ + pos = pos + 1; + if( pos >= letters.length()){ + pos = 0; + } + }else{ + //different key + pos = 0; + } + }else{ + pos = 0; + } + if( (pos < letters.length()) && (pos >= 0)){ + m_lastletter = letters.substring( pos, pos+1); + mMessage = m_lastletter; + repaint(); + } + return; + } + } + + repaint(); + return; + } + + int gameAction = getGameAction(keyCode); + switch (gameAction) { + case FIRE: + OnFire(); + break; + + default: + mMessage = String.valueOf( keyCode); + break; + } + } + + protected void OnFire() { + int pos = m_guess.indexOf( m_lastletter); + if( pos >= 0){ + //Already used + return; + } + + char ch = m_lastletter.charAt( 0); + pos = m_answer.indexOf( ch); + if( pos >= 0){ + //correct letter + //Maybe there are many letters + for(pos=0; pos < m_guess.length();pos++){ + if( m_answer.charAt( pos) == ch){ + m_guess = m_guess.substring( 0, pos) + m_lastletter + m_guess.substring( pos+1); + } + } + + pos = m_allletters.indexOf( m_lastletter); + if( pos >= 0){ + m_allletters = m_allletters.substring( 0, pos) + "." + m_allletters.substring( pos+1); + } + + remove_lastletter_from_keyboard(); + + if( m_guess.indexOf( '-') < 0){ + m_state = 4; //state=win; + } + + repaint(); + return; + } + + pos = m_allletters.indexOf( m_lastletter); + if( pos < 0){ + return; + } + + //wrong letter + m_wrongletters = m_wrongletters + 1; + + pos = m_allletters.indexOf( m_lastletter); + if( pos >= 0){ + m_allletters = m_allletters.substring( 0, pos) + "." + m_allletters.substring( pos+1); + m_wrong = m_wrong + m_lastletter; + } + + remove_lastletter_from_keyboard(); + + if( m_wrongletters >= 6){ + m_state = 3; //state=lose + } + repaint(); + } + + private void remove_lastletter_from_keyboard(){ + int pos = m_letters.indexOf( m_lastletter); + + if( pos >= 0){ + m_letters = m_letters.substring( 0, pos) + m_letters.substring( pos+1); + } + } + + private Image resizeImage(Image src, int cx, int cy) { + int srcWidth = src.getWidth(); + int srcHeight = src.getHeight(); + Image tmp = Image.createImage(cx, srcHeight); + Graphics g = tmp.getGraphics(); + int ratio = (srcWidth << 16) / cx; + int pos = ratio/2; + + //Horizontal Resize + + for (int x = 0; x < cx; x++) { + g.setClip(x, 0, 1, srcHeight); + g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT | Graphics.TOP); + pos += ratio; + } + + Image resizedImage = Image.createImage(cx, cy); + g = resizedImage.getGraphics(); + ratio = (srcHeight << 16) / cy; + pos = ratio/2; + + //Vertical resize + + for (int y = 0; y < cy; y++) { + g.setClip(0, y, cx, 1); + g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT | Graphics.TOP); + pos += ratio; + } + return resizedImage; + + }//resize image +} \ No newline at end of file diff --git a/export/javame/hangman/simple/hangman-1.class b/export/javame/hangman/simple/hangman-1.class new file mode 100755 index 0000000000000000000000000000000000000000..4526be0ef1f47af1acc7bc1616a118eb0edad8bf GIT binary patch literal 718 zcmah{T~8B16g|@xwp|ucKo9|`wVGNIR}$VzOiYQ1y3q#+@6+AU4%yC{-6^p@%fyew z2Y-M+ig0FG)R)FhX6~K4=bkzD-uZp`^A~^+k9{m)yM+dJeC*Gz0o4Gh@ff>X?8dZM1zM5cK{ao}LLbhFPKnRw8ZGyXj=4@>4lV8Ci|8 zSf*z(*X~>e8}1qbkmj{9Dj%k@C=?@0H>BMIUc4M<6G}*4##U!W;B7BDmlyJLIMH#Q zsYJVQn8wLehr?^=U_Rnl7oSo&b20`_vS2x#`S2S;0x9gteBi&l0{%%h&13aSyW)eY ziO-zu06sbaJTyH#3eZJ|t*rpv1A*HP6sBx@_OEJJSMhNY zCbRm(>{t~x&t@t?oAX{^#}~O)oeJ6(-vdzN^0DNmLGO^~GSdG6(ck}u+Lscu%-!Vz zTe!tND19F*WOI{T!+OQ=hPKXFv;P&f@2LOH_ex>Ll15ehsWT?$L z4QAqf9SQVQ_octrkp8kjE{bIse`q!ZEOjU_TKy^yWLXF0wJ#qJJ=KhLVDdywU^>}5 zEH|_l2CAmbR=MugTDrWVqh?(mnOcUlDO-_BNS&IB;xIT$7Ma415#87Fy})ndWu4qR z0?tOz3O%)|jd(ZJw_vom=tDn6e^N&k=^scM81A6aWk*d~3Y}UM0GZZ&Uxk&rj3N~o zrl&R*T|C2c8!uce;iZdLcr9S3IDxz&zhbhXYjqWu*Vk4!vE9v3`|(CBy>FYL^o-)d zMNf^xsSX_18pT73R9p!fJc(LWN3o(*f%(GCZN8GcY-)AVd#M(iyQkvxgalSQ@?Ube zT)bIA%EME3jQUm>DxWPWc4WPzBe@(#aW3iHx@=+`z5E8uli^|UoH-689|vy*=kD24 zh-1E38045uf`holcekB@Aq;aRFmeI@L9#B!W<>Q2*7hm7s^5`YpF2T!=?vLza@r@z z&HhAB=>*O(!4@1=H!xFX0y&ODjE*pVhdZMrzs<-!JjNKNkxwM#ncq*;DEBN=Fco9r z2~l^+`-ag6-0Op7qqiHvW;%(vuoH+N<+ -1 && readChar != '\n') { + + // Append the read character to the string. Some operating systems + // such as Microsoft Windows prepend newline character ('\n') with + // carriage return ('\r'). This is part of the newline character and + // therefore an exception that should not be appended to the string. + if (readChar != '\r') { + string.append( (char )readChar); + } + + // Read the next character + readChar = reader.read(); + } + return string.toString(); + } + + private void LoadLocales() throws IOException{ + m_hashLocales = new Hashtable(); + + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( "hangman/language.txt"); + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + String line = null; + String key, data; + + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + int pos = line.indexOf( "="); + if( pos >= 0){ + key = line.substring( 0, pos); + data = line.substring( pos+1); + m_hashLocales.put(key, data); + } + } + reader.close(); + } + + protected boolean SetCurrentWord( String line) throws IOException{ + + int pos=line.indexOf( '='); + if( pos == -1){ + return false; + } + m_answer = line.substring( 0, pos); + m_question = line.substring( pos+1); + + return true; + } + + protected int SelectWord( String fname) throws IOException{ + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( fname); + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + String line = null; + int count=0; + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + // Append the read line to the main form with a linefeed ('\n') + count = count + 1; + } + reader.close(); + + //select randomly one word + Random r = new Random(); + int curline = r.nextInt(); + curline = curline % count; + if( curline < 0) + curline = curline + count; + + InputStreamReader reader2 = new InputStreamReader( + getClass().getResourceAsStream(fname), "UTF-8"); + int i = 0; + + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader2)) != null) { + if( i == curline){ + line = decrypt( line); + SetCurrentWord( line); + return 1; + } + i = i + 1; + } + reader.close(); + + return 0; + } + + + public void paint(Graphics g) { + switch( m_state){ + case 0: + try { + paint_state_start(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + case 1: + try { + paint_state_play( g); + } catch (StringIndexOutOfBoundsException ex) { + ex.printStackTrace(); + } + break; + case 2: + try { + paint_state_nextword(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + case 3: + paint_state_lose( g); + break; + case 4: + try { + paint_state_win(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + } + } + +private void paint_state_start(Graphics g) throws IOException{ + + m_init_letters = getlocale( "keyboardletters"); + m_init_allletters = m_init_letters; + + String sRemove = "1234567890:#"; + for(int i=0; i < sRemove.length(); i++){ + for(;;){ + int pos = m_init_allletters.indexOf( sRemove.charAt(i)); + if( pos < 0) + break; + m_init_allletters = m_init_allletters.substring( 0, pos) + m_init_allletters.substring( pos+1); + } + } + + m_state = 2; + paint_state_nextword( g); +} + +private void paint_state_nextword(Graphics g) throws IOException{ + m_letters = m_init_letters; + m_allletters = m_init_allletters; + + SelectWord( m_filewords); + + m_lastletter = ""; + int len = m_answer.length(); + m_guess = ""; + m_wrong = ""; + for(int i=0; i < len; i++){ + m_guess = m_guess + "-"; + } + m_wrongletters = 0; + + m_state = 1; //play + paint_state_play( g); +} + +private void paint_state_win(Graphics g) throws IOException{ + m_count_games++; + m_count_wins++; + + m_state = 2; + paint_state_nextword( g); +} + +private void paint_state_lose(Graphics g){ + m_count_games++; + + //clear the screen + g.setColor(255,255,255); + g.fillRect(0, 0, getWidth(), getHeight()); + //set color to black + g.setColor(0,0,0); + //get the font height + + int y=10; + + int iHeight=g.getFont().getHeight(); + + String s = m_answer; + + if( m_wrong.length() > 0){ + s = s + " (" + m_wrong + ")"; + } + + s = s + " [" + String.valueOf( m_count_wins) + "/" + String.valueOf( m_count_games) + "]"; + + y = drawtextmultiline( g, s, 0, y); + + y = drawtextmultiline( g, m_question, 0, y+iHeight); + + m_state = 2; +} + +private void paint_state_play(Graphics g){ + + //clear the screen + g.setColor(255,255,255); + g.fillRect(0, 0, getWidth(), getHeight()); + //set color to black + g.setColor(0,0,0); + //get the font height + + int y=0; + Font font = g.getFont(); + + int iHeight=g.getFont().getHeight(); + + String s = m_guess; + if( m_wrong.compareTo( "") != 0){ + s = s + " (" + m_wrong + ")"; + } + + s = s + " (" + String.valueOf( m_count_wins) + "/" + String.valueOf( m_count_games) + ")"; + + y = drawtextmultiline( g, s, 0, y); + + int x = getWidth() - 3 * font.charWidth( '-'); + y = drawtextmultiline( g, mMessage, x, y) + iHeight; + + y = drawtextmultiline( g, m_question, 0, y) + iHeight; + + Image im = null; + try { + String filename = "/hangman/hangman_" + String.valueOf(m_wrongletters) + ".jpg"; + im = Image.createImage( filename); + } catch (IOException ex) { + ex.printStackTrace(); + } + + int xMul = (100 * getWidth()) / im.getWidth(); + int yMul = (100 * (getHeight() - y)) / im.getHeight(); + + if( yMul < xMul){ + xMul = yMul; + } + int cx = (xMul * im.getWidth()) / 100; + int cy = (yMul * im.getHeight()) / 100; + Image resize = resizeImage( im, cx, cy); + + g.drawImage(resize, 0, y, Graphics.LEFT | Graphics.TOP); + } + + protected int drawtextmultiline(Graphics g, String text, int x, int y){ + Font font = g.getFont(); + int fontHeight = font.getHeight(); + //change string to char data + char[] data = new char[text.length()]; + text.getChars(0, text.length(), data, 0); + int width = getWidth(); + int lineWidth = 0; + int charWidth = 0; + int xStart = x; + char ch; + for(int ccnt=0; ccnt < data.length; ccnt++) + { + ch = data[ccnt]; + //measure the char to draw + charWidth = font.charWidth(ch); + lineWidth = lineWidth + charWidth; + //see if a new line is needed + if (lineWidth > width) + { + y = y + fontHeight; + lineWidth = 0; + x = xStart; + } + //draw the char + g.drawChar(ch, x, y, + Graphics.TOP|Graphics.LEFT); + x = x + charWidth; + } + + return y; + } + + protected void keyPressed(int keyCode) { + char number; + + if( m_state == 2){ + repaint(); + return; + } + + if( (keyCode >= 49) && (keyCode <= 57)){ + String numbers = "123456789"; + number = numbers.charAt(keyCode - 49); + + int pos = m_letters.indexOf( number + ":"); + String letters = ""; + + String letters2 = m_letters.substring( pos+2); + + if( pos >= 0){ + pos = letters2.indexOf( '#'); + if( pos >= 0){ + letters = letters2.substring( 0, pos); + //Compute the letters that correspond to the key pressed + + if( m_lastletter.compareTo( "") != 0){ + pos = letters.indexOf( m_lastletter); + + if( pos >= 0){ + pos = pos + 1; + if( pos >= letters.length()){ + pos = 0; + } + }else{ + //different key + pos = 0; + } + }else{ + pos = 0; + } + if( (pos < letters.length()) && (pos >= 0)){ + m_lastletter = letters.substring( pos, pos+1); + mMessage = m_lastletter; + repaint(); + } + return; + } + } + + repaint(); + return; + } + + int gameAction = getGameAction(keyCode); + switch (gameAction) { + case FIRE: + OnFire(); + break; + + default: + mMessage = String.valueOf( keyCode); + break; + } + } + + protected void OnFire() { + int pos = m_guess.indexOf( m_lastletter); + if( pos >= 0){ + //Already used + return; + } + + char ch = m_lastletter.charAt( 0); + pos = m_answer.indexOf( ch); + if( pos >= 0){ + //correct letter + //Maybe there are many letters + for(pos=0; pos < m_guess.length();pos++){ + if( m_answer.charAt( pos) == ch){ + m_guess = m_guess.substring( 0, pos) + m_lastletter + m_guess.substring( pos+1); + } + } + + pos = m_allletters.indexOf( m_lastletter); + if( pos >= 0){ + m_allletters = m_allletters.substring( 0, pos) + "." + m_allletters.substring( pos+1); + } + + remove_lastletter_from_keyboard(); + + if( m_guess.indexOf( '-') < 0){ + m_state = 4; //state=win; + } + + repaint(); + return; + } + + pos = m_allletters.indexOf( m_lastletter); + if( pos < 0){ + return; + } + + //wrong letter + m_wrongletters = m_wrongletters + 1; + + pos = m_allletters.indexOf( m_lastletter); + if( pos >= 0){ + m_allletters = m_allletters.substring( 0, pos) + "." + m_allletters.substring( pos+1); + m_wrong = m_wrong + m_lastletter; + } + + remove_lastletter_from_keyboard(); + + if( m_wrongletters >= 6){ + m_state = 3; //state=lose + } + repaint(); + } + + private void remove_lastletter_from_keyboard(){ + int pos = m_letters.indexOf( m_lastletter); + + if( pos >= 0){ + m_letters = m_letters.substring( 0, pos) + m_letters.substring( pos+1); + } + } + + private Image resizeImage(Image src, int cx, int cy) { + int srcWidth = src.getWidth(); + int srcHeight = src.getHeight(); + Image tmp = Image.createImage(cx, srcHeight); + Graphics g = tmp.getGraphics(); + int ratio = (srcWidth << 16) / cx; + int pos = ratio/2; + + //Horizontal Resize + + for (int x = 0; x < cx; x++) { + g.setClip(x, 0, 1, srcHeight); + g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT | Graphics.TOP); + pos += ratio; + } + + Image resizedImage = Image.createImage(cx, cy); + g = resizedImage.getGraphics(); + ratio = (srcHeight << 16) / cy; + pos = ratio/2; + + //Vertical resize + + for (int y = 0; y < cy; y++) { + g.setClip(0, y, cx, 1); + g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT | Graphics.TOP); + pos += ratio; + } + return resizedImage; + + }//resize image +} diff --git a/export/javame/hangman/simple/lang/el_utf8/language.txt b/export/javame/hangman/simple/lang/el_utf8/language.txt new file mode 100644 index 0000000..dc2fc15 --- /dev/null +++ b/export/javame/hangman/simple/lang/el_utf8/language.txt @@ -0,0 +1,3 @@ +encoding=el_utf8 +exit=Έξοδος +keyboardletters=2:ΑΒΓ#3:ΔΕΖ#4:ΗΘΙ#5:ΚΛΜ#6:ΝΞΟ#7:ΠΡΣ#8:ΤΥΦ#9:ΧΨΩ# diff --git a/export/javame/hangman/simple/lang/en_utf8/language.txt b/export/javame/hangman/simple/lang/en_utf8/language.txt new file mode 100644 index 0000000..b91ae1c --- /dev/null +++ b/export/javame/hangman/simple/lang/en_utf8/language.txt @@ -0,0 +1,4 @@ +encoding=en_utf8 +exit=Exit +keyboardletters=2:ABC#3:DEF#4:GHI#5:JKL#6:MNO#7:PQRS#8:TUV#9:WXYZ# + diff --git a/export/javame/hangman/simple/lang/es_utf8/language.txt b/export/javame/hangman/simple/lang/es_utf8/language.txt new file mode 100644 index 0000000..64ad1d1 --- /dev/null +++ b/export/javame/hangman/simple/lang/es_utf8/language.txt @@ -0,0 +1,4 @@ +encoding=es_utf8 +exit=Salir +keyboardletters=2:ABC2ÁªÀÇ#3:DEF3ÉÈ#4:GHI4ÍÌ#5:JKL5#6:MNÑO6ÓÒº#7:PQRS7#8:TUV8ÚÜÙ#9:WXYZ9# + diff --git a/export/javame/hangmanp/simple/hangmanp-1.class b/export/javame/hangmanp/simple/hangmanp-1.class new file mode 100644 index 0000000000000000000000000000000000000000..15484b5eb6179a3c4467f2ea86f3ec6d21780a39 GIT binary patch literal 724 zcmah{U279T6g`uq-DKTZZEO9uX^aw6=(gZnM359gUG$;S_sQq~H8=FVKsJ@?#u=l7pqmjFV%@Ueu)4bu<4=YVM}1yj z74V~xG~dS3ob&}62UBB5%IcViH`-|XR-oCvfxJ2ts134239LlgsLzw}P~~6cFr{ZT z%3_%w%3Qnm%vp1Z1RxN6Fh=ErR2GGzC-}?S*<c^6xq8G%pT=vaQ2Kf`_% z=Y8C9x&!!V2k=n$@H{{VZNle>&Yr*>hYC~nKKwE~RVDLC$p@1hQCM^^(ZJ~my zg&EY?%$k@pF)vVjuS1=E5a_B@w*(5yk*@^$Tpg;q9SID%U*(~6bmXjk`E=x|IMY!`e!>@+%Fm9R zy7rPt`I?WM!1Ej0S zH4;y)YF1xv3!G;$Hp=KFj{|k=$?#C7q;;@^N}Gzxer@pNf&c{UwJ=o4av;-GrOfrr z#Db0IcwyqDjYYh&@fvSPbsH!!#`ISbt!qC}nX|sOLIc%2PIQ=UWYRm>Or*!EEB^}1 zX-;+^xmGP|RjRV(s80RxU7co%#0tz+Zm#te=OvESN${muRF^%Kwb~@G+L8ZKic8g- zCA4^`)fTI7B#8>CCe@CtmvrPegcX7@8Z>s#oI#w> z#K3K`#eB1bewy1&2Ml14Rswe}z~70ii}t34dk$m!3|;Owl-6fY(Oo-7aho{JQBB0e~{#VCHbQl$vcw#$)rDf z=r5A}tCx!DZ<71FmxA=JN&n}i@$?%>{vkEzBzGPO69!@SQUz-!>s~h4flO!tPnE%^NitoM879y4(o&u!h1n*Tduh2{m?JfpN>btBxiVBpl1dL($+KFL zc^K)4trpt3A9% z7OsM(fDC%QY9!%$sq$#^CcPxmre$VYlJ zcA3fB)fP*ndpc8@6qCEFtv!*%D4wpiNO$kScv{sZy4%r+j*(5AL)waW(+-6*2D zGt%4Hl!``@(j2hY+m}fsYc`-E6WN!H+e^MSez-SrJ>Ki;YD1n$+lA@4SI8VzG3ga^ zcQ6_CsTf4YH6^;^Tl%{8#nanm1W}~CVn-yMkg`*0WI7WvrzVUSjdUM~^!DIg-nECK z@t#Z~B@;Ab@o4&RPljnu#f7$*dtnu3(vw0*-jBZo{*c$xaSWg*@S&QnL^Pd>#}a~pnq)NAm#A5vj`VaUqP@!nWm^2u z5IZ#I5Q8^VUZ9A^?pXX#b6=*peGRrkthZ2_vCn3y9v6Qt0HJ2trZ%6XY0TK{ZHafK z4q)LE3tPM6hcXA1QpXimW6Lr53Tu+7Ui4*bCNr@ip6KYrm_r15k`Xj|#EsYrHri97 zs%fK7c^w3x28N2XL>JTa(M21(;N&1{9NOHM#N)7fXi@1J#d`s1d&`fHr6UJ3SXEbF z60SkPw$8@O#npC!EtWSn&IMkyXeXvvk9S6+vK~VQ2i9bDSw(2O(C#{zh-DyKBrk1s z@=-wF$-572vrXZ}UfzoN_Qru_qoPr8VsI!~gRMIWTwn8>0Yy3V5a(-Dhq zlH_Jdj!N+P^9I<#GMq!0-8oP4)y6UAe$&^LM=>%Z7(&8R^9O%mpS7Y&YoVF+f1#vI*z!_P| z1U2r^;8-{tp$UE1QZgGEq0iz2d=R7aA&dG%*#{&!NY_Ct`IptsuThLax@Fg0;59Ay zhc=5oEUNuHeZivV>6z?YWQ}?6XYuu7vlpd(?r`;u>IE%2L(f?BFOqywx(Z+vuAQx7 z(G4=~8)e$o`~?daEeNNQw;)hvbdKV!16-ei1L>2&ri2 zhVSnX9|(#C*XfS*^u%S$RgLhP3+Y0R1-Qj)t`=Vl=LpYQQc-^qX-_6)vj~K?iVNis zG;|QDVXUlq-+mCO<%Qx-RTkEYNZWPrY#2dNE1-GEJF_bTtUy4U7j z!20N#80rKt?T{lotl`2yr2ej}wgUS(SXvbu{SZIzjgmc`uh2w)DvMvJwZX#6D$Nz7ABy|ASCJuPJ-tIw1B=~Ubmz4 zPvl0KXj|wMamcR?kRH+p$dJS(iCYrWt_wX&rm^>n-U0F;>(TXQ^eV!iH*|)IcZU4d zDH`K5^;0xwJoT=VvZ-2pdROU}^vou|lOHAoXG1MWeZI7op(nzZ?-i~G;N ztmMtTVWa>2K-EdSM<-d;0?bX;reiiyXi7IWs5YwgPO{~4E3)X*YDJpxW3&kj|BUs!@!T02q)VDA{Uw7`y7>&1?X2=o zJw?;DaGepVK1I`a)){AMLD2Be7^InE()(#Pu&1o&p9S*;4L#r*q}j;AfCE(CPkQwr z%@Hu#W(&bs1Xa7J8H(FVlL56$XgihDl{61pSV*lX?V_t_x0?PcOl%$uD&}&@6rF{* zAax(z4|Q0ynI51Av6RWQhCV|N;Z2tS01soChBDG*NNu;Z$)?GzCY9NyD#SCWw4;rm z<0&Xu2EAUovQ&G7Tzt}5<(5+IQJPxn^FBmVN_}G?- zJrnCL$KkG)ZpKEv1zY)6+JGb8Hk|O<;79ji+UPOCvel~i< zMRhpZ^#NrzdL{#dHhN~#S_eJlz)>DO4Zu_RNa$%JkLY^{q{I%+#vM{$;5rRC1UXRq z1(dDJ+$()62dNrhdzf7M6QN4I6uKLrd7;WurMm&Df%0m6@R7EZrJ_Y`KTXMt)aLrt z7*AkSd&kX#MhWiQ#2n-lHWqtn3Y^|7xVCCIwFPiz%i#>xK_gqSk3^T#?OElp*rN1- zNKBj5PSn)CnhUA1S?4D!UtU<)T3E_~S2wW8Q1UvzE zk31eAujKcJJr@jGq=&tsU{Q9&*#SsCOcO&v*C|?D=fZQ4!mY*=0WaRa0(7?5YvgLz0vo;`4N2&(yv1PN9geb*!YLEm|la-f1vMwqW4e0iQa&#dlRF) zg>in4k$y^7(9aNne}S<3E4qe$jgfzgv44-z-^Ln$hfwuLg)|Ar^D(1mfh-LpNp29i zD{^&-Tn?JbA+noJ0j;cXa}1%df;8nj!oCmWIhmC z)UBy1QxvsY$n686{JHwhb`uHSjgyvdS7DMvzxbfy1ChvV*1#D=&7!pK2F@$nc7eVLkFYNR!(+ zN6V!^s_c{_j&2*|xn_XY7AUYB%JQ$XH8x1=TUDIf0J$1iV5KTGs&pf)QhI`B74&VC zzMHbzZd9s%Lk>?(A;ZykU0&acaBvaf(=_?mqDmf1^LZRCV;^0{<7qAXsfj00JDy1n zK-ZJ$08gR!aZu@82-|v41M!HW=_5H!A8|CjjOx`{!PfLtXkmR;PwHfl98xOO8SXJ{ zoxvaL$iXI|ozIfX*eeG^j>Oi@Yg&@TT#+c>GQ5c9KT|aT2_hC zaB_H-Ho|nDp>k)JNaUR0--g6)n&97Vo2~&!?5Vkk<1eO7IeTke5+E zFQ)-sNvC;LZihh?In|wUR9AzV7hro0QSvBawqRi;E}Z4uXdgf1$e+k=7={~?Q=%rf z+_s+e2cTsf(fMQVtzBIycZ;Lpuqd|?>;x+IYlC$4y?G^ruZ*l@S60b|5~C~fS0i@U3R;O@IRV_;#Tb3Nb|0|bn{IU6`dt~2w#QEhFCEgd`--;d_t<9{_LxfY*{7T}}N5>DZV9zEQOPt$wwqkw(*u#m#% znIn9VZ^IXsd+_Z1*s5^G zBZxCEBUj9~fscLzJuH?xlm{_JyM6tEU$L0@ZH&D|&N=6+Tpi+_1aUkRJfCo zkzk)unpDRnqqP!@;I)}Xb^M>3$=vZ!VSLYsxzx} z$puZg!F__rutyKexuPswtcS-0#stk5PEZ4IHfB-S3c3Oo_K=`3;N5G3^ilE!3^|_| z=olzoRT;3#0)_xFS_Yw2N5_CWoDLKm?pko_Cw@P<`34~ICJOM)G=p!UOZip`@lmSg z4^S3d$Q|MP6pHS~GS}cX@Z0q7 zI5aKuJ8%fDwvRHc%wp*0oxu{C=wT!20InR1aQjfr|$!$ zmx6J=f;tbbKduClfEe(Y7BE*J2F$P-{8bPmIN6PH7t&bUOu|%bQ}I=de=raMMWeJT zLmnBeRrNK%m|wHatjQ@3*99!@)o?wG`_@5sYW>lCb$wp z4UVsZ7Yz8@ZPzAOWQJc;-nk)Qxa=#CfN?+F9CZ6;;UF&r@_yTrSHx>;!jw z9jnS7ht>$!Wmqi!qcs3$wN!sjUr{2Gz|je+N3I4~m{|HS%`c?VIx3xG z3{WTmxUpo&VW#mY!y7$^hPC(;q{`rhXQ8#(G5iU8gtbFQSc`8L`(d-*cl%3P#J{4;`PVSeFDb)s(@p$4I?BJNll(_|mj6UA z@}KD?{u_Or|4uLSKkyTPbAb1G`mv_d&omePL37ieG?Qm&`0=P#%&WCAyips=&6JZx8OA2d<`@c0~>a7!ns5iED-vzdJMWIp>+KKpV$`{P^| zd^kH8=uI|@U4`Es*kHu>2bYQjOJS!5{AGa=DzH;S78oKk6cY`3f8&?4qBfB%Z4&vk z$+SeX&t3K*W@%OlxaXEruYI>5->a77mafT9DV$B>hZm49Mo%Ji?+F`7+rqBW0FD#a z*16?MI$38T*7^>Wf!uL@x zHp45WWip&M=(UG)VYsq_;fe#r_}+!#^gwYbPC*z=oPV)B-jLynWw@X>|0!Vyq9$pj zVz=DPKAH8E$o&+IO;Gft;&T%1pHzHK zhh{&I`y;t|uyFhNbL8ZE+I_fBI*YavoREbnnDDZ9&@a&{(f+8iS`p5-n{elJ*11!} ti5N3c7kom$B*cT+g(biX0T`v>2w9314Cx{K4V@mpNE_p(OO9gy^Z!ok>r4Ou literal 0 HcmV?d00001 diff --git a/export/javame/hangmanp/simple/keycanvasp.java b/export/javame/hangmanp/simple/keycanvasp.java new file mode 100644 index 0000000..06009b7 --- /dev/null +++ b/export/javame/hangmanp/simple/keycanvasp.java @@ -0,0 +1,570 @@ +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import javax.microedition.lcdui.Image; +import javax.microedition.lcdui.Canvas; +import javax.microedition.lcdui.Command; +import javax.microedition.lcdui.Font; +import javax.microedition.lcdui.Graphics; +import java.util.Hashtable; +import java.util.Random; + +class keycanvasp extends Canvas { + //private Font mFont = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_MEDIUM); + + private String mMessage = ""; + + private String m_letters; + private String m_lastletter; + + private String m_dirphoto; + //read from photo.txt + private String m_file; + private String m_answer; + private String m_info; + + //private String m_question; + private String m_allletters; + private String m_guess; + private String m_wrong; + private int m_wrongletters; + private int m_state=0; + //0=start 1=play 2=next word 3=lose 4=win + private String m_init_letters; + private String m_init_allletters; + private int m_count_games=0; + private int m_count_wins=0; + public Hashtable m_hashLocales; + private int m_keysize = 0; + private int [] m_key; + + public keycanvasp() throws IOException { + m_state = 0; + + m_key = new int[ m_keysize+1]; + m_key[ 0] = 0; + + SelectFileWords(); + LoadLocales(); + + addCommand(new Command( getlocale( "exit"), Command.EXIT, 0)); + } + + private String decrypt( String s){ + String ret=""; + + if( m_keysize <=0 ){ + return s; + } + + int len=s.length(); + for(int i=0; i < len; i+=m_keysize){ + for(int j=0; j < m_keysize; j++){ + int pos=i + m_key[ j]; + if( pos < len){ + ret = ret + s.charAt( pos); + } + } + } + + return ret; + } + + private String getlocale( String key){ + return (String)m_hashLocales.get( key); + } + + private void SelectFileWords() throws IOException{ + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( "hangmanp/hangmanp.txt"); + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + + String line = null; + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + int pos = line.indexOf( "="); + if( pos >= 0){ + m_dirphoto = "/hangmanp/" + line.substring( 0, pos); + } + break; + } + reader.close(); + } + + private String readLine(InputStreamReader reader) throws IOException { + // Test whether the end of file has been reached. If so, return null. + int readChar = reader.read(); + if (readChar <= -1) { + return null; + } + StringBuffer string = new StringBuffer(); + // Read until end of file or new line + while (readChar > -1 && readChar != '\n') { + + // Append the read character to the string. Some operating systems + // such as Microsoft Windows prepend newline character ('\n') with + // carriage return ('\r'). This is part of the newline character and + // therefore an exception that should not be appended to the string. + if (readChar != '\r') { + string.append( (char )readChar); + } + + // Read the next character + readChar = reader.read(); + } + return string.toString(); + } + + private void LoadLocales() throws IOException{ + m_hashLocales = new Hashtable(); + + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( "hangmanp/language.txt"); + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + String line = null; + String key, data; + + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + int pos = line.indexOf( "="); + if( pos >= 0){ + key = line.substring( 0, pos); + data = line.substring( pos+1); + m_hashLocales.put(key, data); + } + } + reader.close(); + } + + protected boolean SetCurrentWord( String line) throws IOException{ + + int pos=line.indexOf( '='); + if( pos == -1){ + return false; + } + m_file = line.substring( 0, pos); + m_answer = line.substring( pos+1); + + pos=m_answer.indexOf( ','); + if( pos == -1){ + m_info = ""; + }else + { + m_info = line.substring( pos+1); + m_answer = line.substring( 0, pos); + } + + return true; + } + + protected int SelectWord( String fname) throws IOException{ + Class c = this.getClass(); + InputStream is = c.getResourceAsStream( fname); + + if( is == null) + is = c.getResourceAsStream( fname); + + if( is == null) + { + fname = "/hangmanp/01/photo.txt"; + is = c.getResourceAsStream( fname); + } + + InputStreamReader reader = new InputStreamReader( is, "UTF-8"); + String line = null; + int count=0; + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader)) != null) { + // Append the read line to the main form with a linefeed ('\n') + count = count + 1; + } + reader.close(); + + //select randomly one word + Random r = new Random(); + int curline = r.nextInt(); + curline = curline % count; + if( curline < 0) + curline = curline + count; + + is = c.getResourceAsStream( fname); + InputStreamReader reader2 = new InputStreamReader( is, "UTF-8"); + int i = 0; + + // Read a single line from the file. null represents the EOF. + while ((line = readLine(reader2)) != null) { + if( i == curline){ + line = decrypt( line); + SetCurrentWord( line); + return 1; + } + i = i + 1; + } + reader.close(); + + return 0; + } + + + public void paint(Graphics g) { + switch( m_state){ + case 0: + try { + paint_state_start(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + case 1: + try { + paint_state_play( g); + } catch (StringIndexOutOfBoundsException ex) { + ex.printStackTrace(); + } + break; + case 2: + try { + paint_state_nextword(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + case 3: + paint_state_lose( g); + break; + case 4: + try { + paint_state_win(g); + } catch (IOException ex) { + ex.printStackTrace(); + } + break; + } + } + +private void paint_state_start(Graphics g) throws IOException{ + + m_init_letters = getlocale( "keyboardletters"); + m_init_allletters = m_init_letters; + + String sRemove = "1234567890:#"; + for(int i=0; i < sRemove.length(); i++){ + for(;;){ + int pos = m_init_allletters.indexOf( sRemove.charAt(i)); + if( pos < 0) + break; + m_init_allletters = m_init_allletters.substring( 0, pos) + m_init_allletters.substring( pos+1); + } + } + + m_state = 2; + paint_state_nextword( g); +} + +private void paint_state_nextword(Graphics g) throws IOException{ + m_letters = m_init_letters; + m_allletters = m_init_allletters; + + SelectWord( m_dirphoto + "/photo.txt"); + + m_lastletter = ""; + int len = m_answer.length(); + m_guess = ""; + m_wrong = ""; + for(int i=0; i < len; i++){ + m_guess = m_guess + "-"; + } + m_wrongletters = 0; + + m_state = 1; //play + paint_state_play( g); +} + +private void paint_state_win(Graphics g) throws IOException{ + m_count_games++; + m_count_wins++; + + m_state = 2; + paint_state_nextword( g); +} + +private void paint_state_lose(Graphics g){ + m_count_games++; + + //clear the screen + g.setColor(255,255,255); + g.fillRect(0, 0, getWidth(), getHeight()); + //set color to black + g.setColor(0,0,0); + //get the font height + + int y=10; + + int iHeight=g.getFont().getHeight(); + + String s = m_answer; + + if( m_wrong.length() > 0){ + s = s + " (" + m_wrong + ")"; + } + + s = s + " [" + String.valueOf( m_count_wins) + "/" + String.valueOf( m_count_games) + "]"; + + y = drawtextmultiline( g, s, 0, y); + + y = drawtextmultiline( g, m_info, 0, y+iHeight); + + m_state = 2; +} + +private void paint_state_play(Graphics g){ + + //clear the screen + g.setColor(255,255,255); + g.fillRect(0, 0, getWidth(), getHeight()); + //set color to black + g.setColor(0,0,0); + //get the font height + + int y=0; + Font font = g.getFont(); + + int iHeight=g.getFont().getHeight(); + + String s = m_guess; + if( m_wrong.compareTo( "") != 0){ + s = s + " (" + m_wrong + ")"; + } + + s = s + " (" + String.valueOf( m_count_wins) + "/" + String.valueOf( m_count_games) + ")"; + + y = drawtextmultiline( g, s, 0, y); + + int x = getWidth() - 3 * font.charWidth( '-'); + y = drawtextmultiline( g, mMessage, x, y) + iHeight; + + y = drawtextmultiline( g, m_info, 0, y) + iHeight; + + Image im = null; + try { + String filename = m_dirphoto + "/" + m_file; + im = Image.createImage( filename); + } catch (IOException ex) { + ex.printStackTrace(); + } + + if( im == null) + { + try { + String filename = "/hangmanp/01/"; + filename = filename + m_file; + im = Image.createImage(filename); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + int xMul = (100 * getWidth()) / im.getWidth(); + int yMul = (100 * (getHeight() - y)) / im.getHeight(); + + if( yMul < xMul){ + xMul = yMul; + } + int cx = (xMul * im.getWidth()) / 100; + int cy = (yMul * im.getHeight()) / 100; + Image resize = resizeImage( im, cx, cy); + + g.drawImage(resize, 0, y, Graphics.LEFT | Graphics.TOP); + } + + protected int drawtextmultiline(Graphics g, String text, int x, int y){ + Font font = g.getFont(); + int fontHeight = font.getHeight(); + //change string to char data + char[] data = new char[text.length()]; + text.getChars(0, text.length(), data, 0); + int width = getWidth(); + int lineWidth = 0; + int charWidth = 0; + int xStart = x; + char ch; + for(int ccnt=0; ccnt < data.length; ccnt++) + { + ch = data[ccnt]; + //measure the char to draw + charWidth = font.charWidth(ch); + lineWidth = lineWidth + charWidth; + //see if a new line is needed + if (lineWidth > width) + { + y = y + fontHeight; + lineWidth = 0; + x = xStart; + } + //draw the char + g.drawChar(ch, x, y, + Graphics.TOP|Graphics.LEFT); + x = x + charWidth; + } + + return y; + } + + protected void keyPressed(int keyCode) { + char number; + + if( m_state == 2){ + repaint(); + return; + } + + if( (keyCode >= 49) && (keyCode <= 57)){ + String numbers = "123456789"; + number = numbers.charAt(keyCode - 49); + + int pos = m_letters.indexOf( number + ":"); + String letters = ""; + + String letters2 = m_letters.substring( pos+2); + + if( pos >= 0){ + pos = letters2.indexOf( '#'); + if( pos >= 0){ + letters = letters2.substring( 0, pos); + //Compute the letters that correspond to the key pressed + + if( m_lastletter.compareTo( "") != 0){ + pos = letters.indexOf( m_lastletter); + + if( pos >= 0){ + pos = pos + 1; + if( pos >= letters.length()){ + pos = 0; + } + }else{ + //different key + pos = 0; + } + }else{ + pos = 0; + } + if( (pos < letters.length()) && (pos >= 0)){ + m_lastletter = letters.substring( pos, pos+1); + mMessage = m_lastletter; + repaint(); + } + return; + } + } + + repaint(); + return; + } + + int gameAction = getGameAction(keyCode); + switch (gameAction) { + case FIRE: + OnFire(); + break; + + default: + mMessage = String.valueOf( keyCode); + break; + } + } + + protected void OnFire() { + int pos = m_guess.indexOf( m_lastletter); + if( pos >= 0){ + //Already used + return; + } + + char ch = m_lastletter.charAt( 0); + pos = m_answer.indexOf( ch); + if( pos >= 0){ + //correct letter + //Maybe there are many letters + for(pos=0; pos < m_guess.length();pos++){ + if( m_answer.charAt( pos) == ch){ + m_guess = m_guess.substring( 0, pos) + m_lastletter + m_guess.substring( pos+1); + } + } + + pos = m_allletters.indexOf( m_lastletter); + if( pos >= 0){ + m_allletters = m_allletters.substring( 0, pos) + "." + m_allletters.substring( pos+1); + } + + remove_lastletter_from_keyboard(); + + if( m_guess.indexOf( '-') < 0){ + m_state = 4; //state=win; + } + + repaint(); + return; + } + + pos = m_allletters.indexOf( m_lastletter); + if( pos < 0){ + return; + } + + //wrong letter + m_wrongletters = m_wrongletters + 1; + + pos = m_allletters.indexOf( m_lastletter); + if( pos >= 0){ + m_allletters = m_allletters.substring( 0, pos) + "." + m_allletters.substring( pos+1); + m_wrong = m_wrong + m_lastletter; + } + + remove_lastletter_from_keyboard(); + + if( m_wrongletters >= 6){ + m_state = 3; //state=lose + } + repaint(); + } + + private void remove_lastletter_from_keyboard(){ + int pos = m_letters.indexOf( m_lastletter); + + if( pos >= 0){ + m_letters = m_letters.substring( 0, pos) + m_letters.substring( pos+1); + } + } + + private Image resizeImage(Image src, int cx, int cy) { + int srcWidth = src.getWidth(); + int srcHeight = src.getHeight(); + Image tmp = Image.createImage(cx, srcHeight); + Graphics g = tmp.getGraphics(); + int ratio = (srcWidth << 16) / cx; + int pos = ratio/2; + + //Horizontal Resize + + for (int x = 0; x < cx; x++) { + g.setClip(x, 0, 1, srcHeight); + g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT | Graphics.TOP); + pos += ratio; + } + + Image resizedImage = Image.createImage(cx, cy); + g = resizedImage.getGraphics(); + ratio = (srcHeight << 16) / cy; + pos = ratio/2; + + //Vertical resize + + for (int y = 0; y < cy; y++) { + g.setClip(0, y, cx, 1); + g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT | Graphics.TOP); + pos += ratio; + } + return resizedImage; + + }//resize image +} \ No newline at end of file diff --git a/export/javame/hangmanp/simple/lang/el_utf8/language.txt b/export/javame/hangmanp/simple/lang/el_utf8/language.txt new file mode 100644 index 0000000..dc2fc15 --- /dev/null +++ b/export/javame/hangmanp/simple/lang/el_utf8/language.txt @@ -0,0 +1,3 @@ +encoding=el_utf8 +exit=Έξοδος +keyboardletters=2:ΑΒΓ#3:ΔΕΖ#4:ΗΘΙ#5:ΚΛΜ#6:ΝΞΟ#7:ΠΡΣ#8:ΤΥΦ#9:ΧΨΩ# diff --git a/export/javame/hangmanp/simple/lang/en_utf8/language.txt b/export/javame/hangmanp/simple/lang/en_utf8/language.txt new file mode 100644 index 0000000..b91ae1c --- /dev/null +++ b/export/javame/hangmanp/simple/lang/en_utf8/language.txt @@ -0,0 +1,4 @@ +encoding=en_utf8 +exit=Exit +keyboardletters=2:ABC#3:DEF#4:GHI#5:JKL#6:MNO#7:PQRS#8:TUV#9:WXYZ# + diff --git a/export/javame/hangmanp/simple/lang/es_utf8/language.txt b/export/javame/hangmanp/simple/lang/es_utf8/language.txt new file mode 100644 index 0000000..64ad1d1 --- /dev/null +++ b/export/javame/hangmanp/simple/lang/es_utf8/language.txt @@ -0,0 +1,4 @@ +encoding=es_utf8 +exit=Salir +keyboardletters=2:ABC2ÁªÀÇ#3:DEF3ÉÈ#4:GHI4ÍÌ#5:JKL5#6:MNÑO6ÓÒº#7:PQRS7#8:TUV8ÚÜÙ#9:WXYZ9# + diff --git a/exporthtml.php b/exporthtml.php new file mode 100644 index 0000000..e0ac7dd --- /dev/null +++ b/exporthtml.php @@ -0,0 +1,418 @@ +gamekind){ + case 'cross'; + game_OnExportHTML_cross( $game, $context, $html, $destdir); + break; + case 'hangman': + game_OnExportHTML_hangman( $game, $context, $html, $destdir); + break; + case 'snakes': + game_OnExportHTML_snakes( $game, $html, $destdir, $context); + break; + case 'millionaire': + game_OnExportHTML_millionaire( $game, $context, $html, $destdir); + break; + } + + remove_dir( $destdir); + } + + function game_OnExportHTML_cross( $game, $context, $html, $destdir){ + + global $CFG, $DB; + + if( $html->filename == ''){ + $html->filename = 'cross'; + } + + $filename = $html->filename . '.htm'; + + require( "cross/play.php"); + $attempt = game_getattempt( $game, $crossrec, true); + if( $crossrec == false){ + game_cross_new( $game, $attempt->id, $crossm); + $attempt = game_getattempt( $game, $crossrec); + } + + $ret = game_export_printheader( $html->title); + echo "$ret
    "; + + ob_start(); + + game_cross_play( 0, $game, $attempt, $crossrec, '', true, false, false, false, $html->checkbutton, true, $html->printbutton, false, $context); + + $output_string = ob_get_contents(); + ob_end_clean(); + + $course = $DB->get_record( 'course', array( 'id' => $game->course)); + + $filename = $html->filename . '.htm'; + + file_put_contents( $destdir.'/'.$filename, $ret . "\r\n" . $output_string); + + $filename = game_OnExportHTML_cross_repair_questions( $game, $context, $filename, $destdir); + + game_send_stored_file( $filename); + } + + function game_OnExportHTML_cross_repair_questions( $game, $context, $filename, $destdir) + { + global $CFG, $DB; + + $file_handle = fopen( $destdir.'/'.$filename, "rb"); + + $found = false; + $files = array(); + $contextcourse = false; + $linesbefore = array(); + $linesafter = array(); + while (!feof($file_handle) ) { + $line = fgets( $file_handle); + + if( $found) + { + if( strpos( $line, 'new Array')) + { + $linesafter[] = $line; + break; + } + $array .= $line; + continue; + } + + if( strpos( $line, 'Clue = new Array') === false) + { + $linesbefore[] = $line; + continue; + } + + $array = $line; + $found = true; + } + while (!feof($file_handle) ) { + $linesafter[] = fgets( $file_handle); + } + + fclose($file_handle); + + $search = $CFG->wwwroot.'/pluginfile.php'; + $pos = 0; + $search = '"'.$CFG->wwwroot.'/pluginfile.php/'.$context->id.'/mod_game/'; + $len = strlen( $search); + $start = 0; + $filescopied = false; + for(;;) + { + $pos1 = strpos( $array, $search, $start); + if( $pos1 == false) + break; + + $pos2 = strpos( $array, '\"', $pos1+$len); + if( $pos2 == false) + break; + + //Have to copy the files + + if( $contextcourse === false) + { + mkdir( $destdir.'/images'); + if (!$contextcourse = get_context_instance(CONTEXT_COURSE, $game->course)) { + print_error('nocontext'); + } + $fs = get_file_storage(); + } + + $inputs = explode( '/', substr( $array, $pos1+$len, $pos2-$pos1-$len)); + + $filearea = $inputs[ 0]; + $id = $inputs[ 1]; + $fileimage = urldecode( $inputs[ 2]); + $component = 'question'; + + $params = array( 'component' => $component, 'filearea' => $filearea, + 'itemid' => $id, 'filename' => $fileimage, 'contextid' => $context, 'contextid' => $contextcourse->id); + $rec = $DB->get_record( 'files', $params); + if( $rec == false) + { + print_r( $params); + break; + } + + if (!$file = $fs->get_file_by_hash($rec->pathnamehash) or $file->is_directory()) + continue; + + $posext = strrpos( $fileimage, '.'); + $filenoext = substr( $fileimage, $posext); + $ext = substr( $fileimage, $posext+1); + for($i=0;;$i++) + { + $newfile = $filenoext.$i; + $newfile = md5( $newfile).'.'.$ext; + if( !array_search( $newfile, $files)) + break; + } + $file->copy_content_to( $destdir.'/images/'.$newfile); + $filescopied = true; + + $array = substr( $array, 0, $pos1+1).'images/'.$newfile.substr( $array, $pos2); + } + + if( $filescopied == false) + return $destdir.'/'.$filename; + + $linesbefore[] = $array; + foreach( $linesafter as $line) + $linesbefore [] = $line; + file_put_contents( $destdir.'/'.$filename, $linesbefore); + + $pos = strrpos( $filename, '.'); + if( $pos === false) + $filezip = $filename.'.zip'; + else + $filezip = substr( $filename, 0, $pos).'.zip'; + + $filezip = game_create_zip( $destdir, $game->course, $filezip); + + return $filezip; + } + + function game_export_printheader( $title, $showbody=true) + { + $ret = ''."\n"; + $ret .= ''."\n"; + $ret .= "\n"; + $ret .= ''."\n"; + $ret .= ''."\n"; + $ret .= "$title\n"; + $ret .= "\n"; + if( $showbody) + $ret .= ""; + + return $ret; + } + + function game_OnExportHTML_hangman( $game, $context, $html, $destdir){ + + global $CFG, $DB; + + if( $html->filename == ''){ + $html->filename = 'hangman'; + } + + if( $game->param10 <= 0) + $game->param10 = 6; + + $filename = $html->filename . '.htm'; + + $ret = game_export_printheader( $html->title, false); + $ret .= "\r\r"; + + $export_attachment = ( $html->type == 'hangmanp'); + + $map = game_exmportjavame_getanswers( $game, $context, $export_attachment, $destdir, $files); + if( $map == false){ + print_error( get_string('no_words', 'game')); + } + + ob_start(); + + //Here is the code of hangman + require_once( "exporthtml_hangman.php"); + + $output_string = ob_get_contents(); + ob_end_clean(); + + $courseid = $game->course; + $course = $DB->get_record( 'course', array( 'id' => $courseid)); + + $filename = $html->filename . '.htm'; + file_put_contents( $destdir.'/'.$filename, $ret . "\r\n" . $output_string); + + if( $html->type != 'hangmanp') + { + //Not copy the standard pictures when we use the "Hangman with pictures" + $src = $CFG->dirroot.'/mod/game/pix/hangman/1'; + $handle = opendir( $src); + while (false!==($item = readdir($handle))) { + if($item != '.' && $item != '..') { + if(!is_dir($src.'/'.$item)) { + $itemdest = $item; + + if( strpos( $item, '.') === false) + continue; + + copy( $src.'/'.$item, $destdir.'/'.$itemdest); + } + } + } + } + + $filezip = game_create_zip( $destdir, $courseid, $html->filename.'.zip'); + game_send_stored_file( $filezip); + } + + function game_OnExportHTML_millionaire( $game, $context, $html, $destdir){ + + global $CFG, $DB; + + if( $html->filename == ''){ + $html->filename = 'millionaire'; + } + + $filename = $html->filename . '.htm'; + + $ret = game_export_printheader( $html->title, false); + $ret .= "\r\r"; + + //Here is the code of millionaire + require( "exporthtml_millionaire.php"); + + $questions = game_millionaire_html_getquestions( $game, $context, $maxanswers, $maxquestions, $retfeedback, $destdir, $files); + ob_start(); + + game_millionaire_html_print( $game, $questions, $maxanswers); + + //End of millionaire code + $output_string = ob_get_contents(); + ob_end_clean(); + + $courseid = $game->course; + $course = $DB->get_record( 'course', array( 'id' => $courseid)); + + $filename = $html->filename . '.htm'; + + file_put_contents( $destdir.'/'.$filename, $ret . "\r\n" . $output_string); + + //Copy the standard pictures of Millionaire + $src = $CFG->dirroot.'/mod/game/millionaire/1'; + $handle = opendir( $src); + while (false!==($item = readdir($handle))) { + if($item != '.' && $item != '..') { + if(!is_dir($src.'/'.$item)) { + $itemdest = $item; + + if( strpos( $item, '.') === false) + continue; + + copy( $src.'/'.$item, $destdir.'/'.$itemdest); + } + } + } + + $filezip = game_create_zip( $destdir, $courseid, $html->filename.'.zip'); + game_send_stored_file($filezip); + } + + function game_OnExportHTML_snakes( $game, $html, $destdir, $context){ + require_once( "exporthtml_millionaire.php"); + + global $CFG, $DB; + + if( $html->filename == ''){ + $html->filename = 'snakes'; + } + + $filename = $html->filename . '.htm'; + + $ret = ''; + + $board = game_snakes_get_board( $game); + + if( ($game->sourcemodule == 'quiz') or ($game->sourcemodule == 'question')) + $questionsM = game_millionaire_html_getquestions( $game, $context, $maxquestions, $countofquestionsM, $retfeedback, $files); + else + { + $questionsM = array(); + $countofquestionsM = 0; + $retfeedback = ''; + } + $questionsS = game_exmportjavame_getanswers( $game, $context, false, $destdir, $files); + + ob_start(); + + //Here is the code of hangman + require( "exporthtml_snakes.php"); + + $output_string = ob_get_contents(); + ob_end_clean(); + + $courseid = $game->course; + $course = $DB->get_record( 'course', array( 'id' => $courseid)); + + $filename = $html->filename . '.htm'; + + file_put_contents( $destdir.'/'.$filename, $ret . "\r\n" . $output_string); + + $src = $CFG->dirroot.'/mod/game/export/html/snakes'; + game_copyfiles( $src, $destdir); + + mkdir( $destdir .'/css'); + $src = $CFG->dirroot.'/mod/game/export/html/snakes/css'; + game_copyfiles( $src, $destdir.'/css'); + + mkdir( $destdir .'/js'); + $src = $CFG->dirroot.'/mod/game/export/html/snakes/js'; + game_copyfiles( $src, $destdir.'/js'); + + mkdir( $destdir .'/images'); + $destfile = $destdir.'/images/'.$board->fileboard; + if( $game->param3 != 0) + { + //Is a standard board + copy( $board->imagesrc, $destfile); + }else + { + $cmg = get_coursemodule_from_instance('game', $game->id, $game->course); + $modcontext = get_context_instance(CONTEXT_MODULE, $cmg->id); + $fs = get_file_storage(); + $files = $fs->get_area_files($modcontext->id, 'mod_game', 'snakes_board', $game->id); + foreach ($files as $f) { + if( $f->is_directory()) + continue; + break; + } + $f->copy_content_to( $destfile); + } + + $a = array( 'player1.png', 'dice1.png', 'dice2.png', 'dice3.png', 'dice4.png', 'dice5.png', 'dice6.png', 'numbers.png'); + foreach( $a as $file) + copy( $CFG->dirroot.'/mod/game/snakes/1/'.$file, $destdir.'/images/'.$file); + + $filezip = game_create_zip( $destdir, $courseid, $html->filename.'.zip'); + game_send_stored_file($filezip); + } + + function game_copyfiles( $src, $destdir) + { + $handle = opendir( $src); + while (($item = readdir($handle)) !== false) + { + if( $item == '.' or $item == '..') + continue; + + if( strpos( $item, '.') === false) + continue; + + if(is_dir($src.'/'.$item)) + continue; + + copy( $src.'/'.$item, $destdir.'/'.$item); + } + closedir($handle); + } diff --git a/exporthtml_hangman.php b/exporthtml_hangman.php new file mode 100644 index 0000000..c028215 --- /dev/null +++ b/exporthtml_hangman.php @@ -0,0 +1,360 @@ + + + + +
    + +
    +
    +
    +
    +
    + + + diff --git a/exporthtml_millionaire.php b/exporthtml_millionaire.php new file mode 100644 index 0000000..7968c91 --- /dev/null +++ b/exporthtml_millionaire.php @@ -0,0 +1,526 @@ +sourcemodule != 'quiz') and ($game->sourcemodule != 'question')){ + print_error( get_string('millionaire_sourcemodule_must_quiz_question', 'game', get_string( 'modulename', 'quiz')).' '.get_string( 'modulename', $game->sourcemodule)); + } + + if( $game->sourcemodule == 'quiz'){ + if( $game->quizid == 0){ + print_error( get_string( 'must_select_quiz', 'game')); + } + $select = "qtype='multichoice' AND quiz='$game->quizid' ". + " AND qqi.question=q.id"; + $table = "{question} q,{quiz_question_instances} qqi"; + }else + { + if( $game->questioncategoryid == 0){ + print_error( get_string( 'must_select_questioncategory', 'game')); + } + + //include subcategories + $select = 'category='.$game->questioncategoryid; + if( $game->subcategories){ + $cats = question_categorylist( $game->questioncategoryid); + if( strpos( $cats, ',') > 0){ + $select = 'category in ('.$cats.')'; + } + } + $select .= " AND qtype='multichoice'"; + + $table = "{question} q"; + } + $select .= " AND q.hidden=0"; + $sql = "SELECT q.id as id, q.questiontext FROM $table WHERE $select"; + $recs = $DB->get_records_sql( $sql); + $ret = ''; + $retfeedback = ''; + foreach( $recs as $rec){ + $recs2 = $DB->get_records( 'question_answers', array( 'question' => $rec->id), 'fraction DESC', 'id,answer,feedback'); + + //Must parse the questiontext and get the name of files. + $line = $rec->questiontext; + $line = game_export_split_files( $game->course, $context, 'questiontext', $rec->id, $rec->questiontext, $destdir, $files); + $linefeedback = ''; + foreach( $recs2 as $rec2) + { + $line .= '#'.str_replace( array( '"', '#'), array( "'", ' '), game_export_split_files( $game->course, $context, 'answer', $rec2->id, $rec2->answer, $destdir, $files)); + $linefeedback .= '#'.str_replace( array( '"', '#'), array( "'", ' '), $rec2->feedback); + } + if( $ret != '') + $ret .= ",\r"; + $ret .= '"'.base64_encode( $line).'"'; + + if( $retfeedback != '') + $retfeedback .= ",\r"; + $retfeedback .= '"'.base64_encode( $linefeedback).'"'; + + if( count( $recs2) > $maxanswers) + $maxanswers = count( $recs2); + $countofquestions++; + } + + return $ret; +} + +function game_millionaire_html_print( $game, $questions, $maxquestions) +{ + $color1 = 'black'; + $color2 = 'DarkOrange'; + $colorback="white"; + $stylequestion = "background:$colorback;color:$color1"; + $stylequestionselected = "background:$colorback;color:$color2"; + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\n"; + echo "\n"; + echo "\n"; + if( $i == 1) + { + echo "\n"; + } + echo "\n"; +} +?> + + + +
    >              >        
    +  +  +  +  + style='background:#408080'>      15      150000
    14 800000
    13 400000
    aa
    12 200000
    11 10000
    10 5000
    9 4000
    8 2000
    7 1500
    6 1000
    5 500
    4 400
    3 300
    2 200
    1 100
         
    "; + echo ""; + echo "  
         
    + + + + + + + + + +<?php echo $html->title;?> + + + + + + + + + + + + + + + + + + + diff --git a/exportjavame.php b/exportjavame.php new file mode 100644 index 0000000..894bf8c --- /dev/null +++ b/exportjavame.php @@ -0,0 +1,391 @@ +course; + $course = $DB->get_record( 'course', array( 'id' => $courseid)); + + $destdir = game_export_createtempdir(); + + if( $javame->type == 'hangmanp'){ + $destmobiledir = 'hangmanp'; + }else{ + $destmobiledir = 'hangman'; + } + $src = $CFG->dirroot.'/mod/game/export/javame/'.$destmobiledir.'/simple'; + + if( $javame->filename == ''){ + $javame->filename = 'moodle'.$destmobiledir; + } + + $handle = opendir( $src); + while (false!==($item = readdir($handle))) { + if($item != '.' && $item != '..') { + if(!is_dir($src.'/'.$item)) { + $itemdest = $item; + + if( substr( $item, -5) == '.java'){ + continue; //don't copy the java source code files + } + + if( substr( $itemdest, -8) == '-1.class'){ + $itemdest = substr( $itemdest, 0, -8).'$1.class'; + } + + copy( $src.'/'.$item, $destdir.'/'.$itemdest); + } + } + } + + mkdir( $destdir.'/META-INF'); + + game_exportjavame_exportdata( $src, $destmobiledir, $destdir, $game, $javame->maxpicturewidth, $javame->maxpictureheight); + + game_create_manifest_mf( $destdir.'/META-INF', $javame, $destmobiledir); + + $filejar = game_create_jar( $destdir, $course, $javame); + if( $filejar == ''){ + $filezip = game_create_zip( $destdir, $course->id, $javame->filename.'.zip'); + }else{ + $filezip = ''; + } + + if( $destdir != ''){ + remove_dir( $destdir); + } + + if( $filezip != ''){ + echo "unzip the $filezip in a directory and when you are in this directory use the command
    jar cvfm {$javame->filename}.jar META-INF/MANIFEST.MF
    to produce the jar files

    "; + } + + $file = ($filejar != '' ? $filejar : $filezip); + game_send_stored_file( $file); + } + + function game_exportjavame_exportdata( $src, $destmobiledir, $destdir, $game, $maxwidth, $maxheight){ + global $CFG; + + mkdir( $destdir.'/'.$destmobiledir); + + $handle = opendir( $src); + while (false!==($item = readdir($handle))) { + if($item != '.' && $item != '..') { + if(!is_dir($src.'/'.$item)) { + if( substr( $item, -4) == '.jpg'){ + copy( $src.'/'.$item, $destdir."/$destmobiledir/".$item); + } + } + } + } + + $lang = $game->language; + if( $lang == '') + $lang = current_language(); + copy( $src. '/lang/'.$lang.'/language.txt', $destdir."/$destmobiledir/language.txt"); + + $export_attachment = ( $destmobiledir == 'hangmanp'); + + $map = game_exmportjavame_getanswers( $game, $export_attachment, false, $destdir, $files); + if( $map == false){ + print_error( 'No Questions'); + } + + if( $destmobiledir == 'hangmanp'){ + game_exportjavame_exportdata_hangmanp( $src, $destmobiledir, $destdir, $game, $map, $maxwidth, $maxheight); + return; + } + + $fp = fopen( $destdir."/$destmobiledir/hangman.txt","w"); + fputs( $fp, "1.txt=$destmobiledir\r\n"); + fclose( $fp); + + $fp = fopen( $destdir."/$destmobiledir/1.txt","w"); + foreach( $map as $line){ + $s = game_upper( $line->answer) . '=' . $line->question; + fputs( $fp, "$s\r\n"); + } + fclose( $fp); + } + + function game_exportjavame_exportdata_hangmanp( $src, $destmobiledir, $destdir, $game, $map, $maxwidth, $maxheight) + { + global $CFG; + + $fp = fopen( $destdir."/$destmobiledir/$destmobiledir.txt","w"); + fputs( $fp, "01=01\r\n"); + fclose( $fp); + + $destdirphoto = $destdir.'/'.$destmobiledir.'/01'; + mkdir( $destdirphoto); + + $fp = fopen( $destdirphoto.'/photo.txt',"w"); + foreach( $map as $line){ + + $file = $line->attachment; + $pos = strrpos( $file, '.'); + if( $pos != false){ + $file = $line->id.substr( $file, $pos); + $src = $CFG->dataroot.'/'.$game->course.'/moddata/'.$line->attachment; + game_export_javame_smartcopyimage( $src, $destdirphoto.'/'.$file, $maxwidth, $maxheight); + + $s = $file . '=' . game_upper( $line->answer); + fputs( $fp, "$s\r\n"); + } + } + fclose( $fp); + } + + function game_exmportjavame_getanswers( $game, $context, $export_attachment, $dest, &$files){ + $map = array(); + $files = array(); + + switch( $game->sourcemodule){ + case 'question': + return game_exmportjavame_getanswers_question( $game, $context, $dest, $files); + case 'glossary': + return game_exmportjavame_getanswers_glossary( $game, $context, $export_attachment, $dest, $files); + case 'quiz': + return game_exmportjavame_getanswers_quiz( $game, $context, $dest, $files); + } + + return false; + } + + function game_exmportjavame_getanswers_question( $game, $context, $destdir, &$files){ + $select = 'hidden = 0 AND category='.$game->questioncategoryid; + + $select .= game_showanswers_appendselect( $game); + + return game_exmportjavame_getanswers_question_select( $game, $context, 'question', $select, '*', $game->course, $destdir, $files); + } + + function game_exmportjavame_getanswers_quiz( $game, $context, $destdir, $files) + { + global $CFG; + + $select = "quiz='$game->quizid' ". + " AND qqi.question=q.id". + " AND q.hidden=0". + game_showanswers_appendselect( $game); + $table = "{question} q,{quiz_question_instances} qqi"; + + return game_exmportjavame_getanswers_question_select( $game, $context, $table, $select, "q.*", $game->course, $destdir, $files); + } + + function game_exmportjavame_getanswers_question_select( $game, $context, $table, $select, $fields, $courseid, $destdir, &$files) + { + global $CFG, $DB; + if( ($questions = $DB->get_records_select( $table, $select, null, '', $fields)) === false){ + return; + } + + + $line = 0; + $map = array(); + foreach( $questions as $question){ + unset( $ret); + $ret->qtype = $question->qtype; + $ret->question = $question->questiontext; + $ret->question = str_replace( array( '"', '#'), array( "'", ' '), + game_export_split_files( $game->course, $context, 'questiontext', $question->id, $ret->question, $destdir, $files)); + + switch( $question->qtype){ + case 'shortanswer': + $rec = $DB->get_record( 'question_answers', array( 'question' => $question->id), 'id,answer,feedback'); + $ret->answer = $rec->answer; + $ret->feedback = $rec->feedback; + $map[] = $ret; + break; + default: + break; + } + } + + return $map; + } + + function game_exmportjavame_getanswers_glossary( $game, $context, $export_attachment, $destdir, &$files) + { + global $CFG, $DB; + + $table = '{glossary_entries} ge'; + $select = "glossaryid={$game->glossaryid}"; + if( $game->glossarycategoryid){ + $select .= " AND gec.entryid = ge.id ". + " AND gec.categoryid = {$game->glossarycategoryid}"; + $table .= ",{glossary_entries_categories} gec"; + } + + if( $export_attachment){ + $select .= " AND attachment <> ''"; + } + + $fields = 'ge.id,definition,concept'; + if( $export_attachment){ + $fields .= ',attachment'; + } + $sql = "SELECT $fields FROM $table WHERE $select ORDER BY definition"; + if( ($questions = $DB->get_records_sql( $sql)) === false){ + return false; + } + + $fs = get_file_storage(); + $map = array(); + $cmglossary = false; + + foreach( $questions as $question){ + $ret = new stdClass(); + $ret->id = $question->id; + $ret->qtype = 'shortanswer'; + $ret->question = strip_tags( $question->definition); + $ret->answer = $question->concept; + $ret->feedback = ''; + $ret->attachment = ''; + + //Copies the appropriate files from the file storage to destdir + if( $export_attachment){ + if( $question->attachment != ''){ + if( $cmglossary === false) + { + $cmglossary = get_coursemodule_from_instance('glossary', $game->glossaryid, $game->course); + $contextglossary = get_context_instance(CONTEXT_MODULE, $cmglossary->id); + } + + $ret->attachment = "glossary/{$game->glossaryid}/$question->id/$question->attachment"; + $myfiles = $fs->get_area_files( $contextglossary->id, 'mod_glossary', 'attachment', $ret->id); + $i=0; + foreach ($myfiles as $f) { + if( $f->is_directory()) + continue; + $filename = $f->get_filename(); + $url = "{$CFG->wwwroot}/pluginfile.php/{$f->get_contextid()}/mod_glossary/attachment}"; + $fileurl = $url.$f->get_filepath().$f->get_itemid().'/'.$filename; + $pos = strrpos( $filename, '.'); + $ext = substr( $filename, $pos); + $destfile = $ret->id; + if( $i > 0) + $destfile .= '_'.$i; + $destfile = $destdir.'/'.$destfile.$ext; + $f->copy_content_to( $destfile); + $ret->attachment = $destfile; + $i++; + $files[] = $destfile; + } + } + } + + $map[] = $ret; + } + + return $map; + } + + function game_create_manifest_mf( $dir, $javame, $destmobiledir){ + + $fp = fopen( $dir.'/MANIFEST.MF',"w"); + fputs( $fp, "Manifest-Version: 1.0\r\n"); + fputs( $fp, "Ant-Version: Apache Ant 1.7.0\r\n"); + fputs( $fp, "Created-By: {$javame->createdby}\r\n"); + fputs( $fp, "MIDlet-1: MoodleHangman,,$destmobiledir\r\n"); + fputs( $fp, "MIDlet-Vendor: {$javame->vendor}\r\n"); + fputs( $fp, "MIDlet-Name: {$javame->vendor}\r\n"); + fputs( $fp, "MIDlet-Description: {$javame->description}\r\n"); + fputs( $fp, "MIDlet-Version: {$javame->version}\r\n"); + fputs( $fp, "MicroEdition-Configuration: CLDC-1.0\r\n"); + fputs( $fp, "MicroEdition-Profile: MIDP-1.0\r\n"); + + fclose( $fp); + } + + function game_create_jar( $srcdir, $course, $javame){ + global $CFG; + + $dir = $CFG->dataroot . '/' . $course->id; + $filejar = $dir . "/export/{$javame->filename}.jar"; + if (!file_exists( $dir)){ + mkdir( $dir); + } + + if (!file_exists( $dir.'/export')){ + mkdir( $dir.'/export'); + } + + if (file_exists( $filejar)){ + unlink( $filejar); + } + + $cmd = "cd $srcdir;jar cvfm $filejar META-INF/MANIFEST.MF *"; + exec( $cmd); + + return (file_exists( $filejar) ? "{$javame->filename}.jar" : ''); + } + + +function game_showanswers_appendselect( $form) +{ + switch( $form->gamekind){ + case 'hangman': + case 'cross': + case 'crypto': + return " AND qtype='shortanswer'"; + case 'millionaire': + return " AND qtype = 'multichoice'"; + case 'sudoku': + case 'bookquiz': + case 'snakes': + return " AND qtype in ('shortanswer', 'truefalse', 'multichoice')"; + } + + return ''; +} + +function game_export_javame_smartcopyimage( $filename, $dest, $maxwidth) +{ + if( $maxwidth == 0){ + copy( $filename, $dest); + return; + } + + $size = getimagesize( $filename); + if( $size == false){ + copy( $filename, $dest); + return; + } + + $mul = $maxwidth / $size[ 0]; + if( $mul > 1){ + copy( $filename, $dest); + return; + } + + $mime = $size[ 'mime']; + switch( $mime){ + case 'image/png': + $src_image = imageCreateFromPNG( $filename); + break; + case 'image/jpeg': + $src_image = imagecreatefromjpeg( $filename); + break; + case 'image/gif': + $src_image = imageCreateFromGIF( $filename); + break; + default: + die('Aknown mime type $mime'); + return false; + } + + $dst_w = $size[ 0] * $mul; + $dst_h = $size[ 1] * $mul; + $dst_image = imagecreatetruecolor( $dst_w, $dst_h); + imagecopyresampled( $dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $size[ 0], $size[ 1]); + + imagejpeg( $dst_image, $dest); +} diff --git a/hangman/play.php b/hangman/play.php new file mode 100644 index 0000000..d1dfca8 --- /dev/null +++ b/hangman/play.php @@ -0,0 +1,487 @@ +finishedword != 0)){ + //finish with one word and continue to another + if( !$DB->set_field( 'game_hangman', 'finishedword', 0, array( 'id' => $hangman->id))){ + error( "game_hangman_continue: Can't update game_hangman"); + } + }else + { + return game_hangman_play( $id, $game, $attempt, $hangman, false, false, $context); + } + } + + $updatehangman = (($attempt != false) and ($hangman != false)); + + //new game + srand ((double)microtime()*1000003); + + //I try 10 times to find a new question + $found = false; + $min_num = 0; + $unchanged = 0; + for($i=1; $i <= 10; $i++) + { + $rec = game_question_shortanswer( $game, $game->param7, false); + if( $rec === false){ + continue; + } + + $answer = game_upper( $rec->answertext, $game->language); + if( $game->language == '') + { + $game->language = game_detectlanguage( $answer); + $answer = game_upper( $rec->answertext, $game->language); + } + + $answer2 = $answer; + if( $game->param7){ + //Have to delete space + $answer2 = str_replace( ' ', '', $answer2); + } + if( $game->param8){ + //Have to delete - + $answer2 = str_replace( '-', '', $answer2); + } + + $allletters = game_getallletters( $answer2, $game->language); + + if( $allletters == ''){ + continue; + } + + if( $game->param7){ + $allletters .= '_'; + } + if( $game->param8){ + $allletters .= '-'; + } + + if( $game->param7 == false){ + //I don't allow spaces + if( strpos( $answer, " ")){ + continue; + } + } + + $copy = false; + $select2 = 'gameid=? AND userid=? AND questionid=? AND glossaryentryid=?'; + if( ($rec2 = $DB->get_record_select( 'game_repetitions', $select2, array( $game->id, $USER->id, $rec->questionid, $rec->glossaryentryid), 'id,repetitions r')) != false){ + if( ($rec2->r < $min_num) or ($min_num == 0)){ + $min_num = $rec2->r; + $copy = true; + } + }else + { + $min_num = 0; + $copy = true; + } + + if( $copy){ + $found = true; + + $min = new stdClass(); + $min->questionid = $rec->questionid; + $min->glossaryentryid = $rec->glossaryentryid; + $min->attachment = $rec->attachment; + $min->questiontext = $rec->questiontext; + $min->answerid = $rec->answerid; + $min->answer = $answer; + $min->language = $game->language; + $min->allletters = $allletters; + if( $min_num == 0) + break; //We found an unused word + }else + $unchanged++; + + if( $unchanged > 2) + { + if( $found) + break; + } + } + + if( $found == false){ + print_error( get_string( 'no_words', 'game')); + } + + //Found one word for hangman + if( $attempt == false){ + $attempt = game_addattempt( $game); + } + if( !$DB->set_field( 'game_attempts', 'language', $min->language, array( 'id' => $attempt->id))){ + print_error( "game_hangman_continue: Can't set language"); + } + + $query = new stdClass(); + $query->attemptid = $attempt->id; + $query->gameid = $game->id; + $query->userid = $USER->id; + $query->sourcemodule = $game->sourcemodule; + $query->questionid = $min->questionid; + $query->glossaryentryid = $min->glossaryentryid; + $query->attachment = $min->attachment; + $query->questiontext = addslashes( $min->questiontext); + $query->score = 0; + $query->timelastattempt = time(); + $query->answertext = $min->answer; + $query->answerid = $min->answerid; + if( !($query->id = $DB->insert_record( 'game_queries', $query))){ + print_object( $query); + print_error( "game_hangman_continue: Can't insert to table game_queries"); + } + + $newrec = new stdClass(); + $newrec->id = $attempt->id; + $newrec->queryid = $query->id; + if( $updatehangman == false){ + $newrec->maxtries = $game->param4; + if( $newrec->maxtries == 0){ + $newrec->maxtries = 1; + } + $newrec->finishedword = 0; + $newrec->corrects = 0; + } + + $newrec->allletters = $min->allletters; + + $letters = ''; + if( $game->param1){ + $letters .= textlib::substr( $min->answer, 0, 1); + } + if( $game->param2){ + $letters .= textlib::substr( $min->answer, -1, 1); + } + $newrec->letters = $letters; + + if( $updatehangman == false){ + if( !game_insert_record( 'game_hangman', $newrec)){ + print_error( 'game_hangman_continue: error inserting in game_hangman'); + } + }else + { + if( !$DB->update_record( 'game_hangman', $newrec)){ + print_error( 'game_hangman_continue: error updating in game_hangman'); + } + $newrec = $DB->get_record( 'game_hangman', array( 'id' => $newrec->id)); + } + + game_update_repetitions( $game->id, $USER->id, $query->questionid, $query->glossaryentryid); + + game_hangman_play( $id, $game, $attempt, $newrec, false, false, $context); +} + +function game_hangman_onfinishgame( $game, $attempt, $hangman) +{ + global $DB; + + $score = $hangman->corrects / $hangman->maxtries; + + game_updateattempts( $game, $attempt, $score, true); + + if( !$DB->set_field( 'game_hangman', 'finishedword', 0, array( 'id' => $hangman->id))){ + print_error( "game_hangman_onfinishgame: Can't update game_hangman"); + } +} + +function game_hangman_play( $id, $game, $attempt, $hangman, $onlyshow, $showsolution, $context) +{ + global $CFG, $DB, $OUTPUT; + + $query = $DB->get_record( 'game_queries', array( 'id' => $hangman->queryid)); + + if( $attempt->language != '') + $wordrtl = game_right_to_left( $attempt->language); + else + $wordrtl = right_to_left(); + $reverseprint = ($wordrtl != right_to_left()); + + if( $game->toptext != ''){ + echo $game->toptext.'
    '; + } + + $max=$game->param10; // maximum number of wrong + if( $max <= 0) + $max = 6; + hangman_showpage( $done, $correct, $wrong, $max, $word_line, $word_line2, $links, $game, $attempt, $hangman, $query, $onlyshow, $showsolution, $context); + + if (!$done) + { + if ($wrong > $max){ + $wrong = $max; + } + if( $game->param3 == 0){ + $game->param3 = 1; + } + echo "\r\n
    pix_url('hangman/'.$game->param3.'/hangman_'.$wrong, 'mod_game')."\""; + $message = sprintf( get_string( 'hangman_wrongnum', 'game'), $wrong, $max); + echo ' ALIGN="MIDDLE" BORDER="0" HEIGHT="100" alt="'.$message.'"/>'; + + if ($wrong >= $max){ + + //This word is incorrect. If reach the max number of word I have to finish else continue with next word + hangman_onincorrect( $id, $word_line, $query->answertext, $game, $attempt, $hangman, $onlyshow, $showsolution); + }else + { + $i = $max-$wrong; + if( $i > 1) + echo ' '.get_string( 'hangman_restletters_many', 'game', $i); + else + echo ' '.get_string( 'hangman_restletters_one', 'game'); + + if( $reverseprint){ + echo ''; + } + + echo "
    \n$word_line\r\n"; + if( $word_line2 != ''){ + echo "
    \n$word_line2\r\n"; + } + + if( $reverseprint){ + echo "
    "; + } + + if( $hangman->finishedword == false){ + echo "


    ".get_string( 'hangman_letters', 'game').$links."\r\n"; + } + } + }else + { + //This word is correct. If reach the max number of word I have to finish else continue with next word + hangman_oncorrect( $id, $word_line, $game, $attempt, $hangman, $query); + } + + echo "

    ".get_string( 'grade', 'game').' : '.round( $query->percent * 100).' %'; + if( $hangman->maxtries > 1){ + echo '

    '.get_string( 'hangman_gradeinstance', 'game').' : '.round( $hangman->corrects / $hangman->maxtries * 100).' %'; + } + + if( $game->bottomtext != ''){ + echo '

    '.$game->bottomtext; + } +} + +function hangman_showpage(&$done, &$correct, &$wrong, $max, &$word_line, &$word_line2, &$links, $game, &$attempt, &$hangman, &$query, $onlyshow, $showsolution, $context) +{ + global $USER, $CFG, $DB; + + $id = optional_param('id', 0, PARAM_INT); // Course Module ID, or + + $word = $query->answertext; + + $newletter = optional_param('newletter', "", PARAM_TEXT); + if( $newletter == '_'){ + $newletter = ' '; + } + + $letters = $hangman->letters; + if( $newletter != NULL) + { + if( textlib::strpos( $letters,$newletter) === false){ + $letters .= $newletter; + } + } + + $links=""; + + $alpha = $hangman->allletters; + $wrong = 0; + + if( $query->questionid) + { + $query->questiontext = game_filterquestion(str_replace( '\"', '"', $query->questiontext), $query->questionid, $context->id, $game->course); + }else + { + $cmglossary = get_coursemodule_from_instance('glossary', $game->glossaryid, $game->course); + $contextglossary = get_context_instance(CONTEXT_MODULE, $cmglossary->id); + $query->questiontext = game_filterglossary(str_replace( '\"', '"', $query->questiontext), $query->glossaryentryid, $contextglossary->id, $game->course); + } + + if( $game->param5){ + $s = trim( game_filtertext( $query->questiontext, $game->course)); + if( $s != '.' and $s <> ''){ + echo "
    ".$s.''; + } + if( $query->attachment != ''){ + $file = "{$CFG->wwwroot}/file.php/$game->course/moddata/$query->attachment"; + echo ""; + } + echo "

    "; + } + + $word_line = $word_line2 = ""; + + $len = textlib::strlen( $word); + + $done = 1; + $answer = ''; + $correct = 0; + for ($x=0; $x < $len; $x++) + { + $char = textlib::substr( $word, $x, 1); + + if( $showsolution){ + $word_line2 .= ( $char == " " ? '  ' : $char); + $done = 0; + } + + if ( textlib::strpos($letters, $char) === false){ + $word_line.="_ \r\n"; + $done = 0; + $answer .= '_'; + }else + { + $word_line .= ( $char == " " ? '  ' : $char); + $answer .= $char; + $correct++; + } + } + + $len_alpha = textlib::strlen($alpha); + $fontsize = 5; + + for ($c=0; $c < $len_alpha; $c++) + { + $char = textlib::substr( $alpha, $c, 1); + + if ( textlib::strpos($letters, $char) === false) + { + //User doesn't select this character + $params = 'id='.$id.'&newletter='.urlencode( $char); + if( $onlyshow or $showsolution){ + $links .= $char; + }else + { + $links .= "$char\r\n"; + } + continue; + } + + if ( textlib::strpos($word, $char) === false) + { + $links .= "\r\n$char "; + $wrong++; + }else + { + $links .= "\r\n$char "; + } + } + $finishedword = ($done or $wrong >= $max); + $finished = false; + + $updrec = new stdClass(); + $updrec->id = $hangman->id; + $updrec->letters = $letters; + if( $finishedword){ + if( $hangman->finishedword == 0){ + //only one time per word increace the variable try + $hangman->try = $hangman->try + 1; + if( $hangman->try > $hangman->maxtries){ + $finished = true; + } + if( $done){ + $hangman->corrects = $hangman->corrects + 1; + $updrec->corrects = $hangman->corrects; + } + } + + $updrec->try = $hangman->try; + $updrec->finishedword = 1; + + } + + $query->percent = ($correct -$wrong/$max) / textlib::strlen( $word); + if( $query->percent < 0){ + $query->percent = 0; + } + + if( $onlyshow or $showsolution){ + return; + } + + if( !$DB->update_record( 'game_hangman', $updrec)){ + print_error( "hangman_showpage: Can't update game_hangman id=$updrec->id"); + } + + if( $done){ + $score = 1; + }else if( $wrong >= $max){ + $score = 0; + }else + { + $score = -1; + } + + game_updateattempts( $game, $attempt, $score, $finished); + game_update_queries( $game, $attempt, $query, $score, $answer); +} + +//This word is correct. If reach the max number of words I have to finish else continue with next word +function hangman_oncorrect( $id, $word_line, $game, $attempt, $hangman, $query) +{ + global $DB; + + echo "

    \n$word_line\r\n"; + + echo '


    '.get_string( 'win', 'game').'

    '; + if( $query->answerid){ + $feedback = $DB->get_field( 'question_answers', 'feedback', array( 'id' => $query->answerid)); + if( $feedback != ''){ + echo "$feedback
    "; + } + } + + game_hangman_show_nextword( $id, $game, $attempt, $hangman); +} + +function hangman_onincorrect( $id, $word_line, $word, $game, $attempt, $hangman, $onlyshow, $showsolution) +{ + echo "\r\n

    \n$word_line\r\n"; + + if( $onlyshow or $showsolution) + return; + + echo '


    '.get_string( 'hangman_loose', 'game').'

    '; + + if( $game->param6){ + //show the correct answer + if( textlib::strpos($word, ' ') != false) + echo '
    '.get_string( 'hangman_correct_phrase', 'game'); + else + echo '
    '.get_string( 'hangman_correct_word', 'game'); + + echo ''.$word."

    \r\n"; + } + + game_hangman_show_nextword( $id, $game, $attempt, $hangman, true); +} + +function game_hangman_show_nextword( $id, $game, $attempt, $hangman) +{ + global $CFG, $DB; + + echo '
    '; + if( ($hangman->try < $hangman->maxtries) or ($hangman->maxtries == 0)){ + //continue to next word + $params = "id=$id&action2=nextword\">".get_string( 'nextword', 'game').'        '; + echo "wwwroot}/mod/game/attempt.php?$params"; + }else + { + game_hangman_onfinishgame( $game, $attempt, $hangman); + echo "wwwroot}/mod/game/attempt.php?id=$id\">".get_string( 'nextgame', 'game').'         '; + } + + if (! $cm = $DB->get_record('course_modules', array( 'id' => $id))) { + print_error( "Course Module ID was incorrect id=$id"); + } + + echo "wwwroot}/course/view.php?id=$cm->course\">".get_string( 'finish', 'game').' '; +} diff --git a/header.php b/header.php new file mode 100644 index 0000000..76eaf3e --- /dev/null +++ b/header.php @@ -0,0 +1,79 @@ +libdir.'/gradelib.php'); + require_once($CFG->dirroot.'/mod/game/locallib.php'); + require_once($CFG->libdir . '/completionlib.php'); + + $id = optional_param('id', 0, PARAM_INT); // Course Module ID, or + $q = optional_param('q', 0, PARAM_INT); // game ID + + if ($id) { + if (! $cm = get_coursemodule_from_id('game', $id)) { + print_error('invalidcoursemodule'); + } + if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + if (! $game = $DB->get_record('game', array('id' => $cm->instance))) { + print_error('invalidcoursemodule'); + } + } else { + if (! $game = $DB->get_record('game', array('id' => $q))) { + print_error('invalidgameid q='.$q, 'game'); + } + if (! $course = $DB->get_record('course', array('id' => $game->course))) { + print_error('invalidcourseid'); + } + if (! $cm = get_coursemodule_from_instance('game', $game->id, $course->id)) { + print_error('invalidcoursemodule'); + } + } + +/// Check login and get context. + require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/game:view', $context); + +/// Cache some other capabilites we use several times. + $canattempt = has_capability('mod/game:attempt', $context); + $canreviewmine = has_capability('mod/game:reviewmyattempts', $context); + +/// Create an object to manage all the other (non-roles) access rules. + $timenow = time(); + //$accessmanager = new game_access_manager(game::create($game->id, $USER->id), $timenow); + +/// If no questions have been set up yet redirect to edit.php + //if (!$game->questions && has_capability('mod/game:manage', $context)) { + // redirect($CFG->wwwroot . '/mod/game/edit.php?cmid=' . $cm->id); + //} + +/// Log this request. + add_to_log($course->id, 'game', 'view', "view.php?id=$cm->id", $game->id, $cm->id); + +/// Initialize $PAGE, compute blocks + $PAGE->set_url('/mod/game/view.php', array('id' => $cm->id)); + + $edit = optional_param('edit', -1, PARAM_BOOL); + if ($edit != -1 && $PAGE->user_allowed_editing()) { + $USER->editing = $edit; + } + + $PAGE->requires->yui2_lib('event'); + + // Note: MDL-19010 there will be further changes to printing header and blocks. + // The code will be much nicer than this eventually. + $title = $course->shortname . ': ' . format_string($game->name); + + if ($PAGE->user_allowed_editing() && !empty($CFG->showblocksonmodpages)) { + $buttons = '
    '. + ''. + ''. + '
    '; + $PAGE->set_button($buttons); + } + + $PAGE->set_title($title); + $PAGE->set_heading($course->fullname); + + echo $OUTPUT->header(); diff --git a/hiddenpicture/numbers.png b/hiddenpicture/numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab28f6f1ffa3645abfabcd8a9d04c6c57dfe16f GIT binary patch literal 6574 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 WFNFGWF1T|7k(XAH`YvJe@&5q-O2fDS literal 0 HcmV?d00001 diff --git a/hiddenpicture/picture.php b/hiddenpicture/picture.php new file mode 100644 index 0000000..efe0bc9 --- /dev/null +++ b/hiddenpicture/picture.php @@ -0,0 +1,107 @@ +get_file_by_hash( $filehash); + $image = $file->get_imageinfo(); + + if( $image === false){ + die("Aknown filehash $filehash"); + return false; + } + $img_handle = imagecreatefromstring($file->get_content()); + + $mime = $image[ 'mimetype']; + + $img_numbers = imageCreateFromPNG( $filenamenumbers); + $size_numbers = getimagesize ($filenamenumbers); + + Header ("Content-type: $mime"); + + $color = ImageColorAllocate ($img_handle, 100, 100, 100); + + $width = $image[ 'width']; + $height = $image[ 'height']; + $pos = 0; + + $font = 1; + + for($y = 0; $y < $rows; $y++){ + for( $x=0; $x < $cols; $x++){ + $pos++; + if( !array_key_exists( $pos, $found)){ + $x1 = $x * $width / $cols; + $y1 = $y * $height / $rows; + imagefilledrectangle( $img_handle, $x1, $y1, $x1 + $width / $cols, $y1 + $height / $rows, $color); + + if( array_key_exists( $pos, $cells)){ + shownumber( $img_handle, $img_numbers, $pos, $x1 , $y1, $width / $cols, $height / $rows, $size_numbers); + } + } + } + } + + switch( $mime){ + case 'image/png': + ImagePng ($img_handle); + break; + case 'image/jpeg': + ImageJpeg ($img_handle); + break; + case 'image/gif': + ImageGif ($img_handle); + break; + default: + die('Aknown mime type $mime'); + return false; + } + + ImageDestroy ($img_handle); +} + +function shownumber( $img_handle, $img_numbers, $number, $x1 , $y1, $width, $height, $size_numbers){ + if( $number < 10){ + $width_number = $size_numbers[ 0] / 10; + $dstX = $x1 + $width / 3; + $dstY = $y1 + $height / 3; + $srcX = $number * $size_numbers[ 0] / 10; + $srcW = $size_numbers[ 0]/10; + $srcH = $size_numbers[ 1]; + $dstW = $width / 10; + $dstH = $dstW * $srcH / $srcW; + imagecopyresized( $img_handle, $img_numbers, $dstX, $dstY, $srcX, 0, $dstW, $dstH, $srcW, $srcH); + }else + { + $number1 = floor( $number / 10); + $number2 = $number % 10; + shownumber( $img_handle, $img_numbers, $number1, $x1-$width/20, $y1, $width, $height, $size_numbers); + shownumber( $img_handle, $img_numbers, $number2, $x1+$width/20, $y1, $width, $height, $size_numbers); + } +} diff --git a/hiddenpicture/play.php b/hiddenpicture/play.php new file mode 100644 index 0000000..68994d7 --- /dev/null +++ b/hiddenpicture/play.php @@ -0,0 +1,482 @@ +param1; + $rows = $game->param2; + if( $cols == 0){ + print_error( get_string( 'hiddenpicture_nocols', 'game')); + } + if( $rows == 0){ + print_error( get_string( 'hiddenpicture_norows', 'game')); + } + + //new attempt + $n = $game->param1 * $game->param2; + $recs = game_questions_selectrandom( $game, CONST_GAME_TRIES_REPETITION*$n); + $selected_recs = game_select_from_repetitions( $game, $recs, $n); + + $newrec = game_hiddenpicture_selectglossaryentry( $game, $attempt); + + if( $recs === false){ + print_error( get_string( 'no_questions', 'game')); + } + + $positions = array(); + $pos=1; + for($col=0; $col < $cols; $col++){ + for( $row=0; $row < $rows; $row++){ + $positions[] = $pos++; + } + } + $i = 0; + $field = ($game->sourcemodule == 'glossary' ? 'glossaryentryid' : 'questionid'); + foreach( $recs as $rec) + { + if( $game->sourcemodule == 'glossary') + $key = $rec->glossaryentryid; + else + $key = $rec->questionid; + + if( !array_key_exists( $key, $selected_recs)) + continue; + + $query = new stdClass(); + $query->attemptid = $newrec->id; + $query->gamekind = $game->gamekind; + $query->gameid = $game->id; + $query->userid = $USER->id; + + $pos = array_rand( $positions); + $query->col = $positions[ $pos]; + unset( $positions[ $pos]); + + $query->sourcemodule = $game->sourcemodule; + $query->questionid = $rec->questionid; + $query->glossaryentryid = $rec->glossaryentryid; + $query->score = 0; + if( ($query->id = $DB->insert_record( 'game_queries', $query)) == 0){ + print_error( 'error inserting in game_queries'); + } + game_update_repetitions($game->id, $USER->id, $query->questionid, $query->glossaryentryid); + } + + //The score is zero + game_updateattempts( $game, $attempt, 0, 0); + + game_hiddenpicture_play( $id, $game, $attempt, $newrec, false, $context); +} + +//Create the game_hiddenpicture record +function game_hiddenpicture_selectglossaryentry( $game, $attempt){ + global $CFG, $DB, $USER; + + srand( (double)microtime()*1000000); + + if( $game->glossaryid2 == 0){ + print_error( get_string( 'must_select_glossary', 'game')); + } + $select = "ge.glossaryid={$game->glossaryid2}"; + $table = '{glossary_entries} ge'; + if( $game->glossarycategoryid2){ + $table .= ",{glossary_entries_categories} gec"; + $select .= " AND gec.entryid = ge.id AND gec.categoryid = {$game->glossarycategoryid2}"; + } + if( $game->param7 == 0){ + //Allow spaces + $select .= " AND concept NOT LIKE '% %'"; + } + + $sql = "SELECT ge.id,attachment FROM $table WHERE $select"; + if( ($recs=$DB->get_records_sql( $sql)) == false){ + $a->name = "'".$DB->get_field('glossary', 'name', array( 'id' => $game->glossaryid2))."'"; + print_error( get_string( 'hiddenpicture_nomainquestion', 'game', $a)); + return false; + } + $ids = array(); + $keys = array(); + $fs = get_file_storage(); + $cmg = get_coursemodule_from_instance('glossary', $game->glossaryid2, $game->course); + $context = get_context_instance(CONTEXT_MODULE, $cmg->id); + foreach( $recs as $rec){ + $files = $fs->get_area_files($context->id, 'mod_glossary', 'attachment', $rec->id, "timemodified", false); + if( $files) + { + foreach( $files as $key => $file) + { + $s = strtoupper( $file->get_filename()); + $s = substr( $s, -4); + if( $s == '.GIF' or $s == '.JPG' or $s == '.PNG'){ + $ids[] = $rec->id; + $keys[] = $file->get_pathnamehash(); + } + } + } + } + if( count( $ids) == 0){ + $a->name = "'".$DB->get_field( 'glossary', 'name', array( 'id' => $game->glossaryid2))."'"; + print_error( get_string( 'hiddenpicture_nomainquestion', 'game', $a)); + return false; + } + + //Have to select randomly one glossaryentry + $poss = array(); + for($i=0;$i $game->id, 'userid' => $USER->id, 'questionid' => 0, 'glossaryentryid' => $tempid); + if(($rec2 = $DB->get_record('game_repetitions', $a, 'id,repetitions r')) != false){ + if( ($rec2->r < $min_num) or ($min_num == 0)){ + $min_num = $rec2->r; + $glossaryentryid = $tempid; + $attachement = $keys[ $pos]; + } + } + else{ + $glossaryentryid = $tempid; + $attachement = $keys[ $pos]; + break; + } + } + + $sql = 'SELECT id, concept as answertext, definition as questiontext, id as glossaryentryid, 0 as questionid, glossaryid, attachment'. + ' FROM {glossary_entries} WHERE id = '.$glossaryentryid; + if( ($rec = $DB->get_record_sql( $sql)) == false) + return false; + + $query = new stdClass(); + $query->attemptid = $attempt->id; + $query->gamekind = $game->gamekind; + $query->gameid = $game->id; + $query->userid = $USER->id; + + $query->col = 0; + $query->sourcemodule = 'glossary'; + $query->questionid = 0; + $query->glossaryentryid = $rec->glossaryentryid; + $query->attachment = $attachement; + $query->questiontext = $rec->questiontext; + $query->answertext = $rec->answertext; + $query->score = 0; + if( ($query->id = $DB->insert_record( 'game_queries', $query)) == 0){ + print_error( 'Error inserting in game_queries'); + } + $newrec = new stdClass(); + $newrec->id = $attempt->id; + $newrec->correct = 0; + if( !game_insert_record( 'game_hiddenpicture', $newrec)){ + print_error( 'Error inserting in game_hiddenpicture'); + } + + game_update_repetitions($game->id, $USER->id, $query->questionid, $query->glossaryentryid); + + return $newrec; +} + +function game_hiddenpicture_play( $id, $game, $attempt, $hiddenpicture, $showsolution, $context) +{ + if( $game->toptext != ''){ + echo $game->toptext.'
    '; + } + + //Show picture + $offsetquestions = game_sudoku_compute_offsetquestions( $game->sourcemodule, $attempt, $numbers, $correctquestions); + unset( $offsetquestions[ 0]); + + game_hiddenpicture_showhiddenpicture( $id, $game, $attempt, $hiddenpicture, $showsolution, $offsetquestions, $correctquestions, $id, $attempt, $showsolution); + + //Show questions + $onlyshow = false; + $showsolution = false; + + switch( $game->sourcemodule) + { + case 'quiz': + case 'question': + game_sudoku_showquestions_quiz( $id, $game, $attempt, $hiddenpicture, $offsetquestions, $numbers, $correctquestions, $onlyshow, $showsolution, $context); + break; + case 'glossary': + game_sudoku_showquestions_glossary( $id, $game, $attempt, $hiddenpicture, $offsetquestions, $numbers, $correctquestions, $onlyshow, $showsolution); + break; + } + + if( $game->bottomtext != ''){ + echo '

    '.$game->bottomtext; + } +} + +function game_hidden_picture_computescore( $game, $hiddenpicture){ + $correct = $hiddenpicture->correct; + if( $hiddenpicture->found){ + $correct++; + } + $remaining = $game->param1 * $game->param2 - $hiddenpicture->correct; + $div2 = $correct + $hiddenpicture->wrong + $remaining; + if( $hiddenpicture->found){ + $percent = ($correct + $remaining) / $div2; + }else{ + $percent = $correct / $div2; + } + + return $percent; +} + +function game_hiddenpicture_showhiddenpicture( $id, $game, $attempt, $hiddenpicture, $showsolution, $offsetquestions, $correctquestions){ + global $DB; + + $foundcells=''; + foreach( $correctquestions as $key => $val){ + $foundcells .= ','.$key; + } + $cells=''; + foreach( $offsetquestions as $key => $val){ + if( $key != 0){ + $cells .= ','.$key; + } + } + + $query = $DB->get_record_select( 'game_queries', "attemptid=$hiddenpicture->id AND col=0", null, 'id,glossaryentryid,attachment,questiontext'); + + //Grade + echo "
    ".get_string( 'grade', 'game').' : '.round( $attempt->score * 100).' %'; + + game_hiddenpicture_showquestion_glossary( $id, $query); + + $cells = substr( $cells, 1); + $foundcells = substr( $foundcells, 1); + game_showpicture( $id, $game, $attempt, $query, $cells, $foundcells, true); +} + +function game_hiddenpicture_showquestion_glossary( $id, $query) +{ + global $CFG, $DB; + + $entry = $DB->get_record( 'glossary_entries', array( 'id' => $query->glossaryentryid)); + + /// Start the form + echo '
    '; + echo "
    wwwroot}/mod/game/attempt.php\" onclick=\"this.autocomplete='off'\">\n"; + echo "
    \n"; + + // Add a hidden field with the queryid + echo '\n"; + echo ''; + echo '\n"; + + // Add a hidden field with glossaryentryid + echo '\n"; + + echo game_filtertext( $entry->definition, 0).'
    '; + + echo get_string( 'answer').': '; + echo "
    "; + + echo "

    \n"; +} + +function game_hiddenpicture_check_questions( $id, $game, &$attempt, &$hiddenpicture, $finishattempt) +{ + global $QTYPES, $DB; + + $responses = data_submitted(); + + $offsetquestions = game_sudoku_compute_offsetquestions( $game->sourcemodule, $attempt, $numbers, $correctquestions); + + $questionlist = game_sudoku_getquestionlist( $offsetquestions); + + $questions = game_sudoku_getquestions( $questionlist); + + $actions = question_extract_responses($questions, $responses, QUESTION_EVENTSUBMIT); + + $correct = $wrong = 0; + foreach($questions as $question) { + if( !array_key_exists( $question->id, $actions)){ + //no answered + continue; + } + unset( $state); + unset( $cmoptions); + $question->maxgrade = 100; + $state->responses = $actions[ $question->id]->responses; + $state->event = QUESTION_EVENTGRADE; + + $cmoptions = array(); + $QTYPES[$question->qtype]->grade_responses( $question, $state, $cmoptions); + + unset( $query); + + $select = "attemptid=$attempt->id"; + $select .= " AND questionid=$question->id"; + if( ($query->id = $DB->get_field_select( 'game_queries', 'id', $select)) == 0){ + print_error("problem game_hiddenpicture_check_questions (select=$select)"); + } + + $answertext = $state->responses[ '']; + if( $answertext != ''){ + $grade = $state->raw_grade; + if( $grade < 50){ + //wrong answer + game_update_queries( $game, $attempt, $query, $grade/100, $answertext); + $wrong++; + }else{ + //correct answer + game_update_queries( $game, $attempt, $query, 1, $answertext); + $correct++; + } + } + } + + $hiddenpicture->correct += $correct; + $hiddenpicture->wrong += $wrong; + + if( !$DB->update_record( 'game_hiddenpicture', $hiddenpicture)){ + print_error( 'game_hiddenpicture_check_questions: error updating in game_hiddenpicture'); + } + + $attempt->score = game_hidden_picture_computescore( $game, $hiddenpicture); + if( !$DB->update_record( 'game_attempts', $attempt)){ + print_error( 'game_hiddenpicture_check_questions: error updating in game_attempt'); + } + + game_sudoku_check_last( $id, $game, $attempt, $hiddenpicture, $finishattempt); + + return true; +} + +function game_hiddenpicture_check_mainquestion( $id, $game, &$attempt, &$hiddenpicture, $finishattempt) +{ + global $QTYPES, $CFG, $DB; + + $responses = data_submitted(); + + $glossaryentryid = $responses->glossaryentryid; + $queryid = $responses->queryid; + + // Load the glossary entry + if (!($entry = $DB->get_record( 'glossary_entries', array( 'id' => $glossaryentryid)))) { + print_error( get_string( 'noglossaryentriesfound', 'game')); + } + $answer = $responses->answer; + $correct = false; + if( $answer != ''){ + if( game_upper( $entry->concept) == game_upper( $answer)){ + $correct = true; + } + } + + // Load the query + if (!($query = $DB->get_record( 'game_queries', array( 'id' => $queryid)))) { + print_error( "The query $queryid not found"); + } + + game_update_queries( $game, $attempt, $query, $correct, $answer); + + if( $correct){ + $hiddenpicture->found = 1; + }else{ + $hiddenpicture->wrong++; + } + if( !$DB->update_record( 'game_hiddenpicture', $hiddenpicture)){ + print_error( 'game_hiddenpicture_check_mainquestion: error updating in game_hiddenpicture'); + } + + $score = game_hidden_picture_computescore( $game, $hiddenpicture); + game_updateattempts( $game, $attempt, $score, $correct); + + if( $correct == false){ + game_hiddenpicture_play( $id, $game, $attempt, $hiddenpicture, false, $context); + return true; + } + + //Finish the game + $query = $DB->get_record_select( 'game_queries', "attemptid=$hiddenpicture->id AND col=0", null, 'id,glossaryentryid,attachment,questiontext'); + game_showpicture( $id, $game, $attempt, $query, '', '', false); + echo '


    '.get_string( 'win', 'game').'

    '; + global $CFG; + + echo '
    '; + + echo "wwwroot/mod/game/attempt.php?id=$id\">"; + echo get_string( 'nextgame', 'game').'        '; + + if (! $cm = $DB->get_record( 'course_modules', array( 'id' => $id))) { + print_error( "Course Module ID was incorrect id=$id"); + } + + echo "wwwroot}/course/view.php?id=$cm->course\">".get_string( 'finish', 'game').' '; + + return false; +} + +function game_showpicture( $id, $game, $attempt, $query, $cells, $foundcells, $usemap) +{ + global $CFG; + + $filenamenumbers = str_replace( "\\", '/', $CFG->dirroot)."/mod/game/hiddenpicture/numbers.png"; + if( $usemap){ + $cols = $game->param1; + $rows = $game->param2; + }else{ + $cols = $rows = 0; + } + $params = "id=$id&id2=$attempt->id&f=$foundcells&cols=$cols&rows=$rows&cells=$cells&p={$query->attachment}&n=$filenamenumbers"; + $imagesrc = "hiddenpicture/picture.php?$params"; + + $fs = get_file_storage(); + $file = get_file_storage()->get_file_by_hash( $query->attachment); + $image = $file->get_imageinfo(); + if( $game->param4 > 10){ + $width = $game->param4; + $height = $image[ 'height'] * $width / $image[ 'width']; + }else if( $game->param5 > 10){ + $height = $game->param5; + $width = $image[ 'width'] * $height / $image[ 'height']; + }else + { + $width = $image[ 'width']; + $height = $image[ 'height']; + } + + echo "\r\n"; + + if( $usemap){ + echo "\r\n"; + $pos=0; + for($row=0; $row < $rows; $row++){ + for( $col=0; $col < $cols; $col++){ + $pos++; + $x1 = $col * $width / $cols; + $y1 = $row * $height / $rows; + $x2 = $x1 + $width / $cols; + $y2 = $y1 + $height / $rows; + $q = "a$pos"; + echo "\"$pos\"\r\n"; + } + } + echo ""; + } +} diff --git a/images/soundplay.gif b/images/soundplay.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f156b0477ecf30703e502095aaf7b15792165df GIT binary patch literal 449 zcmV;y0Y3gmNk%w1VJHA70J8u9?0+Ncj4}9*Aor9p|C}xNlsWU5J^P?N@0?Qqr$_s) zT>QwC|L4a4>(u}M|NsC0A^8LW000jFEC2ui04M+`000F3@JU6hy*OjZRnnlgG*)7A zpZSIC;*e_mEOE?cuEW&oavZ$is?>8Bcd?&RDQw1aN7ZsVb@HG`s&)%(VzXL;m`gr< z!AkL9y&jjBXRw+rCa?$fa{Oqg*V}VYmJzg1ACL5 ziJ737oSujbp^N~aqojtWp#ZS3je7tMtVfu!y1TTtw+y?%yhaNKur9R>0kFz03js&M z(f~Qn4Zsbx3k(hm2*nQH(bK`z3Pu6g3<|Ia4%D^d!U6R40oBmJ@7XR0?g|0i9kEBS z;5}l-sO@710D%D=3I`gTXzo@w0Ed)KG+2?(bWc#CNR!4nD%60}r%yra?6;tt5*YC rk9-|_HLTUE#mHvedRFR!2Wq==Ya5kA+_iL{a*%KrYg(urA^-q8oT}9+ literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000..c77964e --- /dev/null +++ b/index.php @@ -0,0 +1,96 @@ +get_record( 'course', array( 'id' => $id))) { + print_error( 'Course ID is incorrect'); + } + + require_login($course->id); + + add_to_log($course->id, 'game', 'view all', "index.php?id=$course->id", ""); + + +/// Get all required strings game + + $strgames = get_string( 'modulenameplural', 'game'); + $strgame = get_string('modulename', 'game'); + + +/// Print the header +$PAGE->set_url('/mod/game/index.php', array('id'=>$id)); +$coursecontext = get_context_instance(CONTEXT_COURSE, $id); +$PAGE->set_pagelayout('incourse'); + +add_to_log($course->id, "game", "view all", "index.php?id=$course->id", ""); + +// Print the header. +$strgames = get_string("modulenameplural", "game"); +$streditquestions = ''; +$editqcontexts = new question_edit_contexts($coursecontext); +$PAGE->navbar->add($strgames); +$PAGE->set_title($strgames); +$PAGE->set_heading($course->fullname); +echo $OUTPUT->header(); + +/// Get all the appropriate data + + if (! $games = get_all_instances_in_course("game", $course)) { + notice("There are no games", "../../course/view.php?id=$course->id"); + die; + } + +/// Print the list of instances (your module will probably extend this) + + $timenow = time(); + $strname = get_string("name"); + $strweek = get_string("week"); + $strtopic = get_string("topic"); + + if ($course->format == "weeks") { + $table->head = array ($strweek, $strname); + $table->align = array ("center", "left"); + } else if ($course->format == "topics") { + $table->head = array ($strtopic, $strname); + $table->align = array ("center", "left", "left", "left"); + } else { + $table->head = array ($strname); + $table->align = array ("left", "left", "left"); + } + + foreach ($games as $game) { + if (!$game->visible) { + //Show dimmed if the mod is hidden + $link = "coursemodule\">$game->name"; + } else { + //Show normal if the mod is visible + $link = "coursemodule\">$game->name"; + } + + if ($course->format == "weeks" or $course->format == "topics") { + $table->data[] = array ($game->section, $link); + } else { + $table->data[] = array ($link); + } + } + + echo "
    "; + + print_table($table); + +/// Finish the page + + echo $OUTPUT->footer($course); + +?> diff --git a/lang/ca/game.php b/lang/ca/game.php new file mode 100644 index 0000000..66c515a --- /dev/null +++ b/lang/ca/game.php @@ -0,0 +1,305 @@ +¡Benvingut!

    Fes clic en una paraula per començar.

    '; +$string[ 'letter'] = 'lletra'; +$string[ 'letters'] = 'lletres'; +$string[ 'nextgame'] = 'Següent joc'; +$string[ 'no_words'] = 'Cap paraula trobada'; +$string[ 'print'] = 'Imprimir'; + +//cryptex/play.php +$string[ 'finish'] = 'Fi del joc'; + +//db/access.php +$string[ 'game:attempt'] = 'Juga el joc'; +$string[ 'game:deleteattempts'] = 'Esborrar intents'; +$string[ 'game:manage'] = 'Administrar'; +$string[ 'game:reviewmyattempts'] = 'Revisar els meus intents'; +$string[ 'game:view'] = 'Veure'; +$string[ 'game:viewreports'] = 'Veure informes'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'La frase correcta era: '; +$string[ 'hangman_correct_word'] = 'La paraula correcta era: '; +$string[ 'hangman_gradeinstance'] = 'Nivell en el joc complet'; +$string[ 'hangman_letters'] = 'Lletres: '; +$string[ 'hangman_restletters_many'] = 'Vd. té $a intents'; +$string[ 'hangman_restletters_one'] = 'Vd. té ÚNICAMENT 1 intent'; +$string[ 'hangman_wrongnum'] = 'Dolentes: %%d de %%d'; +$string[ 'nextword'] = 'Següent paraula'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Qualificació de la pregunta principal'; +$string[ 'hiddenpicture_nocols'] = 'Cal especificar el nombre de fileres horitzontals'; +$string[ 'hiddenpicture_nomainquestion'] = 'No hi ha entrades en el glossari $a->name amb una imatge annexada'; +$string[ 'hiddenpicture_norows'] = 'Cal especificar el nombre de columnes verticals'; +$string[ 'must_select_glossary'] = 'Vd ha de seleccionar un glossari'; +$string[ 'noglossaryentriesfound'] = 'No hi ha entrades de glossari'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Cal seleccionar una categoria de preguntes'; +$string[ 'millionaire_must_select_quiz'] = 'Cal seleccionar un qüestionari'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Mostrar tots els intents'; +$string[ 'allstudents'] = 'Mostrar tots $a'; +$string[ 'attemptsonly'] = 'Mostrar únicament estudiants amb intents'; +$string[ 'deleteattemptcheck'] = 'Està absolutament segur de voler esborrar completament aquests intents?'; +$string[ 'displayoptions'] = 'Mostrar opcions'; +$string[ 'downloadods'] = 'Descarregar en format ODS'; +$string[ 'feedback'] = 'Retroalimentació'; +$string[ 'noattemptsonly'] = 'Mostrar $a únicament sense intents'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring ha fet $a->attemptnum intents'; +$string[ 'pagesize'] = 'Preguntes per pàgina:'; +$string[ 'reportoverview'] = 'Llistat'; +$string[ 'selectall'] = 'Seleccionar tots'; +$string[ 'selectnone'] = 'Desmarcar tots'; +$string[ 'showdetailedmarks'] = 'Mostrar detalls de marca'; +$string[ 'startedon'] = 'Començà en'; +$string[ 'timecompleted'] = 'Completat'; +$string[ 'unfinished'] = 'obert'; +$string[ 'withselected'] = 'Amb seleccionats'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Nombre de sudokus que seran creats'; +$string[ 'sudoku_create_start'] = 'Començar creant sudokus'; +$string[ 'sudoku_creating'] = 'Creant $a sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Fi del joc de sudoku'; +$string[ 'sudoku_guessnumber'] = 'Endevini el nombre correcte'; +$string[ 'sudoku_noentriesfound'] = 'Cap paraula trobada al glossari'; + +//export.php +$string[ 'export'] = 'Exporta a mòbil'; +$string[ 'html_hascheckbutton'] = 'Botó de prova:'; +$string[ 'html_hasprintbutton'] = 'Botó impresió:'; +$string[ 'html_title'] = 'Títol d\'html:'; +$string[ 'javame_createdby'] = 'Creat per:'; +$string[ 'javame_description'] = 'Descripció:'; +$string[ 'javame_filename'] = 'Nom de l\'arxiu:'; +$string[ 'javame_icon'] = 'Icona:'; +$string[ 'javame_maxpictureheight'] = 'Alçada màxima de la imatge:'; +$string[ 'javame_maxpicturewidth'] = 'Amplada màxima de la imatge:'; +$string[ 'javame_name'] = 'Nom:'; +$string[ 'javame_type'] = 'Tipus:'; +$string[ 'javame_vendor'] = 'Venedor:'; +$string[ 'javame_version'] = 'Versió'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Fí del joc'; +$string[ 'html_hangman_new'] = 'Nou'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Ajut del públic'; +$string[ 'millionaire_info_people'] = 'La gent diu'; +$string[ 'millionaire_info_telephone'] = 'Jo penso que la resposta correcta és'; +$string[ 'millionaire_info_wrong_answer'] = 'La seva resposta és incorrecta
    La resposta correcta és:'; +$string[ 'millionaire_quit'] = 'Sortir'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Pel millonari la font és $a o preguntes i no'; +$string[ 'millionaire_telephone'] = 'Trucada telefònica'; +$string[ 'must_select_questioncategory'] = 'Cal seleccionar una categoria de preguntes'; +$string[ 'must_select_quiz'] = 'Cal seleccionar un qüestionari'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Punts'; + +//index.php +$string[ 'modulename'] = 'Joc'; +$string[ 'modulenameplural'] = 'Jocs'; +$string[ 'pluginname'] = 'Joc'; + +//lib.php +$string[ 'attempt'] = 'Intent $a'; +$string[ 'bookquiz_questions'] = 'Associa categories de preguntes amb capítuls del llibre'; +$string[ 'export_to_html'] = 'Exportar a HTML'; +$string[ 'export_to_javame'] = 'Exportar a Javame'; +$string[ 'game_bookquiz'] = 'Llibre amb preguntes'; +$string[ 'game_cross'] = 'Mots encreuats'; +$string[ 'game_cryptex'] = 'Sopa de Lletres'; +$string[ 'game_hangman'] = 'Penjat'; +$string[ 'game_hiddenpicture'] = 'Imatge amagada'; +$string[ 'game_millionaire'] = 'Millionari'; +$string[ 'game_snakes'] = 'Serps i Escales'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'No s\'ha fet cap intent en aquest qüestionari'; +$string[ 'percent'] = 'Percentatge'; +$string[ 'results'] = 'Resultats'; +$string[ 'showanswers'] = 'Mostrar respostes'; +$string[ 'showattempts'] = 'Mostrar els intents'; + +//locallib.php +$string[ 'attemptfirst'] = 'Primer intent'; +$string[ 'attemptlast'] = 'Darrer intent'; +$string[ 'gradeaverage'] = 'Nota promig'; +$string[ 'gradehighest'] = 'Nota més alta'; + +//mod_form.php +$string[ 'bottomtext'] = 'Text al final'; +$string[ 'cross_layout'] = 'Disseny'; +$string[ 'cross_layout0'] = 'Frases a la part inferior dels mots encreuats'; +$string[ 'cross_layout1'] = 'Frases a la part dreta dels mots encreuats'; +$string[ 'cross_maxcols'] = 'Nombre màxim de columnes dels mots encreuats'; +$string[ 'cross_maxwords'] = 'Màxim nombre de paraules dels mots encreuats'; +$string[ 'cross_options'] = 'Opcions dels Mots encreuats'; +$string[ 'cryptex_maxcols'] = 'Máxim nombre de columnes/fileres en la Sopa de Lletres'; +$string[ 'cryptex_maxtries'] = 'Nombre màxim d\'intents'; +$string[ 'cryptex_maxwords'] = 'Màxim nombre de paraules en Sopa de Lletres'; +$string[ 'cryptex_options'] = 'Opcions del Criptograma'; +$string[ 'grademethod'] = 'Mètode de qüalificació'; +$string[ 'hangman_allowspaces'] = 'Permetre espais en les paraules'; +$string[ 'hangman_allowsub'] = 'Permetre símbols en las paraules'; +$string[ 'hangman_imageset'] = 'Seleccioni les imatges pel penjat'; +$string[ 'hangman_language'] = 'Idioma de les paraules'; +$string[ 'hangman_maxtries'] = 'Nombre de paraules per joc'; +$string[ 'hangman_options'] = 'Opcions del Penjat'; +$string[ 'hangman_showcorrectanswer'] = 'Mostrar la resposta correcta després del final'; +$string[ 'hangman_showfirst'] = 'Mostrar la primera lletra del penjat'; +$string[ 'hangman_showlast'] = 'Mostrar la darrera lletra del penjat'; +$string[ 'hangman_showquestion'] = '¿ Mostrar les preguntes ?'; +$string[ 'hiddenpicture_across'] = 'Caselles horizontals'; +$string[ 'hiddenpicture_down'] = 'Caselles verticals'; +$string[ 'hiddenpicture_height'] = 'Establir l\'alçada de la imatge en'; +$string[ 'hiddenpicture_options'] = '\'Imatge Amagada\' opcions'; +$string[ 'hiddenpicture_pictureglossary'] = 'El glossari per la qüestió principal'; +$string[ 'hiddenpicture_width'] = 'Establir l\'amplada de la imatge en'; +$string[ 'millionaire_background'] = 'Color de fons'; +$string[ 'millionaire_options'] = 'Opcions del Millionari'; +$string[ 'millionaire_shuffle'] = 'Barrejar preguntes'; +$string[ 'snakes_background'] = 'Fons'; +$string[ 'snakes_cols'] = 'Columnes'; +$string[ 'snakes_footerx'] = 'Espai inferior esquerre'; +$string[ 'snakes_footery'] = 'Espai inferior dret'; +$string[ 'snakes_headerx'] = 'Espai superior esquerre'; +$string[ 'snakes_headery'] = 'Espai superior dret'; +$string[ 'snakes_options'] = '\'Serps i Escales\' opcions'; +$string[ 'snakes_rows'] = 'Fileres'; +$string[ 'sourcemodule'] = 'Font de preguntes'; +$string[ 'sourcemodule_book'] = 'Seleccioni un llibre'; +$string[ 'sourcemodule_glossary'] = 'Seleccioni un glossari'; +$string[ 'sourcemodule_glossarycategory'] = 'Seleccioni una categoria del glossario.'; +$string[ 'sourcemodule_include_subcategories'] = 'Incloure subcategories'; +$string[ 'sourcemodule_question'] = 'Preguntes'; +$string[ 'sourcemodule_questioncategory'] = 'Seleccioni una categoria de preguntas'; +$string[ 'sourcemodule_quiz'] = 'Seleccioni un qüestionari'; +$string[ 'sudoku_maxquestions'] = 'Máxim nombre de preguntes'; +$string[ 'sudoku_options'] = 'Opcions del Sudoku'; +$string[ 'toptext'] = 'Text de la part superior'; +$string[ 'userdefined'] = 'Definit per l\'usuari'; + +//preview.php +$string[ 'only_teachers'] = 'Només el professor pot veure aquesta pàgina'; +$string[ 'preview'] = 'Visualitzar'; + +//review.php +$string[ 'attempts'] = 'Intents'; +$string[ 'completedon'] = 'Completat en'; +$string[ 'outof'] = '$a->grade de un màxim de $a->maxgrade'; +$string[ 'review'] = 'Revisar'; +$string[ 'reviewofattempt'] = 'Revisar intents $a'; +$string[ 'startagain'] = 'Començar de nou'; +$string[ 'timetaken'] = 'Temps utilitzat'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Esborrar estadístiques'; +$string[ 'computerepetitions'] = 'Recalcular estadístiques'; +$string[ 'feedbacks'] = 'Missatges de resposta correcta'; +$string[ 'repetitions'] = 'Repeticions'; + +//showattempts.php +$string[ 'lastip'] = 'IP de l\'estudiant'; +$string[ 'showsolution'] = 'solució'; +$string[ 'timefinish'] = 'Fi del joc'; +$string[ 'timelastattempt'] = 'Darrer intent'; +$string[ 'timestart'] = 'Començament'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Intentar jugar ara'; +$string[ 'continueattemptgame'] = 'Continueu un intent previ de joc'; +$string[ 'reattemptgame'] = 'Joc de reintent'; +$string[ 'yourfinalgradeis'] = 'La seva nota fina en aquest joc és $a.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/play.php $string[ 'win'] = 'Congratulations !!!'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//review.php $string[ 'showall'] = 'Show all'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/de/game.php b/lang/de/game.php new file mode 100644 index 0000000..5ead87c --- /dev/null +++ b/lang/de/game.php @@ -0,0 +1,304 @@ +Willkommen zum Kreuzworträtsel!

    Klicken Sie links auf eine Wortlücke um zu beginnen.

    '; +$string[ 'letter'] = 'Buchstabe'; +$string[ 'letters'] = 'Buchstaben'; +$string[ 'nextgame'] = 'Neues Spiel'; +$string[ 'no_words'] = 'Keine Wörter gefunden!'; +$string[ 'print'] = 'Drucken'; +$string[ 'win'] = 'Glückwunsch, Sie haben gewonnen !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Spiel beenden'; + +//db/access.php +$string[ 'game:attempt'] = 'Spiel starten'; +$string[ 'game:deleteattempts'] = 'Versuche löschen'; +$string[ 'game:grade'] = 'Spiele manuell bewerten'; +$string[ 'game:manage'] = 'Verwalten'; +$string[ 'game:manageoverrides'] = 'Manage game overrides'; +$string[ 'game:preview'] = 'Vorschau der Spiele'; +$string[ 'game:reviewmyattempts'] = 'Meine Versuche wiederholen'; +$string[ 'game:view'] = 'ansehen'; +$string[ 'game:viewreports'] = 'Berichte ansehen'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Der richtige Satz war: '; +$string[ 'hangman_correct_word'] = 'Das richtige Wort war: '; +$string[ 'hangman_gradeinstance'] = 'Bewertung des gesamten Spiels'; +$string[ 'hangman_letters'] = 'Buchstaben: '; +$string[ 'hangman_restletters_many'] = 'Sie haben {$a} Versuche'; +$string[ 'hangman_restletters_one'] = 'Sie haben ONLY 1 Versuche'; +$string[ 'hangman_wrongnum'] = 'Falsch: %d von %d'; +$string[ 'nextword'] = 'nächstes Wort'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Meine Antwort bewerten'; +$string[ 'hiddenpicture_nocols'] = 'Die Anzahl der horizontalen Spalten muss angegeben werden'; +$string[ 'hiddenpicture_nomainquestion'] = 'Es gibt keine Wörterbucheinträge im Wörterbuch {$a->name} mit angefügtem Bild'; +$string[ 'hiddenpicture_norows'] = 'Die Anzahl der vertikalen Spalten muss angegeben werden.'; +$string[ 'must_select_glossary'] = 'Wähle ein Glossar'; +$string[ 'no_questions'] = 'Es sind keine Fragen vorhanden'; +$string[ 'noglossaryentriesfound'] = 'Keine Wörterbucheinträge gefunden'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Sie müssen eine Kategorie wählen'; +$string[ 'millionaire_must_select_quiz'] = 'Sie müssen ein Quiz wählen'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Zeige alle Versuche'; +$string[ 'allstudents'] = 'Alle anzeigen $a'; +$string[ 'attemptduration'] = 'Benötigte Zeit'; +$string[ 'attemptsonly'] = 'Nur Teilnehmer mit Versuchen zeigen'; +$string[ 'deleteattemptcheck'] = 'Sind Sie sicher, dass Sie diese(n) Versuch(e) löschen wollen?'; +$string[ 'displayoptions'] = 'Anzeige-Optionen'; +$string[ 'downloadods'] = 'Download im ODS-Format'; +$string[ 'feedback'] = 'Rückmeldung'; +$string[ 'noattemptsonly'] = 'Nur $a ohne Versuche anzeigen'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring absolvierte(n) $a->attemptnum Versuch(e)'; +$string[ 'pagesize'] = 'Fragen pro Seite:'; +$string[ 'reportoverview'] = 'Überblick'; +$string[ 'selectall'] = 'Alle auswählen'; +$string[ 'selectnone'] = 'Alle abwählen'; +$string[ 'showdetailedmarks'] = 'Bewertungsdetails anzeigen'; +$string[ 'startedon'] = 'Gestartet am'; +$string[ 'timecompleted'] = 'Abgeschlossen'; +$string[ 'unfinished'] = 'offen'; +$string[ 'withselected'] = 'ausgewählte'; + +//snakes/play.php +$string[ 'snakes_dice'] = 'Würfle, {$a} Augen.'; +$string[ 'snakes_player'] = 'Spieler, Position: $a.'; + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Anzahl der Sudokus, die erstellt werden'; +$string[ 'sudoku_create_start'] = 'Beginne mit dem Erstellen'; +$string[ 'sudoku_creating'] = 'Erstelle {$a} Sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Ende des Sudoku Spiels'; +$string[ 'sudoku_guessnumber'] = 'Die richtige Nummer erraten'; +$string[ 'sudoku_noentriesfound'] = 'Keine Wörter im Wörterbuch gefunden!'; + +//export.php +$string[ 'export'] = 'Export'; +$string[ 'html_hascheckbutton'] = 'Prüftaste:'; +$string[ 'html_hasprintbutton'] = 'Drucktaste:'; +$string[ 'html_title'] = 'Titel der html-Datei (Browser-Titelzeile):'; +$string[ 'javame_createdby'] = 'Erstellt von:'; +$string[ 'javame_description'] = 'Beschreibung:'; +$string[ 'javame_filename'] = 'Dateiname:'; +$string[ 'javame_icon'] = 'Icon:'; +$string[ 'javame_maxpictureheight'] = 'Größte Bildhöhe:'; +$string[ 'javame_maxpicturewidth'] = 'Größte Bildbreite:'; +$string[ 'javame_name'] = 'Name:'; +$string[ 'javame_type'] = 'Typ:'; +$string[ 'javame_vendor'] = 'Anbieter:'; +$string[ 'javame_version'] = 'Version:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Sie haben verloren!'; +$string[ 'html_hangman_new'] = 'Neu'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Publikums-Joker'; +$string[ 'millionaire_info_people'] = 'Ergebnis'; +$string[ 'millionaire_info_telephone'] = 'Ich glaube, die richtige Antwort ist'; +$string[ 'millionaire_info_wrong_answer'] = 'Ihre Antwort ist falsch!
    Die richtige Antwort ist:'; +$string[ 'millionaire_quit'] = 'Spiel beenden'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Für Wer wird Millionär: die Quelle der Fragen muss {$a} oder Fragen sein, und nicht'; +$string[ 'millionaire_telephone'] = 'Telefon-Joker'; +$string[ 'must_select_questioncategory'] = 'Sie müssen eine Fragenkategorie wählen!'; +$string[ 'must_select_quiz'] = 'Sie müssen einen Test auswählen'; + +//exporthtml_snakes.php +$string[ 'html_snakes_check'] = 'Wähle'; +$string[ 'html_snakes_correct'] = 'Richtig!'; +$string[ 'html_snakes_no_selection'] = 'Bitte wählen Sie etwas aus!'; +$string[ 'html_snakes_wrong'] = 'Ihre Antwort ist falsch. Sie bleiben auf dem gleichen Feld.'; +$string[ 'score'] = 'Bewertung'; + +//index.php +$string[ 'helpbookquiz'] = 'Nach korrekter Beantwortung der Frage kann das nächste Kapitel geöffnet werden.'; +$string[ 'helpcross'] = 'Dieses Spiel verwendet Wörter aus Glossaren oder Kurzantwort-Fragen aus Tests zur Generierung eines Kreuzworträtsels. Sie können die maximalen Zeilen und Spalten einstellen. Die Teilnehmenden können zum Überprüfen ihrer Antworten auf "Kreuzworträtsel kontrollieren" klicken. Die Rätsel werden dynamisch generiert und sehen dadurch bei jedem Versuch anders aus.'; +$string[ 'helpcryptex'] = 'Bei diesem Spiel werden wie bei einen Kreuzworträtsel die Umschreibungen der gesuchten Wörter angegeben. Die Wörter sind aber bereits in einem Gitter versteckt waagrecht oder senkrecht angeordnet. Bei jedem neuen Versuch werden die Wörter wieder anders angeordnet.'; +$string[ 'helphangman'] = 'Dieses Spiel verwendet Wörter aus Glossaren oder Kurzantwort-Fragen aus Tests als Begriffe für Galgenmännchen. Sie können die Anzahl der Wörter des Spiels einstellen, ob der erste oder letzte Buchstabe angezeigt werden soll und, ob die Frage oder Antwort am Ende angezeigt werden soll.'; +$string[ 'helphiddenpicture'] = 'Mit jeder richtigen Antwort wird ein Stück eines verdeckten Bildes enthüllt. Mit jeder Zahl auf dem Bild ist eine Frage verknüpft. Nach richtiger Beantwortung der Frage wird der entsprechende Bereich des Bildes sichtbar.'; +$string[ 'helpmillionaire'] = 'In dieser Simulation des bekannten "Wer wird Millionär?" Spiels können solange neue Fragen beantwortet werden bis die Antwort falsch ist. Mit jeder richtigen Antwort steigt der virtuell erspielte Betrag. Genau wie im Original stehen drei Joker zur Verfügung. Als Quelle dienen Multiple Choice Fragen mit vier möglichen Antworten, von denen eine korrekt ist.'; +$string[ 'helpsnakes'] = 'Durch richtiges Beantworten der Fragen im Leiterspiel kann um die durch den Würfel angezeigte Zahl vorgerückt werden. Endet der Zug auf dem Anfangsfeld einer Leiter, wird auf deren Endfeld vorgerückt. Endet er auf einer Schlange, wird auf deren Endfeld zurück gerückt, das näher am Start liegt.'; +$string[ 'helpsudoku'] = 'Dieses Spiel generiert ein Sudoku-Rätsel, das nicht genügend Ziffern enthält, um es lösen zu können. Mit jeder richtig beantworteten Frage wird eine Ziffer ergänzt, um das Sudoku einfacher lösen zu können.'; +$string[ 'modulename'] = 'Spiel'; +$string[ 'modulenameplural'] = 'Spiele'; +$string[ 'pluginadministration'] = 'Spielaktivitätsverwaltung'; +$string[ 'pluginname'] = 'Spiel'; + +//lib.php +$string[ 'attempt'] = 'Versuch'; +$string[ 'bookquiz_questions'] = 'Verknüpfe Fragenkategorie zu Buchkapitel'; +$string[ 'export_to_html'] = 'Export nach HTML'; +$string[ 'export_to_javame'] = 'Export nach Javame'; +$string[ 'game_bookquiz'] = 'Buch mit Fragen'; +$string[ 'game_cross'] = 'Kreuzworträtsel'; +$string[ 'game_cryptex'] = 'Suchrätsel'; +$string[ 'game_hangman'] = 'Galgenmännchen'; +$string[ 'game_hiddenpicture'] = 'Verstecktes Bild'; +$string[ 'game_millionaire'] = 'Wer wird Millionär'; +$string[ 'game_snakes'] = 'Schlangen und Leitern'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Für dieses Spiel wurden keine Versuche gemacht'; +$string[ 'percent'] = 'Prozent'; +$string[ 'reset_game_all'] = 'Versuche aller Spiele löschen'; +$string[ 'reset_game_deleted_course'] = 'Versuche gelöschter Kurse löschen'; +$string[ 'results'] = 'Ergebnisse'; +$string[ 'showanswers'] = 'Antworten zeigen'; +$string[ 'showattempts'] = 'Versuche anzeigen'; + +//locallib.php +$string[ 'attemptfirst'] = 'Erster Versuch'; +$string[ 'attemptlast'] = 'Letzter Versuch'; +$string[ 'convertfrom'] = '-'; +$string[ 'convertto'] = '-'; +$string[ 'gradeaverage'] = 'Durchschnittsbewertung'; +$string[ 'gradehighest'] = 'Höchste Bewertung'; + +//mod_form.php +$string[ 'bookquiz_layout'] = 'Layout'; +$string[ 'bookquiz_layout0'] = 'Fragen oben anzeigen'; +$string[ 'bookquiz_layout1'] = 'Fragen unten anzeigen'; +$string[ 'bookquiz_options'] = 'Buch Optionen'; +$string[ 'bottomtext'] = 'Text am Ende der Seite'; +$string[ 'cross_layout'] = 'Layout'; +$string[ 'cross_layout0'] = 'Sätze auf der Unterseite des Kreuzes'; +$string[ 'cross_layout1'] = 'Sätze rechts des Kreuzes'; +$string[ 'cross_maxcols'] = 'Höchstzahl an Zeilen des Kreuzworträtsels'; +$string[ 'cross_maxwords'] = 'Höchstzahl von Wörtern des Kreuzworträtsels'; +$string[ 'cross_options'] = 'Kreuzworträtsel-Optionen'; +$string[ 'cryptex_maxcols'] = 'Maximale Spalten/Zeilen des Rätsels'; +$string[ 'cryptex_maxtries'] = 'Maximale Versuche'; +$string[ 'cryptex_maxwords'] = 'Maximale Anzahl an Wörtern des Rätsels'; +$string[ 'cryptex_options'] = 'Rätsel-Optionen'; +$string[ 'gameclose'] = 'Spiel schließen'; +$string[ 'gameopen'] = 'Spiel öffnen'; +$string[ 'grademethod'] = 'Bewertungsmethode'; +$string[ 'hangman_allowspaces'] = 'Wortzwischenräume erlauben'; +$string[ 'hangman_allowsub'] = 'Symbol in Wörtern erlauben'; +$string[ 'hangman_imageset'] = 'Das Bild des Spiels wählen'; +$string[ 'hangman_language'] = 'Wortsprache'; +$string[ 'hangman_maximum_number_of_errors'] = 'Maximale Anzahl von Versuchen (Bilder mit Namensschema hangman_0.jpg, hangman_1.jpg, ...)'; +$string[ 'hangman_maxtries'] = 'Wörterzahl pro Spiel'; +$string[ 'hangman_options'] = 'Galgenmännchen-Optionen'; +$string[ 'hangman_showcorrectanswer'] = 'Die richtige Anwort erscheint am Ende des Spiels'; +$string[ 'hangman_showfirst'] = 'Ersten Buchstaben des Wortes zeigen'; +$string[ 'hangman_showlast'] = 'Letzten Buchstaben des Wortes zeigen'; +$string[ 'hangman_showquestion'] = 'Fragen zeigen?'; +$string[ 'hiddenpicture_across'] = 'Horizontale Zellen'; +$string[ 'hiddenpicture_down'] = 'Vertikale Zellen'; +$string[ 'hiddenpicture_height'] = 'Höhe des Bildes'; +$string[ 'hiddenpicture_options'] = '\'Verstecktes Bild\' Optionen'; +$string[ 'hiddenpicture_pictureglossary'] = 'Wörterbuch für Hauptfrage und Bild'; +$string[ 'hiddenpicture_width'] = 'Breite des Bildes'; +$string[ 'millionaire_background'] = 'Hintergrundfarbe'; +$string[ 'millionaire_options'] = 'Millionär-Optionen'; +$string[ 'millionaire_shuffle'] = 'Zufallsfragen'; +$string[ 'snakes_background'] = 'Hintergrund'; +$string[ 'snakes_cols'] = 'Spalten'; +$string[ 'snakes_data'] = 'Positionen für Schlangen und Leitern'; +$string[ 'snakes_file'] = 'Datei für Hintergrund'; +$string[ 'snakes_footerx'] = 'Raum unten links'; +$string[ 'snakes_footery'] = 'Raum unten rechts'; +$string[ 'snakes_headerx'] = 'Raum nach links oben'; +$string[ 'snakes_headery'] = 'Raum nach links unten'; +$string[ 'snakes_layout0'] = 'Frage über dem Bild'; +$string[ 'snakes_layout1'] = 'Frage unter dem Bild'; +$string[ 'snakes_options'] = '\'Schlangen und Leitern\' Optionen'; +$string[ 'snakes_rows'] = 'Reihen'; +$string[ 'sourcemodule'] = 'Fragen-Quelle'; +$string[ 'sourcemodule_book'] = 'Ein Buch wählen'; +$string[ 'sourcemodule_glossary'] = 'Wörtebuch wählen'; +$string[ 'sourcemodule_glossarycategory'] = 'Wörtebuch-Kategorie wählen!'; +$string[ 'sourcemodule_include_subcategories'] = 'Unterkategorien einschließen'; +$string[ 'sourcemodule_question'] = 'Fragen'; +$string[ 'sourcemodule_questioncategory'] = 'Fragenkategorie wählen'; +$string[ 'sourcemodule_quiz'] = 'Quiz wählen'; +$string[ 'sudoku_maxquestions'] = 'Maximale Anzahl von Fragen erreicht'; +$string[ 'sudoku_options'] = 'Sudoku-Optionen'; +$string[ 'toptext'] = 'Text oben'; +$string[ 'userdefined'] = 'benutzerdefiniert'; + +//preview.php +$string[ 'only_teachers'] = 'Nur Lehrende können diese Seite sehen'; +$string[ 'preview'] = 'Vorschau'; + +//review.php +$string[ 'attempts'] = 'Versuche'; +$string[ 'completedon'] = 'Beendet am'; +$string[ 'outof'] = '{$a->grade} von maximal {$a->maxgrade}'; +$string[ 'review'] = 'Überprüfung'; +$string[ 'reviewofattempt'] = 'Überprüfung eines Versuchs {$a}'; +$string[ 'showall'] = 'Zeige alle'; +$string[ 'startagain'] = 'Neu starten'; +$string[ 'timetaken'] = 'Zeitaufwand'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Statistiken löschen'; +$string[ 'computerepetitions'] = 'Statistiken neu berechnen'; +$string[ 'feedbacks'] = 'Meldungen bei korrekter Antwort'; +$string[ 'repetitions'] = 'Wiederholungen'; + +//showattempts.php +$string[ 'lastip'] = 'Benutzer IP'; +$string[ 'showsolution'] = 'Lösung'; +$string[ 'timefinish'] = 'Spiel beendet'; +$string[ 'timelastattempt'] = 'Letzter Versuch'; +$string[ 'timestart'] = 'Start'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Jetzt Spiel starten'; +$string[ 'comment'] = 'Kommentar'; +$string[ 'continueattemptgame'] = 'Einen früheren Versuch des Spiels fortführen'; +$string[ 'gameclosed'] = 'Das Spiel ist beendet {$a}'; +$string[ 'gamecloseson'] = 'Das Spiel endet um {$a}'; +$string[ 'gamenotavailable'] = 'Das Spiel ist erst verfügbar ab {$a}'; +$string[ 'gameopenedon'] = 'Das Spiel begann um {$a}'; +$string[ 'reattemptgame'] = 'Spiel nochmals probieren'; +$string[ 'yourfinalgradeis'] = 'Ihre Endbewertung für dieses Spiel ist {$a}.'; diff --git a/lang/el/game.php b/lang/el/game.php new file mode 100644 index 0000000..69bad7a --- /dev/null +++ b/lang/el/game.php @@ -0,0 +1,307 @@ + Καλωσήρθατε!

    Κάντε κλικ σε μία λέξη για να ξεκινήσετε.

    '; +$string[ 'letter'] = 'γράμμα'; +$string[ 'letters'] = 'γράμματα'; +$string[ 'nextgame'] = 'Νέο παιχνίδι'; +$string[ 'no_words'] = 'Δεν βρέθηκε καμία λέξη'; +$string[ 'print'] = 'Εκτύπωση'; +$string[ 'win'] = 'Συγχαρητήρια !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Τέλος παιχνιδιού'; + +//db/access.php +$string[ 'game:attempt'] = 'Παίξιμο παιχνιδιών'; +$string[ 'game:deleteattempts'] = 'Διαγραφή προσπαθειών του παιχνιδιού'; +$string[ 'game:grade'] = 'Χειροκίνηση βαθμολόγηση των παιχνιδιών'; +$string[ 'game:manage'] = 'Διαχείριση των παιχνιδιών'; +$string[ 'game:preview'] = 'Προεπισκόπηση των παιχνιδιών'; +$string[ 'game:reviewmyattempts'] = 'Ανασκόπηση των δικών σου προσπαθειών'; +$string[ 'game:view'] = 'Εμφάνιση πληροφοριών του παιχνιδιού'; +$string[ 'game:viewreports'] = 'Εμφάνιση των αναφορών του παιχνιδιού'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Η σωστή φράση ήταν: '; +$string[ 'hangman_correct_word'] = 'Η σωστή λέξη ήταν: '; +$string[ 'hangman_gradeinstance'] = 'Βαθμολογία σε όλο το παιχνίδι'; +$string[ 'hangman_letters'] = 'Γράμματα : '; +$string[ 'hangman_restletters_many'] = 'Έχετε {$a} προσπάθειες ακόμη'; +$string[ 'hangman_restletters_one'] = 'Έχετε ακόμη ΜΟΝΟ 1 προσπάθεια'; +$string[ 'hangman_wrongnum'] = 'Λανθασμένα: %%d out of %%d'; +$string[ 'nextword'] = 'Επόμενη λέξη'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = "Βαθμολόγησε την κυρίως ερώτηση"; +$string[ 'hiddenpicture_nocols'] = 'Πρέπει να ορίσετε τον αριθμό των κελιών οριζόντια'; +$string[ 'hiddenpicture_nomainquestion'] = 'Δεν υπάρχει καμία εγγραφή στο λεξικό {$a->name} που να περιλαμβάνει και εικόνα'; +$string[ 'hiddenpicture_norows'] = 'Πρέπει να ορίσετε τον αριθμό των κελιών κατακόρυφα'; +$string[ 'must_select_glossary'] = 'Πρέπει να επιλέξετε οπωσδήποτε ένα λεξιλόγιο'; +$string[ 'no_questions'] = 'Δεν βρέθηκαν ερωτήσεις'; +$string[ 'noglossaryentriesfound'] = 'Δεν βρέθηκαν λέξεις στο λεξικό'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Πρέπει οπωσδήποτε να διαλέξετε μία κατηγορία ερωτήσεων'; +$string[ 'millionaire_must_select_quiz'] = 'Πρέπει οπωσδήποτε να διαλέξετε ένα Κουίζ'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Δείξε όλες τις προσπάθειες'; +$string[ 'allstudents'] = 'Δείξε όλα {$a}'; +$string[ 'attemptduration'] = 'Διάρκεια παιχνιδιού'; +$string[ 'attemptsonly'] = 'Δείξε μόνο τους μαθητές που έχουν προσπαθήσει'; +$string[ 'deleteattemptcheck'] = 'Είστε απόλυτα σίγουροι ότι θέλετε να σβήσετε αυτές τις προσπάθειες;'; +$string[ 'displayoptions'] = 'Εμφάνιση παραμέτρων'; +$string[ 'downloadods'] = 'Αποθήκευση σε μορφή ODS'; +$string[ 'feedback'] = 'Απάντηση'; +$string[ 'noattemptsonly'] = 'Εμφάνιση {$a} που δεν έχουν καθόλου προσπάθειες'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring έκαναν $a->attemptnum προσπάθειες'; +$string[ 'pagesize'] = 'Ερωτήσεις ανά σελίδα:'; +$string[ 'reportoverview'] = 'Σύνοψη'; +$string[ 'selectall'] = 'Επιλογή όλων'; +$string[ 'selectnone'] = 'Αποεπιλογή όλων'; +$string[ 'showdetailedmarks'] = 'Λεπτομέρειες ερωτήσεων'; +$string[ 'startedon'] = 'Ξεκίνησε στις'; +$string[ 'timecompleted'] = 'Συμπληρωμένο'; +$string[ 'unfinished'] = 'Ατελείωτο'; +$string[ 'withselected'] = 'Με τα επιλεγμένα'; + +//snakes/play.php +$string[ 'snakes_dice'] = 'Το ζάρι έφερε {$a}.'; +$string[ 'snakes_player'] = 'Η τρέχουσα θέση του παίχτη είναι: {$a}.'; + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Αριθμός από sudoku που θα δημιουργηθούν'; +$string[ 'sudoku_create_start'] = 'Έναρξη δημιουργίας sudoku'; +$string[ 'sudoku_creating'] = 'Δημιουργήθηκε {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Τέλος παιχνιδιού'; +$string[ 'sudoku_guessnumber'] = 'Μαντέψτε το νούμερο'; +$string[ 'sudoku_noentriesfound'] = 'Δεν βρέθηκαν λέξεις στο λεξικό'; + +//export.php +$string[ 'export'] = 'Εξαγωγή'; +$string[ 'html_hascheckbutton'] = 'Να έχει κουμπί ελέγχου σωστής απάντησης:'; +$string[ 'html_hasprintbutton'] = 'Να έχει κουμπί εκτύπωσης:'; +$string[ 'html_title'] = 'Τίτλος της ιστοσελίδας:'; +$string[ 'javame_createdby'] = 'Δημιουργήθηκε από:'; +$string[ 'javame_description'] = 'Περιγραφή:'; +$string[ 'javame_filename'] = 'Όνομα αρχείου:'; +$string[ 'javame_icon'] = 'Εικονίδιο:'; +$string[ 'javame_maxpictureheight'] = 'Μέγιστο ύψος εικόνας:'; +$string[ 'javame_maxpicturewidth'] = 'Μέγιστο πλάτος εικόνας:'; +$string[ 'javame_name'] = 'Όνομα:'; +$string[ 'javame_type'] = 'Τύπος:'; +$string[ 'javame_vendor'] = 'Vendor:'; +$string[ 'javame_version'] = 'Έκδοση:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Τέλος παιχνιδιού'; +$string[ 'html_hangman_new'] = 'Νέα'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Βοήθεια του κοινού'; +$string[ 'millionaire_info_people'] = 'Το κοινό λέει'; +$string[ 'millionaire_info_telephone'] = 'Νομίζω ότι σωστή απάντηση είναι η'; +$string[ 'millionaire_info_wrong_answer'] = 'Η απάντησή σας είναι λάθος
    Η σωστή απάντηση είναι η :'; +$string[ 'millionaire_quit'] = 'Έξοδος'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Για τον εκατομμυριούχο η πηγή των ερωτήσεων έπρεπε να είναι {$a} ή Ερωτήσεις και όχι'; +$string[ 'millionaire_telephone'] = 'Βοήθεια του τηλεφώνου'; +$string[ 'must_select_questioncategory'] = 'Πρέπει να επιλέξετε οπωσδήποτε μία κατηγορία ερωτήσεων'; +$string[ 'must_select_quiz'] = 'Πρέπει να επιλέξετε ένα κουίζ'; + +//exporthtml_snakes.php +$string[ 'html_snakes_check'] = 'Έλεγχος'; +$string[ 'html_snakes_correct'] = 'Πολύ σωστά!'; +$string[ 'html_snakes_no_selection'] = 'Δεν επιλέξατε κάτι!'; +$string[ 'html_snakes_wrong'] = "Η απάντησή σου ήταν λάθος. Παραμένεις στη θέση σου."; +$string[ 'score'] = 'Βαθμολογία'; + +//index.php +$string[ 'helpbookquiz'] = 'Όταν ο μαθητής απαντά σωστά μια ερώτηση πάει στο επόμενο κεφάλαιο του βιβλίου.'; +$string[ 'helpcross'] = 'Αυτό το παιχνίδι δέχεται λέξεις από το λεξικό ή τη βάση ερωτήσεων του Moodle και δημιουργεί ένα τυχαίο σταυρόλεξο. Ο καθηγητής μπορεί να ορίσει το μέγιστο αριθμό γραμμών/στηλών ή λέξεων. Κάθε σταυρόλεξο είναι δυναμικό και έτσι ο κάθε μαθητής βλέπει διαφορετικό σταυρόλεξο.'; +$string[ 'helpcryptex'] = 'Αυτό το παιχνίδι μοιάζει με το σταυρόλεξο αλλά οι απαντήσεις είναι κρυμμένες μέσα στο κρυπτόλεξο οριζόντια ή κατακόρυφα.'; +$string[ 'helphangman'] = 'Αυτό το παιχνίδι χρησιμοποιεί λέξεις από το λεξικό ή τη βάση ερωτήσεων του Moodle και δημιουργεί το γνωστό παιχνίδι Κρεμάλα. Ο καθηγητής μπορεί να καθορίσει τον αριθμό των λέξεων που θα περιέχει κάθε παιχνίδι, αν θα δείχνει το πρώτο ή το τελευταίο γράμμα ή αν θα εμφανίζει την απάντηση στο τέλος.'; +$string[ 'helphiddenpicture'] = 'Το παιχνίδι αυτό μετά από κάθε επιτυχημένη απάντηση σε μια ερώτηση αποκαλύπτει ένα μικρό κομμάτι της εικόνας βοηθώντας έτσι το μαθητή να απαντήσει στην κυρίως ερώτηση.'; +$string[ 'helpmillionaire'] = 'Σε αυτό το παιχνίδι εμφανίζεται μια ερώτηση πολλαπλής επιλογής και αν ο μαθητής την απαντήσει σωστά προχωρά στο επόμενο επίπεδο.'; +$string[ 'helpsnakes'] = 'Αυτό το παιχνίδι εμφανίζει στο μαθητή ένα ζάρι και μια ερώτηση. Αν ο μαθητής απαντήσει σωστά στην ερώτηση προχωράει στην πίστα τόσες θέσεις όσες λέει το ζάρι.'; +$string[ 'helpsudoku'] = 'Αυτό το παιχνίδι εμφανίζει ένα άλυτο sudoku. Σε κάποια τετράγωνα υπάρχουν ερωτήσεις. Αν ο μαθητής απαντήσει σωστά μια τέτοια ερώτηση του αποκαλύπτει το νούμερο που υπάρχει σε αυτό το τετράγωνο.'; +$string[ 'modulename'] = 'Παιχνίδι'; +$string[ 'modulenameplural'] = 'Παιχνίδια'; +$string[ 'pluginadministration'] = 'Διαχείριση παιχνιδιού'; +$string[ 'pluginname'] = 'Παιχνίδι'; + +//lib.php +$string[ 'attempt'] = 'Προσπάθεια'; +$string[ 'bookquiz_questions'] = 'Αντιστοίχιση κατηγοριών ερωτήσεων με κεφάλαια'; +$string[ 'export_to_html'] = 'Εξαγωγή σε HTML'; +$string[ 'export_to_javame'] = 'Εξαγωγή σε JavaMe για κινητά τηλέφωνα'; +$string[ 'game_bookquiz'] = 'Βιβλίο με ερωτήσεις'; +$string[ 'game_cross'] = 'Σταυρόλεξο'; +$string[ 'game_cryptex'] = 'Κρυπτόλεξο'; +$string[ 'game_hangman'] = 'Κρεμάλα'; +$string[ 'game_hiddenpicture'] = "Η κρυμμένη εικόνα"; +$string[ 'game_millionaire'] = 'Εκατομμυριούχος'; +$string[ 'game_snakes'] = 'Φιδάκι'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Πληροφορίες'; +$string[ 'noattempts'] = 'Καμιά προσπάθεια δεν έγινε γι\' αυτό το παιχνίδι'; +$string[ 'percent'] = 'Ποσοστό'; +$string[ 'reset_game_all'] = 'Διαγραφή προσπαθειών από όλα τα παιχνίδια'; +$string[ 'reset_game_deleted_course'] = 'Διαγραφή προσπαθειών από όλα τα διαγραμμένα μαθήματα'; +$string[ 'results'] = 'Αποτελέσματα'; +$string[ 'showanswers'] = 'Εμφάνιση απαντήσεων'; +$string[ 'showattempts'] = 'Εμφάνιση προσπαθειών'; + +//locallib.php +$string[ 'attemptfirst'] = 'Πρώτη προσπάθεια'; +$string[ 'attemptlast'] = 'Τελευταία προσπάθεια'; +$string[ 'convertfrom'] = 'ἈΆἈἈἊΈἘἚΕΕΉΊΪἸἹΌΎΫύΏῶῶ'; +$string[ 'convertto'] = 'ΑΑΑΑΑΕΕΕΕΕΗΙΙΙΙΟΥΥΥΩΩΩ'; +$string[ 'gradeaverage'] = 'Μέσος βαθμός'; +$string[ 'gradehighest'] = 'Ο υψηλότερος βαθμός'; + +//mod_form.php +$string[ 'bookquiz_layout'] = 'Μορφή εμφάνισης'; +$string[ 'bookquiz_layout0'] = 'Εμφάνιση των ερωτήσεων στο πάνω μέρος του βιβλίου'; +$string[ 'bookquiz_layout1'] = 'Εμφάνιση των ερωτήσεων στο κάτω μέρος του βιβλίου'; +$string[ 'bookquiz_options'] = 'Παράμετροι του παιχνιδίου "Βιβλίο με ερωτήσεις"'; +$string[ 'bottomtext'] = 'Κείμενο στο κάτω μέρος της σελίδας'; +$string[ 'cross_layout'] = 'Τρόπος εμφάνισης'; +$string[ 'cross_layout0'] = 'Οι ορισμοί κάτω από το σταυρόλεξο'; +$string[ 'cross_layout1'] = 'Οι ορισμοί στα δεξιά του σταυρολέξου'; +$string[ 'cross_maxcols'] = 'Μέγιστος αριθμός γραμμών/στηλών στο σταυρόλεξο'; +$string[ 'cross_maxwords'] = 'Μέγιστος αριθμός λέξεων στο σταυρόλεξο'; +$string[ 'cross_options'] = 'Παράμετροι Σταυρολέξου'; +$string[ 'cryptex_maxcols'] = 'Μέγιστος αριθμός γραμμών/στηλών στο κρυπτόλεξο'; +$string[ 'cryptex_maxtries'] = 'Μέγιστος αριθμός προσπαθειών'; +$string[ 'cryptex_maxwords'] = 'Μέγιστος αριθμός λέξεων στο κρυπτόλεξο'; +$string[ 'cryptex_options'] = 'Παράμετροι Κρυπτόλεξου'; +$string[ 'gameclose'] = 'Κλείσιμο του παιχνιδιού'; +$string[ 'gameopen'] = 'Άνοιγμα του παιχνιδιού'; +$string[ 'grademethod'] = 'Μέθοδος βαθμολόγησης'; +$string[ 'hangman_allowspaces'] = 'Να επιτρέπονται τα κενά στις λέξεις'; +$string[ 'hangman_allowsub'] = 'Nα επιτρέπεται το σύμβολο - στις λέξεις'; +$string[ 'hangman_imageset'] = 'Διαλέξτε συλλογή φωτογραφιών'; +$string[ 'hangman_language'] = 'Γλώσσα στην οποία είναι οι λέξεις'; +$string[ 'hangman_maximum_number_of_errors'] = 'Μέγιστος αριθμός λάθος γραμμάτων (πρέπει να υπάρχουν τα αντίστοιχα αρχεία με όνομα hangman_0.jpg, hangman_1.jpg, ...)'; +$string[ 'hangman_maxtries'] = 'Αριθμός λέξεων ανά παιχνίδι'; +$string[ 'hangman_options'] = 'Παράμετροι Κρεμάλας'; +$string[ 'hangman_showcorrectanswer'] = 'Να εμφανίζει τη σωστή απάντηση μετά το τέλος του παιχνιδιού ;'; +$string[ 'hangman_showfirst'] = 'Να εμφανίζει το πρώτο γράμμα της λέξης'; +$string[ 'hangman_showlast'] = 'Να εμφανίζει το τελευταίο γράμμα της λέξης'; +$string[ 'hangman_showquestion'] = 'Να εμφανίζει τις ερωτήσεις ;'; +$string[ 'hiddenpicture_across'] = "Αριθμός κελιών οριζόντια"; +$string[ 'hiddenpicture_down'] = "Αριθμός κελιών κατακόρυφα"; +$string[ 'hiddenpicture_height'] = 'Ορισμός ύψους εικόνας'; +$string[ 'hiddenpicture_options'] = 'Παράμετροι Κρυμμένης Εικόνας'; +$string[ 'hiddenpicture_pictureglossary'] = 'Το λεξικό για την κυρίως ερώτηση'; +$string[ 'hiddenpicture_width'] = 'Ορισμός πλάτους εικόνας'; +$string[ 'millionaire_background'] = 'Χρώμα φόντου'; +$string[ 'millionaire_options'] = 'Παράμετροι Εκατομμυριούχου'; +$string[ 'millionaire_shuffle'] = 'Ανακάτεμα ερωτήσεων'; +$string[ 'snakes_background'] = 'Πίστα'; +$string[ 'snakes_cols'] = 'Στήλες'; +$string[ 'snakes_data'] = 'Πίστα'; +$string[ 'snakes_file'] = 'Αρχείο πίστας'; +$string[ 'snakes_footerx'] = 'Αριστερό περιθώριο (pixels)'; +$string[ 'snakes_footery'] = 'Κάτω περιθώριο (pixels)'; +$string[ 'snakes_headerx'] = 'Δεξί περιθώριο (pixels)'; +$string[ 'snakes_headery'] = 'Πάνω περιθώριο (pixels)'; +$string[ 'snakes_layout0'] = 'Εμφάνιση των ερωτήσεων στο πάνω μέρος της πίστας'; +$string[ 'snakes_layout1'] = 'Εμφάνιση των ερωτήσεων στο κάτω μέρος της πίστας'; +$string[ 'snakes_options'] = 'Παράμετροι για το Φιδάκι'; +$string[ 'snakes_rows'] = 'Γραμμές'; +$string[ 'sourcemodule'] = 'Πηγή ερωτήσεων'; +$string[ 'sourcemodule_book'] = 'Διαλέξτε βιβλίο'; +$string[ 'sourcemodule_glossary'] = 'Διαλέξτε λεξικό'; +$string[ 'sourcemodule_glossarycategory'] = 'Διαλέξτε κατηγορία λεξικού'; +$string[ 'sourcemodule_include_subcategories'] = 'Να συμπεριλαμβάνονται οι υποκατηγορίες'; +$string[ 'sourcemodule_question'] = 'Ερωτήσεις'; +$string[ 'sourcemodule_questioncategory'] = 'Διαλέξτε κατηγορία ερωτήσεων'; +$string[ 'sourcemodule_quiz'] = 'Διαλέξτε κουιζ'; +$string[ 'sudoku_maxquestions'] = 'Μέγιστος αριθμός ερωτήσεων'; +$string[ 'sudoku_options'] = 'Παράμετροι Sudoku'; +$string[ 'toptext'] = 'Κείμενο στο πάνω μέρος της σελίδας'; +$string[ 'userdefined'] = "Πίστα ορισμένη από το χρήστη"; + +//preview.php +$string[ 'only_teachers'] = 'Μόνο teacher μπορούν να δουν αυτή τη σελίδα'; +$string[ 'preview'] = 'Προεπισκόπηση'; + +//review.php +$string[ 'attempts'] = 'Προσπάθειες'; +$string[ 'completedon'] = 'Ολοκληρώθηκε στις'; +$string[ 'outof'] = '{$a->grade} από μέγιστο {$a->maxgrade}'; +$string[ 'review'] = 'Επανεξέταση'; +$string[ 'reviewofattempt'] = 'Επανεξέταση της προσπάθειας {$a}'; +$string[ 'showall'] = 'Εμφάνιση όλων'; +$string[ 'startagain'] = 'Προσπάθεια ξανά'; +$string[ 'timetaken'] = 'Χρόνος που χρειάστηκε'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Μηδενισμός στατιστικών'; +$string[ 'computerepetitions'] = 'Επαναϋπολογισμός στατιστικών'; +$string[ 'feedbacks'] = 'Μήνυμα σωστής απάντησης'; +$string[ 'repetitions'] = 'Επαναλήψεις'; + +//showattempts.php +$string[ 'lastip'] = 'IP σπουδαστή'; +$string[ 'showsolution'] = 'Λύση'; +$string[ 'timefinish'] = 'Τέλος παιχνιδιού'; +$string[ 'timelastattempt'] = 'Τελευταία προσπάθεια'; +$string[ 'timestart'] = 'Έναρξη'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Προσπάθεια παιχνιδιού τώρα'; +$string[ 'comment'] = 'Σχόλια'; +$string[ 'continueattemptgame'] = 'Συνέχιση του παιχνιδιού'; +$string[ 'gameclosed'] = 'Το παιχνίδι έκλεισε στις {$a}'; +$string[ 'gamecloseson'] = 'Το παιχνίδι θα κλείσει στις {$a}'; +$string[ 'gamenotavailable'] = 'Το παιχνίδι δε θα είναι διαθέσιμο μέχρι: {$a}'; +$string[ 'gameopenedon'] = 'Το παιχνίδι άνοιξε στις {$a}'; +$string[ 'reattemptgame'] = 'Προσπάθεια παιχνιδιού ξανά'; +$string[ 'yourfinalgradeis'] = 'Ο τελικός σου βαθμός γι\' αυτό το παιχνίδι είναι {$a}'; + +//Untranslated +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; diff --git a/lang/en/game.php b/lang/en/game.php new file mode 100644 index 0000000..0389c74 --- /dev/null +++ b/lang/en/game.php @@ -0,0 +1,304 @@ +Welcome!

    Click on a word to begin.

    '; +$string[ 'letter'] = 'letter'; +$string[ 'letters'] = 'letters'; +$string[ 'nextgame'] = 'New game'; +$string[ 'no_words'] = 'There are no words'; +$string[ 'print'] = 'Print'; +$string[ 'win'] = 'Congratulations !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'End of game'; + +//db/access.php +$string[ 'game:attempt'] = 'Play game'; +$string[ 'game:deleteattempts'] = 'Delete attempts'; +$string[ 'game:grade'] = 'Grade games manually'; +$string[ 'game:manage'] = 'Manage'; +$string[ 'game:manageoverrides'] = 'Manage game overrides'; +$string[ 'game:preview'] = 'Preview Games'; +$string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +$string[ 'game:view'] = 'view'; +$string[ 'game:viewreports'] = 'viewreports'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'The correct phrase was: '; +$string[ 'hangman_correct_word'] = 'The correct word was: '; +$string[ 'hangman_gradeinstance'] = 'Grade in whole game'; +$string[ 'hangman_letters'] = 'Letters: '; +$string[ 'hangman_restletters_many'] = 'You have {$a} tries'; +$string[ 'hangman_restletters_one'] = 'You have ONLY 1 try'; +$string[ 'hangman_wrongnum'] = 'Wrong: %d out of %d'; +$string[ 'nextword'] = 'Next word'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Grade main answer'; +$string[ 'hiddenpicture_nocols'] = 'Have to specify the number of cols horizontaly'; +$string[ 'hiddenpicture_nomainquestion'] = 'There are no glossary entries on glossary {$a->name} with an attached picture'; +$string[ 'hiddenpicture_norows'] = 'Have to specify the number of cols verticaly'; +$string[ 'must_select_glossary'] = 'You must select a glossary'; +$string[ 'no_questions'] = "There are no questions"; +$string[ 'noglossaryentriesfound'] = 'No glossary entries found'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'You must select one question category'; +$string[ 'millionaire_must_select_quiz'] = 'You must select one quiz'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Show all tries'; +$string[ 'allstudents'] = 'Show all $a'; +$string[ 'attemptduration'] = 'Attempt duration'; +$string[ 'attemptsonly'] = 'Show only students with attempts'; +$string[ 'deleteattemptcheck'] = 'Are you absolutely sure you want to completely delete these attempts?'; +$string[ 'displayoptions'] = 'Display options'; +$string[ 'downloadods'] = 'Download in ODS format'; +$string[ 'feedback'] = 'Feedback'; +$string[ 'noattemptsonly'] = 'Show $a with no attempts only'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring have made $a->attemptnum attempts'; +$string[ 'pagesize'] = 'Questions per page:'; +$string[ 'reportoverview'] = 'Overview'; +$string[ 'selectall'] = 'Select all'; +$string[ 'selectnone'] = 'Deselect all'; +$string[ 'showdetailedmarks'] = 'Show mark details'; +$string[ 'startedon'] = 'Started on'; +$string[ 'timecompleted'] = 'Completed'; +$string[ 'unfinished'] = 'open'; +$string[ 'withselected'] = 'With selected'; + +//snakes/play.php +$string[ 'snakes_dice'] = 'Dice, $a spots.'; +$string[ 'snakes_player'] = 'Player, position: $a.'; + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Number of sudokus that will be created'; +$string[ 'sudoku_create_start'] = 'Start creating sudokus'; +$string[ 'sudoku_creating'] = 'Creating {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'End of game'; +$string[ 'sudoku_guessnumber'] = 'Guess the correct number'; +$string[ 'sudoku_noentriesfound'] = 'No words found in glossary'; + +//export.php +$string[ 'export'] = 'Export'; +$string[ 'html_hascheckbutton'] = 'Has check button:'; +$string[ 'html_hasprintbutton'] = 'Has print button:'; +$string[ 'html_title'] = 'Title of html:'; +$string[ 'javame_createdby'] = 'Created by:'; +$string[ 'javame_description'] = 'Description:'; +$string[ 'javame_filename'] = 'Filename:'; +$string[ 'javame_icon'] = 'Icon:'; +$string[ 'javame_maxpictureheight'] = 'Max picture height:'; +$string[ 'javame_maxpicturewidth'] = 'Max picture width:'; +$string[ 'javame_name'] = 'Name:'; +$string[ 'javame_type'] = 'Type:'; +$string[ 'javame_vendor'] = 'Vendor:'; +$string[ 'javame_version'] = 'Version:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Game over'; +$string[ 'html_hangman_new'] = 'New'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Help of people'; +$string[ 'millionaire_info_people'] = 'People say'; +$string[ 'millionaire_info_telephone'] = 'I think that the correct answer is '; +$string[ 'millionaire_info_wrong_answer'] = 'Your answer is wrong
    The right answer is:'; +$string[ 'millionaire_quit'] = 'Quit'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'For the millionaire the source must be {$a} or questions and not'; +$string[ 'millionaire_telephone'] = 'Help of telephone'; +$string[ 'must_select_questioncategory'] = 'You must select a question category'; +$string[ 'must_select_quiz'] = 'You must select a quiz'; + +//exporthtml_snakes.php +$string[ 'html_snakes_check'] = 'Check'; +$string[ 'html_snakes_correct'] = 'Correct!'; +$string[ 'html_snakes_no_selection'] = 'Have to select something!'; +$string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +$string[ 'score'] = 'Score'; + +//index.php +$string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +$string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +$string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +$string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +$string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +$string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +$string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +$string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +$string[ 'modulename'] = 'Game'; +$string[ 'modulenameplural'] = 'Games'; +$string[ 'pluginadministration'] = 'Game administration'; +$string[ 'pluginname'] = 'Game'; + +//lib.php +$string[ 'attempt'] = 'Attempt'; +$string[ 'bookquiz_questions'] = 'Associate question categories to chapter of book'; +$string[ 'export_to_html'] = 'Export to HTML'; +$string[ 'export_to_javame'] = 'Export to Javame'; +$string[ 'game_bookquiz'] = 'Book with questions'; +$string[ 'game_cross'] = 'Crossword'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Hangman'; +$string[ 'game_hiddenpicture'] = 'Hidden Picture'; +$string[ 'game_millionaire'] = 'Millionaire'; +$string[ 'game_snakes'] = 'Snakes and Ladders'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'No attempts have been made on this game'; +$string[ 'percent'] = 'Percent'; +$string[ 'reset_game_all'] = 'Delete tries from all games'; +$string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +$string[ 'results'] = 'Results'; +$string[ 'showanswers'] = 'Show answers'; +$string[ 'showattempts'] = 'Show attempts'; + +//locallib.php +$string[ 'attemptfirst'] = 'First attempt'; +$string[ 'attemptlast'] = 'Last attempt'; +$string[ 'convertfrom'] = '-'; +$string[ 'convertto'] = '-'; +$string[ 'gradeaverage'] = 'Average grade'; +$string[ 'gradehighest'] = 'Highest grade'; + +//mod_form.php +$string[ 'bookquiz_layout'] = 'Layout'; +$string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +$string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +$string[ 'bookquiz_options'] = 'Bookquiz options'; +$string[ 'bottomtext'] = 'Text at the bottom of page'; +$string[ 'cross_layout'] = 'Layout'; +$string[ 'cross_layout0'] = 'Phrases on the bottom of cross'; +$string[ 'cross_layout1'] = 'Phrases on the right of cross'; +$string[ 'cross_maxcols'] = 'Maximum number of cols of crossword'; +$string[ 'cross_maxwords'] = 'Maximum number of words of crossword'; +$string[ 'cross_options'] = 'Crossword options'; +$string[ 'cryptex_maxcols'] = 'Maximum number of cols/rows in cryptex'; +$string[ 'cryptex_maxtries'] = 'Max tries'; +$string[ 'cryptex_maxwords'] = 'Maximum number of words in cryptex'; +$string[ 'cryptex_options'] = 'Cryptex ofptions'; +$string[ 'gameclose'] = 'Close the game'; +$string[ 'gameopen'] = 'Open the game'; +$string[ 'grademethod'] = 'Grading method'; +$string[ 'hangman_allowspaces'] = 'Allow spaces in words'; +$string[ 'hangman_allowsub'] = 'Allow the symbol - in words'; +$string[ 'hangman_imageset'] = 'Select the images of hangman'; +$string[ 'hangman_language'] = 'Language of words'; +$string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +$string[ 'hangman_maxtries'] = 'Number of words per game'; +$string[ 'hangman_options'] = 'Hangman options'; +$string[ 'hangman_showcorrectanswer'] = 'Show the correct answer after the end'; +$string[ 'hangman_showfirst'] = 'Show first letter of hangman'; +$string[ 'hangman_showlast'] = 'Show last letter of hangman'; +$string[ 'hangman_showquestion'] = 'Show the questions ?'; +$string[ 'hiddenpicture_across'] = 'Cells horizontal'; +$string[ 'hiddenpicture_down'] = 'Cells down'; +$string[ 'hiddenpicture_height'] = 'Set height of picture to'; +$string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +$string[ 'hiddenpicture_pictureglossary'] = 'The glossary for main question and picture'; +$string[ 'hiddenpicture_width'] = 'Set width of picture to'; +$string[ 'millionaire_background'] = 'Background color'; +$string[ 'millionaire_options'] = 'Millionaire\' options'; +$string[ 'millionaire_shuffle'] = 'Randomize questions'; +$string[ 'snakes_background'] = 'Background'; +$string[ 'snakes_cols'] = 'Cols'; +$string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +$string[ 'snakes_file'] = 'File for background'; +$string[ 'snakes_footerx'] = 'Space at bootom left'; +$string[ 'snakes_footery'] = 'Space at bottom right'; +$string[ 'snakes_headerx'] = 'Space at up left'; +$string[ 'snakes_headery'] = 'Space at up right'; +$string[ 'snakes_layout0'] = 'Question at the top of the image'; +$string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +$string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +$string[ 'snakes_rows'] = 'Rows'; +$string[ 'sourcemodule'] = 'Source of questions'; +$string[ 'sourcemodule_book'] = 'Select a book'; +$string[ 'sourcemodule_glossary'] = 'Select glossary'; +$string[ 'sourcemodule_glossarycategory'] = 'Select category of glossary'; +$string[ 'sourcemodule_include_subcategories'] = 'Include subcategories'; +$string[ 'sourcemodule_question'] = 'Questions'; +$string[ 'sourcemodule_questioncategory'] = 'Select question category'; +$string[ 'sourcemodule_quiz'] = 'Select quiz'; +$string[ 'sudoku_maxquestions'] = 'Maximum number of questions'; +$string[ 'sudoku_options'] = 'Sudoku options'; +$string[ 'toptext'] = 'Text at the top of page'; +$string[ 'userdefined'] = 'User defined'; + +//preview.php +$string[ 'only_teachers'] = 'Only teacher can see this page'; +$string[ 'preview'] = 'Preview'; + +//review.php +$string[ 'attempts'] = 'Attempts'; +$string[ 'completedon'] = 'Completed on'; +$string[ 'outof'] = '{$a->grade} out of a maximum of {$a->maxgrade}'; +$string[ 'review'] = 'Review'; +$string[ 'reviewofattempt'] = 'Review of Attempt {$a}'; +$string[ 'showall'] = 'Show all'; +$string[ 'startagain'] = 'Start again'; +$string[ 'timetaken'] = 'Time taken'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Clear statistics'; +$string[ 'computerepetitions'] = 'Compute statistics again'; +$string[ 'feedbacks'] = 'Messages correct answer'; +$string[ 'repetitions'] = 'Repetitions'; + +//showattempts.php +$string[ 'lastip'] = 'IP student'; +$string[ 'showsolution'] = 'solution'; +$string[ 'timefinish'] = 'End of game'; +$string[ 'timelastattempt'] = 'Last attempt'; +$string[ 'timestart'] = 'Start'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Attempt game now'; +$string[ 'comment'] = 'Comment'; +$string[ 'continueattemptgame'] = 'Continue a previous attempt of game'; +$string[ 'gameclosed'] = 'This game closed on {$a}'; +$string[ 'gamecloseson'] = 'This game will close at {$a}'; +$string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +$string[ 'gameopenedon'] = 'This game opened at {$a}'; +$string[ 'reattemptgame'] = 'Reattempt game'; +$string[ 'yourfinalgradeis'] = 'Your final grade for this game is {$a}.'; diff --git a/lang/es/game.php b/lang/es/game.php new file mode 100644 index 0000000..1aba832 --- /dev/null +++ b/lang/es/game.php @@ -0,0 +1,305 @@ +¡Bienvenido!

    Haga clic en una palabra para comenzar.

    '; +$string[ 'letter'] = 'letra'; +$string[ 'letters'] = 'letras'; +$string[ 'nextgame'] = 'Siguiente juego'; +$string[ 'no_words'] = 'Ninguna palabra encontrada'; +$string[ 'print'] = 'Imprimir'; +$string[ 'win'] = '¡¡¡ Felicitaciones !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Fin del juego'; + +//db/access.php +$string[ 'game:attempt'] = 'Juega el juego'; +$string[ 'game:deleteattempts'] = 'Borrar intentos'; +$string[ 'game:manage'] = 'Administrar'; +$string[ 'game:reviewmyattempts'] = 'Revisar mis intentos'; +$string[ 'game:view'] = 'Ver'; +$string[ 'game:viewreports'] = 'Ver reportes'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'La frase correcta fué: '; +$string[ 'hangman_correct_word'] = 'La palabra correcta fué: '; +$string[ 'hangman_gradeinstance'] = 'Nivel en el juego completo'; +$string[ 'hangman_letters'] = 'Letras: '; +$string[ 'hangman_restletters_many'] = 'Ud. tiene {$a} intentos'; +$string[ 'hangman_restletters_one'] = 'Ud. tienen ÚNICAMENTE 1 intento'; +$string[ 'hangman_wrongnum'] = 'Malas: %%d de %%d'; +$string[ 'nextword'] = 'Siguiente palabra'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Calificación de la pregunta principal'; +$string[ 'hiddenpicture_nocols'] = 'Tiene que especificar el número de filas horizontales'; +$string[ 'hiddenpicture_nomainquestion'] = 'No hay entradas en el glosario glosario {$a->name} con una imagen adjunta'; +$string[ 'hiddenpicture_norows'] = 'Tiene que especificar el número de columnas verticales'; +$string[ 'must_select_glossary'] = 'Ud debe seleccionar un glosario'; +$string[ 'noglossaryentriesfound'] = 'No se han encontrado entradas de glosario'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Usted debe seleccionar una categoría de preguntas'; +$string[ 'millionaire_must_select_quiz'] = 'Usted debe seleccionar un cuestionario'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Mostrar todos los intentos'; +$string[ 'allstudents'] = 'Mostrar todos $a'; +$string[ 'attemptsonly'] = 'Mostrar únicamente estudiantes con intentos'; +$string[ 'deleteattemptcheck'] = 'Esta absolútamente seguro de querer borrar completamente estos intentos?'; +$string[ 'displayoptions'] = 'Mostrar opciones'; +$string[ 'downloadods'] = 'Descargar en formato ODS'; +$string[ 'feedback'] = 'Retroalimentación'; +$string[ 'noattemptsonly'] = 'Mostrar $a unicamente sin intentos'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring ha hecho $a->attemptnum intentos'; +$string[ 'pagesize'] = 'Preguntas por página:'; +$string[ 'reportoverview'] = 'Listado'; +$string[ 'selectall'] = 'Seleccione todos'; +$string[ 'selectnone'] = 'Des-marcar todos'; +$string[ 'showdetailedmarks'] = 'Mostrar detalles de marca'; +$string[ 'startedon'] = 'Comenzó en'; +$string[ 'timecompleted'] = 'Completado'; +$string[ 'unfinished'] = 'abierto'; +$string[ 'withselected'] = 'Con seleccionados'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Número de sudokus que serán creados'; +$string[ 'sudoku_create_start'] = 'Comenzar creando sudokus'; +$string[ 'sudoku_creating'] = 'Creando {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Fin del juego de sudoku'; +$string[ 'sudoku_guessnumber'] = 'Adivine el número correcto'; +$string[ 'sudoku_noentriesfound'] = 'Ninguna palabra encontrada en el glosario'; + +//export.php +$string[ 'export'] = 'Exporta a móvil'; +$string[ 'html_hascheckbutton'] = 'Botón de prueba:'; +$string[ 'html_hasprintbutton'] = 'Botón de impresión:'; +$string[ 'html_title'] = 'Título de html:'; +$string[ 'javame_createdby'] = 'Creado por:'; +$string[ 'javame_description'] = 'Descripción:'; +$string[ 'javame_filename'] = 'Nombe del archivo:'; +$string[ 'javame_icon'] = 'Icono:'; +$string[ 'javame_maxpictureheight'] = 'Altura máxima de la imagen:'; +$string[ 'javame_maxpicturewidth'] = 'Anchura máxima de la imagen:'; +$string[ 'javame_name'] = 'Nombre:'; +$string[ 'javame_type'] = 'Tipo:'; +$string[ 'javame_vendor'] = 'Vendedor:'; +$string[ 'javame_version'] = 'Versión'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Fin del juego'; +$string[ 'html_hangman_new'] = 'Nuevo'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Ayuda del público'; +$string[ 'millionaire_info_people'] = 'La gente dice'; +$string[ 'millionaire_info_telephone'] = 'Yo pienso que la respuesta correcta es'; +$string[ 'millionaire_info_wrong_answer'] = 'Su respuesta es incorrecta
    La respuesta correcta es:'; +$string[ 'millionaire_quit'] = 'Salir'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Para millonario la fuente debe ser {$a} o preguntas y no'; +$string[ 'millionaire_telephone'] = 'Llamada telefónica'; +$string[ 'must_select_questioncategory'] = 'Ud debe seleccionar una categoría de preguntas'; +$string[ 'must_select_quiz'] = 'Ud debe seleccionar un cuestionario'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Puntaje'; + +//index.php +$string[ 'modulename'] = 'Juego'; +$string[ 'modulenameplural'] = 'Juegos'; +$string[ 'pluginname'] = 'Juego'; + +//lib.php +$string[ 'attempt'] = 'Intento'; +$string[ 'bookquiz_questions'] = 'Asocie categorías de preguntas con capítulos del libro'; +$string[ 'export_to_html'] = 'Exportar a HTML'; +$string[ 'export_to_javame'] = 'Exportar a Javame'; +$string[ 'game_bookquiz'] = 'Libro con preguntas'; +$string[ 'game_cross'] = 'Crucigrama'; +$string[ 'game_cryptex'] = 'Sopa de Letras'; +$string[ 'game_hangman'] = 'Ahorcado'; +$string[ 'game_hiddenpicture'] = 'Imagen oculta'; +$string[ 'game_millionaire'] = 'Millonario'; +$string[ 'game_snakes'] = 'Serpientes y Escaleras'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Ningún intento ha sido hecho en este cuestionario'; +$string[ 'percent'] = 'Porcentaje'; +$string[ 'results'] = 'Resultados'; +$string[ 'showanswers'] = 'Mostrar respuestas'; +$string[ 'showattempts'] = 'Mostrar los intentos'; + +//locallib.php +$string[ 'attemptfirst'] = 'Primer intento'; +$string[ 'attemptlast'] = 'Último intento'; +$string[ 'gradeaverage'] = 'Nota promedio'; +$string[ 'gradehighest'] = 'Nota más alta'; + +//mod_form.php +$string[ 'bottomtext'] = 'Texto al final'; +$string[ 'cross_layout'] = 'Diseño'; +$string[ 'cross_layout0'] = 'Frases en la parte inferior del crucigrama'; +$string[ 'cross_layout1'] = 'Frases en la parte derecha del crucigrama'; +$string[ 'cross_maxcols'] = 'Número máximo de columnas del crucigrama'; +$string[ 'cross_maxwords'] = 'Máximo número de palabras del crucigrama'; +$string[ 'cross_options'] = 'Opciones del Crucigrama'; +$string[ 'cryptex_maxcols'] = 'Máximo número de columnas/filas en Sopa de Letras'; +$string[ 'cryptex_maxtries'] = 'Número máximo de intentos'; +$string[ 'cryptex_maxwords'] = 'Máximo número de palabras en Sopa de Letras'; +$string[ 'cryptex_options'] = 'Opciones del Criptograma'; +$string[ 'grademethod'] = 'Método de calificación'; +$string[ 'hangman_allowspaces'] = 'Permitir espacios en las palabras'; +$string[ 'hangman_allowsub'] = 'Permitir símbolos en las palabras'; +$string[ 'hangman_imageset'] = 'Seleccione las imágenes para el ahorcado'; +$string[ 'hangman_language'] = 'Idioma de las palabras'; +$string[ 'hangman_maxtries'] = 'Número de palabras por juego'; +$string[ 'hangman_options'] = 'Opciones del Ahorcado'; +$string[ 'hangman_showcorrectanswer'] = 'Mostrar la respuesta correcta después del final'; +$string[ 'hangman_showfirst'] = 'Mostrar la primera letra de ahorcado'; +$string[ 'hangman_showlast'] = 'Mostrar la última letra del ahorcado'; +$string[ 'hangman_showquestion'] = '¿ Mostrar las preguntas ?'; +$string[ 'hiddenpicture_across'] = 'Celdas horizontales'; +$string[ 'hiddenpicture_down'] = 'Celdas verticales'; +$string[ 'hiddenpicture_height'] = 'Establecer la altura de la imagen en'; +$string[ 'hiddenpicture_options'] = '\'Imagen Oculta\' opciones'; +$string[ 'hiddenpicture_pictureglossary'] = 'El glosario para la cuestión principal'; +$string[ 'hiddenpicture_width'] = 'Establecer el ancho de la imagen en'; +$string[ 'millionaire_background'] = 'Color de fondo'; +$string[ 'millionaire_options'] = 'Opciones del Millonario'; +$string[ 'millionaire_shuffle'] = 'Mezclar preguntas'; +$string[ 'snakes_background'] = 'Fondo'; +$string[ 'snakes_cols'] = 'Columnas'; +$string[ 'snakes_footerx'] = 'Espacio inferior izquierdo'; +$string[ 'snakes_footery'] = 'Espacio inferior derecho'; +$string[ 'snakes_headerx'] = 'Espacio superior izquierdo'; +$string[ 'snakes_headery'] = 'Espacio superior derecho'; +$string[ 'snakes_options'] = '\'Serpientes y Escaleras\' opciones'; +$string[ 'snakes_rows'] = 'Filas'; +$string[ 'sourcemodule'] = 'Fuente de preguntas'; +$string[ 'sourcemodule_book'] = 'Seleccione un libro'; +$string[ 'sourcemodule_glossary'] = 'Seleccione un glosario'; +$string[ 'sourcemodule_glossarycategory'] = 'Seleccione una categoría del glosario.'; +$string[ 'sourcemodule_include_subcategories'] = 'Include subcategories'; +$string[ 'sourcemodule_question'] = 'Preguntas'; +$string[ 'sourcemodule_questioncategory'] = 'Seleccione una categoría de preguntas'; +$string[ 'sourcemodule_quiz'] = 'Seleccione un cuestionario'; +$string[ 'sudoku_maxquestions'] = 'Máximo número de preguntas'; +$string[ 'sudoku_options'] = 'Opciones del Sudoku'; +$string[ 'toptext'] = 'Texto de la parte superior'; +$string[ 'userdefined'] = 'Definido por el usuario'; + +//preview.php +$string[ 'only_teachers'] = 'Sólo el profesor puede ver esta página'; +$string[ 'preview'] = 'Visualizar'; + +//review.php +$string[ 'attempts'] = 'Intentos'; +$string[ 'completedon'] = 'Completado en'; +$string[ 'outof'] = '{$a->grade} out of a maximum of {$a->maxgrade}'; +$string[ 'review'] = 'Revisar'; +$string[ 'reviewofattempt'] = 'Revisar intentos {$a}'; +$string[ 'startagain'] = 'Comenzar de nuevo'; +$string[ 'timetaken'] = 'Tiempo utilizado'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Borrar estadísticas'; +$string[ 'computerepetitions'] = 'Recalcular estadísticas'; +$string[ 'feedbacks'] = 'Mensajes de respuesta correcta'; +$string[ 'repetitions'] = 'Repeticiones'; + +//showattempts.php +$string[ 'lastip'] = 'IP del estudiante'; +$string[ 'showsolution'] = 'solución'; +$string[ 'timefinish'] = 'Fin del juego'; +$string[ 'timelastattempt'] = 'Último intento'; +$string[ 'timestart'] = 'Comienzo'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Intente jugar ahora'; +$string[ 'continueattemptgame'] = 'Continue un intento previo de juego'; +$string[ 'reattemptgame'] = 'Juego de reintento'; +$string[ 'yourfinalgradeis'] = 'Su nota final en este juego es {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//review.php $string[ 'showall'] = 'Show all'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/eu/game.php b/lang/eu/game.php new file mode 100644 index 0000000..a47393a --- /dev/null +++ b/lang/eu/game.php @@ -0,0 +1,304 @@ +Ongi etorri!

    Hasteko hitz batean klik egin.

    '; +$string[ 'letter'] = 'letra'; +$string[ 'letters'] = 'letrak'; +$string[ 'nextgame'] = 'Hurrengo jolasa'; +$string[ 'no_words'] = 'Ez da hitzik aurkitu'; +$string[ 'print'] = 'Imprimatu'; +$string[ 'win'] = 'Zorionak!!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Jolasa bukatu da'; + +//db/access.php +$string[ 'game:attempt'] = 'Jolastu'; +$string[ 'game:deleteattempts'] = 'Saiakerak ezabatu'; +$string[ 'game:grade'] = 'Jolasak eskuz baloratu'; +$string[ 'game:manage'] = 'Kudeatu'; +$string[ 'game:preview'] = 'Jolasak aurreikusi'; +$string[ 'game:reviewmyattempts'] = 'nire saiakerak berriro ikusi'; +$string[ 'game:view'] = 'ikusi'; +$string[ 'game:viewreports'] = 'txostenak ikusi'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Hauxe da esaldi zuzena: '; +$string[ 'hangman_correct_word'] = 'Hauxe da hitz zuzena: '; +$string[ 'hangman_gradeinstance'] = 'Maila jolas osoan'; +$string[ 'hangman_letters'] = 'Letrak: '; +$string[ 'hangman_restletters_many'] = '{$a} saiakera dituzu'; +$string[ 'hangman_restletters_one'] = 'Saiakera bakarra daukazu'; +$string[ 'hangman_wrongnum'] = 'Desegokiak: %%d %%d(e)tik'; +$string[ 'nextword'] = 'Hurrengo hitza'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Galdera nagusiaren erantzuna ebaluatu'; +$string[ 'hiddenpicture_nocols'] = 'Lerro horizontalen kopurua zehaztu behar duzu'; +$string[ 'hiddenpicture_nomainquestion'] = '{$a->name} glosategian ez dago irudia duen hitzik'; +$string[ 'hiddenpicture_norows'] = 'Zutabeen kopurua zehaztu behar duzu'; +$string[ 'must_select_glossary'] = 'Glosategia aukeratu behar duzu'; +$string[ 'no_questions'] = "Ez dago galderarik"; +$string[ 'noglossaryentriesfound'] = 'Ez da glosategi-sarrerarik aurkitu'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Galdera-kategoria aukeratu behar duzu'; +$string[ 'millionaire_must_select_quiz'] = 'Galdetegi bat aukeratu beharko'; + +//report/overview/report.php +$string[ 'allattempts'] = 'saiakera guztiak erakutsi'; +$string[ 'allstudents'] = '$a guztiak erakutsi'; +$string[ 'attemptsonly'] = 'Saiatu diren ikasleak soilik erakutsi'; +$string[ 'deleteattemptcheck'] = 'Saiakera hauek guztiak ezabatu nahi dituzula ziur al zaude?'; +$string[ 'displayoptions'] = 'Aukerak erakutsi'; +$string[ 'downloadods'] = 'ODS formatuan behera kargatu'; +$string[ 'feedback'] = 'Feedback'; +$string[ 'noattemptsonly'] = '$a saiakerarik gabekoak soilik erakutsi'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring $a->attemptnum saiakeren egilea da'; +$string[ 'pagesize'] = 'Galderak orriko:'; +$string[ 'reportoverview'] = 'zerrenda'; +$string[ 'selectall'] = 'Denak aukeratu'; +$string[ 'selectnone'] = 'Ezein ez aukeratu'; +$string[ 'showdetailedmarks'] = 'Marka-zehaztapenak erakutsi'; +$string[ 'startedon'] = 'Noiz hasia'; +$string[ 'timecompleted'] = 'Osaturik'; +$string[ 'unfinished'] = 'irekia'; +$string[ 'withselected'] = 'Aukeratutakoekin'; + +//snakes/play.php +$string[ 'snakes_dice'] = 'Dadoak, $a puntuak.'; +$string[ 'snakes_player'] = 'Jokalaria, kokapena: $a.'; + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Sortuko den sudoku-kopurua'; +$string[ 'sudoku_create_start'] = 'Sudokuak sortzen hasi'; +$string[ 'sudoku_creating'] = '{$a} sudokua sortzen'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Sudokua bukatu da'; +$string[ 'sudoku_guessnumber'] = 'Zenbaki zuzena asmatu'; +$string[ 'sudoku_noentriesfound'] = 'Glosategian ez da hitzik aurkitu'; + +//export.php +$string[ 'export'] = 'Esportatu'; +$string[ 'html_hascheckbutton'] = 'Saiakera-botoia:'; +$string[ 'html_hasprintbutton'] = 'Imprimatzeko botoia:'; +$string[ 'html_title'] = 'Html izenburua:'; +$string[ 'javame_createdby'] = 'Egilea:'; +$string[ 'javame_description'] = 'Deskribapena:'; +$string[ 'javame_filename'] = 'Fitxategia:'; +$string[ 'javame_icon'] = 'Ikurra:'; +$string[ 'javame_maxpictureheight'] = 'Irudiaren gehienezko altuera:'; +$string[ 'javame_maxpicturewidth'] = 'Irudiaren gehienezko zabalera:'; +$string[ 'javame_name'] = 'Izena:'; +$string[ 'javame_type'] = 'Mota:'; +$string[ 'javame_vendor'] = 'Vendor:'; +$string[ 'javame_version'] = 'Bertsioa:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Jolasa bukatu da'; +$string[ 'html_hangman_new'] = 'Berria'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Publikoaren laguntza'; +$string[ 'millionaire_info_people'] = 'Jendeak zera dio: '; +$string[ 'millionaire_info_telephone'] = 'Nire ustez, erantzun zuzena hau da: '; +$string[ 'millionaire_info_wrong_answer'] = 'Erantzun zuzena ezkerraldean markatuta dago.
    Zure erantzun hau desegokia da:'; +$string[ 'millionaire_quit'] = 'Irten'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Aberatsa jolaserako iturria {$a} edo galderak izango dira eta ez'; +$string[ 'millionaire_telephone'] = 'Telefono-deia'; +$string[ 'must_select_questioncategory'] = 'Galdera-kategoria bat aukeratu behar duzu'; +$string[ 'must_select_quiz'] = 'Galdetegi bat aukeratu behar duzu'; + +//exporthtml_snakes.php +$string[ 'html_snakes_check'] = 'Konprobatu'; +$string[ 'html_snakes_correct'] = 'Ongi!'; +$string[ 'html_snakes_no_selection'] = 'Zerbait aukeratu behar duzu!'; +$string[ 'html_snakes_wrong'] = "Zure erantzuna ez da zuzena. Leku berean geratu behar duzu."; +$string[ 'score'] = 'Puntuazioak'; + +//index.php +$string[ 'modulename'] = 'Jolasa'; +$string[ 'modulenameplural'] = 'Jolasak'; +$string[ 'pluginname'] = 'Jolasa'; + +//lib.php +$string[ 'attempt'] = 'saiakera'; +$string[ 'bookquiz_questions'] = 'Galdera-kategoriak liburuaren azpikapituluekin lotu'; +$string[ 'export_to_html'] = 'HTMLera esportatu'; +$string[ 'export_to_javame'] = 'Javame-ra esportatu'; +$string[ 'game_bookquiz'] = 'Galdera-,liburua'; +$string[ 'game_cross'] = 'Gurutzegrama'; +$string[ 'game_cryptex'] = 'Hitz Zopa'; +$string[ 'game_hangman'] = 'Urkatua'; +$string[ 'game_hiddenpicture'] = 'Irudi izkutua'; +$string[ 'game_millionaire'] = 'Aberatsa'; +$string[ 'game_snakes'] = 'Sugeak eta eskailerak'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Galdetegi honetan ez da saiakerarik egin'; +$string[ 'percent'] = 'Portzentaia'; +$string[ 'results'] = 'Emaitza'; +$string[ 'showanswers'] = 'Erantzunak erakutsi'; +$string[ 'showattempts'] = 'Saiakerak erakutsi'; + +//locallib.php +$string[ 'attemptfirst'] = 'Lehen saiakera'; +$string[ 'attemptlast'] = 'Azken saiakera'; +$string[ 'gradeaverage'] = 'Batezbesteko emaitza'; +$string[ 'gradehighest'] = 'Emaitza altuena'; + +//mod_form.php +$string[ 'bottomtext'] = 'Bukaerako testua'; +$string[ 'cross_layout'] = 'Kokapena'; +$string[ 'cross_layout0'] = 'Definizioak behealdean'; +$string[ 'cross_layout1'] = 'Definizioak eskuin aldean'; +$string[ 'cross_maxcols'] = 'Gurutzegramaren gehienezko zutabe-kopurua'; +$string[ 'cross_maxwords'] = 'Gurutzegramaren gehienezko hitz-kopurua'; +$string[ 'cross_options'] = 'Gurutzegramaren aukerak'; +$string[ 'cryptex_maxcols'] = 'Zutabe/lerroen gehienezko kopurua Hitz Zopan'; +$string[ 'cryptex_maxtries'] = 'Saiakeren gehinezko kopurua'; +$string[ 'cryptex_maxwords'] = 'Gehienezko hitz-kopurua Hitz Zopan'; +$string[ 'cryptex_options'] = 'Hitz Zoparen aukerak'; +$string[ 'grademethod'] = 'Kalifikazio-metodoa'; +$string[ 'hangman_allowspaces'] = 'Hitzen arteko hutsuneak onartu'; +$string[ 'hangman_allowsub'] = 'Baimendu sinboloak - hitzetan'; +$string[ 'hangman_imageset'] = 'Urkatuarentzako irudiak aukeratu'; +$string[ 'hangman_language'] = 'Hitzen hizkuntza'; +$string[ 'hangman_maxtries'] = 'Hitz-kopurua jolaseko'; +$string[ 'hangman_options'] = 'Urkatuaren aukerak'; +$string[ 'hangman_showcorrectanswer'] = 'Bukatutakoan hitza erakutsi'; +$string[ 'hangman_showfirst'] = 'Urkatuaren lehenengo letra erakutsi'; +$string[ 'hangman_showlast'] = 'Urkatuaren azken letra erakutsi'; +$string[ 'hangman_showquestion'] = 'Galderak erakutsi?'; +$string[ 'hiddenpicture_across'] = 'Laukitxo horizontalen kopurua'; +$string[ 'hiddenpicture_down'] = 'Laukitxo bertikalen kopurua'; +$string[ 'hiddenpicture_height'] = 'Irudiaren altuera neurri honetara egokitu: '; +$string[ 'hiddenpicture_options'] = '\'Irudi Izkutuaren\' aukerak'; +$string[ 'hiddenpicture_pictureglossary'] = 'Galdera nagusiaren glosategia'; +$string[ 'hiddenpicture_width'] = 'Irudiaren zabalera neurri honetara egokitu: '; +$string[ 'millionaire_background'] = 'Hondoko kolorea'; +$string[ 'millionaire_options'] = 'Aberatsaren aukerak'; +$string[ 'millionaire_shuffle'] = 'Galderak nahastu'; +$string[ 'snakes_background'] = 'Hondoa'; +$string[ 'snakes_cols'] = 'Zutabeak'; +$string[ 'snakes_data'] = 'Taula'; +$string[ 'snakes_file'] = 'Hondorako fitxategia'; +$string[ 'snakes_footerx'] = 'Beheko ezker aldeko espazioa'; +$string[ 'snakes_footery'] = 'Beheko eskuin aldeko espazioa'; +$string[ 'snakes_headerx'] = 'Goiko ezker aldeko espazioa'; +$string[ 'snakes_headery'] = 'Goiko eskuin aldeko espazioa'; +$string[ 'snakes_options'] = '\'Sugeak eta Eskailerak\' aukerak'; +$string[ 'snakes_rows'] = 'Lerroak'; +$string[ 'sourcemodule'] = 'Galdera-iturria'; +$string[ 'sourcemodule_book'] = 'Liburu bat aukeratu'; +$string[ 'sourcemodule_glossary'] = 'Glosategia aukeratu'; +$string[ 'sourcemodule_glossarycategory'] = 'Glosategiaren kategoria bat aukeratu.'; +$string[ 'sourcemodule_include_subcategories'] = 'Azpikategoriak sartu'; +$string[ 'sourcemodule_question'] = 'Galderak'; +$string[ 'sourcemodule_questioncategory'] = 'Galdera-kategoria bat aukeratu'; +$string[ 'sourcemodule_quiz'] = 'Galdetegia aukeratu'; +$string[ 'sudoku_maxquestions'] = 'Gehienezko galdera-kopurua'; +$string[ 'sudoku_options'] = 'Sudokuren aukerak'; +$string[ 'toptext'] = 'Goialdeko testua'; +$string[ 'userdefined'] = 'Erabiltzaileak definitua'; + +//preview.php +$string[ 'only_teachers'] = 'Horri hau irakasleak bakarrik ikus dezake'; +$string[ 'preview'] = 'Aurreikusi'; + +//review.php +$string[ 'attempts'] = 'Saiakerak'; +$string[ 'completedon'] = 'Osatua'; +$string[ 'outof'] = '{$a->grade} emaitza {$a->maxgrade} gehienezko puntuaziotik'; +$string[ 'review'] = 'Berriro aztertu'; +$string[ 'reviewofattempt'] = '{$a} saiakerak berrikusi'; +$string[ 'showall'] = 'Dena erakutsi'; +$string[ 'startagain'] = 'Berriz hasi'; +$string[ 'timetaken'] = 'Erabilitako denbora'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Estatistikak garbitu'; +$string[ 'computerepetitions'] = 'Estatistikak berriro kalkulatu'; +$string[ 'feedbacks'] = 'Erantzun zuzeneko mezuak'; +$string[ 'repetitions'] = 'Errepikapenak'; + +//showattempts.php +$string[ 'lastip'] = 'Ikaslearen IPa'; +$string[ 'showsolution'] = 'soluzioa'; +$string[ 'timefinish'] = 'Jolasa bukatu da'; +$string[ 'timelastattempt'] = 'Azken saiakera'; +$string[ 'timestart'] = 'Hasiera'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Orain jolasten saiatu'; +$string[ 'continueattemptgame'] = 'Aurreko jolas-saiakerarekin jarraitu'; +$string[ 'reattemptgame'] = 'Saiakera berriko jolasa'; +$string[ 'yourfinalgradeis'] = 'Jolas honetarako zure azken nota hauxe da: {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/fr/game.php b/lang/fr/game.php new file mode 100644 index 0000000..e700de9 --- /dev/null +++ b/lang/fr/game.php @@ -0,0 +1,304 @@ +Bienvenue !

    Cliquez sur un mot pour commencer.

    '; +$string[ 'letter'] = 'lettre'; +$string[ 'letters'] = 'lettres'; +$string[ 'nextgame'] = 'Nouveau jeu'; +$string[ 'no_words'] = 'Pas de mots'; +$string[ 'win'] = 'Bravo !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Fin du jeu'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'La phrase correcte était : '; +$string[ 'hangman_correct_word'] = 'Le mot correct était : '; +$string[ 'hangman_gradeinstance'] = 'Note pour tout l\'ensemble'; +$string[ 'hangman_letters'] = 'Lettres : '; +$string[ 'hangman_restletters_many'] = 'Vous avez effectué {$a} tentatives'; +$string[ 'hangman_restletters_one'] = 'Vous n\'avez SEULEMENT QU\'UNE tentative'; +$string[ 'hangman_wrongnum'] = 'Non : %%d en dehors de %%d'; +$string[ 'nextword'] = 'Mot suivant'; + +//hiddenpicture/play.php +$string[ 'must_select_glossary'] = 'Vous devez choisir un glossaire'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Vous devez choisir une catégorie de questions'; +$string[ 'millionaire_must_select_quiz'] = 'Vous devez choisir un test'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Toutes les tentatives'; +$string[ 'allstudents'] = 'Tous les étudiants $a'; +$string[ 'attemptsonly'] = 'Ne montrer que les étudiants qui ont tenté'; +$string[ 'deleteattemptcheck'] = 'Etes-vous sûr(e) de vouloir complètement effacer ces tentatives ?'; +$string[ 'displayoptions'] = 'Montrer les options'; +$string[ 'downloadods'] = 'Télécharger au format ODS'; +$string[ 'feedback'] = 'Rapports'; +$string[ 'noattemptsonly'] = 'Montrer $a sans tentatives'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring ont effectué $a->attemptnum tentative(s)'; +$string[ 'pagesize'] = 'Questions par page :'; +$string[ 'reportoverview'] = 'Vue d\'ensemble'; +$string[ 'selectall'] = 'Choisir tout'; +$string[ 'selectnone'] = 'Déselectionner tout'; +$string[ 'showdetailedmarks'] = 'Montrer les marques de détail'; +$string[ 'startedon'] = 'Démarré le'; +$string[ 'timecompleted'] = 'Terminé'; +$string[ 'unfinished'] = 'ouvert'; +$string[ 'withselected'] = 'Avec les éléments sélectionnés'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Nombre de sudokus a créer'; +$string[ 'sudoku_create_start'] = 'Création des sudokus...'; +$string[ 'sudoku_creating'] = 'Créer {$a} sudoku(s)'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Fin du sudoku'; +$string[ 'sudoku_guessnumber'] = 'Devniez le nombre suivant'; +$string[ 'sudoku_noentriesfound'] = 'Aucun mot dans le glossaire'; + +//export.php + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Jeu terminé'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'Les gens disent'; +$string[ 'millionaire_info_telephone'] = 'I think that the correct answer is '; +$string[ 'millionaire_info_wrong_answer'] = 'Vous avez donné une mauvaise réponse
    La réponse correcte est :'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Pour le jeu du millionaire, la source doit être {$a} ou questions et non '; +$string[ 'must_select_questioncategory'] = 'Vous devez choisir une catégorie de questions'; +$string[ 'must_select_quiz'] = 'Vous devez choisir un test'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Score'; + +//index.php +$string[ 'modulename'] = 'Jeu'; +$string[ 'modulenameplural'] = 'Jeux'; +$string[ 'pluginname'] = 'Jeu'; + +//lib.php +$string[ 'attempt'] = 'Tentative'; +$string[ 'bookquiz_questions'] = 'Associez une catégorie de questions à un sous-chapitre'; +$string[ 'game_bookquiz'] = 'Livre de questions'; +$string[ 'game_cross'] = 'Mot-croisé'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Pendu'; +$string[ 'game_millionaire'] = 'Millionaire'; +$string[ 'game_snakes'] = 'Serpent et échelles'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Aucune tentative sur ce test'; +$string[ 'results'] = 'Resultats'; +$string[ 'showanswers'] = 'Montrer les réponses'; + +//locallib.php +$string[ 'attemptfirst'] = 'Première tentative'; +$string[ 'attemptlast'] = 'Dernière tentative'; +$string[ 'gradeaverage'] = 'Note moyenne'; +$string[ 'gradehighest'] = 'Note maximale'; + +//mod_form.php +$string[ 'bottomtext'] = 'Texte au bas'; +$string[ 'cross_maxcols'] = 'Nombre maximum de colonnes du mot-croisé'; +$string[ 'cross_maxwords'] = 'Nombre de mots maximum du mot-croisé'; +$string[ 'cryptex_maxcols'] = 'Nombre maximum de col./lignes du cryptex'; +$string[ 'cryptex_maxwords'] = 'Nombre maximum de mots du cryptex'; +$string[ 'grademethod'] = 'Méthode de notation'; +$string[ 'hangman_imageset'] = 'Choisissez les images du pendu'; +$string[ 'hangman_maxtries'] = 'Nombre de mots par jeu'; +$string[ 'hangman_showcorrectanswer'] = 'Montrer la réponse correcte après la fin du jeu'; +$string[ 'hangman_showfirst'] = 'Montrer la première lettre du pendu'; +$string[ 'hangman_showlast'] = 'Montrer la dernière lettre du pendu'; +$string[ 'hangman_showquestion'] = 'Montrer les questions ?'; +$string[ 'snakes_background'] = 'Arrière-plan'; +$string[ 'sourcemodule'] = 'Source des questions'; +$string[ 'sourcemodule_book'] = 'Choisissez un livre'; +$string[ 'sourcemodule_glossary'] = 'Choisissez un glossaire'; +$string[ 'sourcemodule_glossarycategory'] = 'Choisissez une catégorie ou un glossaire'; +$string[ 'sourcemodule_question'] = 'Questions'; +$string[ 'sourcemodule_questioncategory'] = 'Choisissez une catégorie de questions'; +$string[ 'sourcemodule_quiz'] = 'Choisissez un test'; +$string[ 'sudoku_maxquestions'] = 'Nombre maximum de questions'; + +//preview.php +$string[ 'only_teachers'] = 'Seuls les enseignants peuvent voir cette page'; +$string[ 'preview'] = 'Prévisualisation'; + +//review.php +$string[ 'attempts'] = 'Tentatives'; +$string[ 'completedon'] = 'Terminé le'; +$string[ 'outof'] = '{$a->grade} hors de la plage maximum de {$a->maxgrade}'; +$string[ 'review'] = 'Revue'; +$string[ 'reviewofattempt'] = 'Revue de la tentative {$a}'; +$string[ 'startagain'] = 'Démarrer à nouveau'; +$string[ 'timetaken'] = 'Temps consomé'; + +//showanswers.php +$string[ 'feedbacks'] = 'Messages pour réponses correctes'; + +//showattempts.php +$string[ 'lastip'] = 'IP de l\'étudiant'; +$string[ 'showsolution'] = 'solution'; +$string[ 'timefinish'] = 'Fin du jeu'; +$string[ 'timelastattempt'] = 'Dernière tentative'; +$string[ 'timestart'] = 'Démarrer'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Jouer maintenant'; +$string[ 'continueattemptgame'] = 'Continuer une tentative précédente du jeu'; +$string[ 'reattemptgame'] = 'Tenter à nouveau'; +$string[ 'yourfinalgradeis'] = 'Votre note finale pour ce jeu est {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/play.php $string[ 'print'] = 'Print'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'hiddenpicture_mainsubmit'] = 'Grade main answer'; +//hiddenpicture/play.php $string[ 'hiddenpicture_nocols'] = 'Have to specify the number of cols horizontaly'; +//hiddenpicture/play.php $string[ 'hiddenpicture_nomainquestion'] = 'There are no glossary entries on glossary {$a->name} with an attached picture'; +//hiddenpicture/play.php $string[ 'hiddenpicture_norows'] = 'Have to specify the number of cols verticaly'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//export.php $string[ 'export'] = 'Export'; +//export.php $string[ 'html_hascheckbutton'] = 'Has check button:'; +//export.php $string[ 'html_hasprintbutton'] = 'Has print button:'; +//export.php $string[ 'html_title'] = 'Title of html:'; +//export.php $string[ 'javame_createdby'] = 'Created by:'; +//export.php $string[ 'javame_description'] = 'Description:'; +//export.php $string[ 'javame_filename'] = 'Filename:'; +//export.php $string[ 'javame_icon'] = 'Icon:'; +//export.php $string[ 'javame_maxpictureheight'] = 'Max picture height:'; +//export.php $string[ 'javame_maxpicturewidth'] = 'Max picture width:'; +//export.php $string[ 'javame_name'] = 'Name:'; +//export.php $string[ 'javame_type'] = 'Type:'; +//export.php $string[ 'javame_vendor'] = 'Vendor:'; +//export.php $string[ 'javame_version'] = 'Version:'; +//exporthtml_hangman.php $string[ 'html_hangman_new'] = 'New'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'export_to_html'] = 'Export to HTML'; +//lib.php $string[ 'export_to_javame'] = 'Export to Javame'; +//lib.php $string[ 'game_hiddenpicture'] = 'Hidden Picture'; +//lib.php $string[ 'percent'] = 'Percent'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_layout'] = 'Layout'; +//mod_form.php $string[ 'cross_layout0'] = 'Phrases on the bottom of cross'; +//mod_form.php $string[ 'cross_layout1'] = 'Phrases on the right of cross'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_maxtries'] = 'Max tries'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_allowspaces'] = 'Allow spaces in words'; +//mod_form.php $string[ 'hangman_allowsub'] = 'Allow the symbol - in words'; +//mod_form.php $string[ 'hangman_language'] = 'Language of words'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_across'] = 'Cells horizontal'; +//mod_form.php $string[ 'hiddenpicture_down'] = 'Cells down'; +//mod_form.php $string[ 'hiddenpicture_height'] = 'Set height of picture to'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'hiddenpicture_pictureglossary'] = 'The glossary for main question and picture'; +//mod_form.php $string[ 'hiddenpicture_width'] = 'Set width of picture to'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'millionaire_shuffle'] = 'Randomize questions'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sourcemodule_include_subcategories'] = 'Include subcategories'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/he/game.php b/lang/he/game.php new file mode 100644 index 0000000..10d528b --- /dev/null +++ b/lang/he/game.php @@ -0,0 +1,304 @@ +ברוכים הבאים!

    לחצו על מילה להתחיל.

    '; +$string[ 'letter'] = 'אות'; +$string[ 'letters'] = 'אותיות'; +$string[ 'nextgame'] = 'משחק חדש'; +$string[ 'no_words'] = 'לא נמצאו מילים'; +$string[ 'print'] = 'Print'; +$string[ 'win'] = 'כל הכבוד !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'המשחק הסתיים'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'המשפט הנכון הוא: '; +$string[ 'hangman_correct_word'] = 'המילה הנכונה היא: '; +$string[ 'hangman_gradeinstance'] = 'הציון הכללי במשחק'; +$string[ 'hangman_letters'] = 'אותיות: '; +$string[ 'hangman_restletters_many'] = 'יש לכם {$a} נסיונות'; +$string[ 'hangman_restletters_one'] = 'יש לכם ניסיון אחד בלבד'; +$string[ 'hangman_wrongnum'] = 'טעויות: %%d מתוך %%d'; +$string[ 'nextword'] = 'מילה חדשה'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Grade main answer'; +$string[ 'hiddenpicture_nocols'] = 'Have to specify the number of cols horizontaly'; +$string[ 'hiddenpicture_nomainquestion'] = 'There are no glossary entries on glossary {$a->name} with an attached picture'; +$string[ 'hiddenpicture_norows'] = 'Have to specify the number of cols verticaly'; +$string[ 'must_select_glossary'] = 'יש לבחור אגרון'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'יש לבחור סיווג שאלות אחד '; +$string[ 'millionaire_must_select_quiz'] = 'יש לבחור מבחן אחד'; + +//report/overview/report.php +$string[ 'allattempts'] = 'הציגו את כל הניסיונות'; +$string[ 'allstudents'] = 'הציגו את כל $a'; +$string[ 'attemptsonly'] = 'הציגו רק תלמידים עם ניסיונות'; +$string[ 'deleteattemptcheck'] = 'האם אתם בטוחים שאתם מעוניינים למחוק את התשובות המסומנות?'; +$string[ 'displayoptions'] = 'תצוגת מאפיינים'; +$string[ 'downloadods'] = 'הורידו גליון אלקטרוני בתצורת ODF'; +$string[ 'feedback'] = 'משוב'; +$string[ 'noattemptsonly'] = 'הציגו $a שטרם ענו, בלבד'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring ביצעו $a->attemptnum נסיונות'; +$string[ 'pagesize'] = 'מספר השאלות בדף:'; +$string[ 'reportoverview'] = 'תצוגה כללית'; +$string[ 'selectall'] = 'בחירה כוללת'; +$string[ 'selectnone'] = 'ביטול סימון כולל'; +$string[ 'showdetailedmarks'] = 'הציגו פירוט עבור המסומנים'; +$string[ 'startedon'] = 'Started on'; +$string[ 'timecompleted'] = 'הושלם'; +$string[ 'unfinished'] = 'open'; +$string[ 'withselected'] = 'עם התשובות המסומנות'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'מספר לוחות סודוקו העומדים להיווצר'; +$string[ 'sudoku_create_start'] = 'התחלת יצירת לוחות סודוקו'; +$string[ 'sudoku_creating'] = 'מייצר {$a} לוחות סודוקו'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'End of sudoku game'; +$string[ 'sudoku_guessnumber'] = 'נחשו את המספר הנכון'; +$string[ 'sudoku_noentriesfound'] = 'לא נמצאו מילים באגרון'; + +//export.php +$string[ 'export'] = 'Export'; +$string[ 'html_hascheckbutton'] = 'Has check button:'; +$string[ 'html_hasprintbutton'] = 'Has print button:'; +$string[ 'html_title'] = 'Title of html:'; +$string[ 'javame_createdby'] = 'Created by:'; +$string[ 'javame_description'] = 'Description:'; +$string[ 'javame_filename'] = 'Filename:'; +$string[ 'javame_icon'] = 'Icon:'; +$string[ 'javame_maxpicturewidth'] = 'Max picture width:'; +$string[ 'javame_name'] = 'Name:'; +$string[ 'javame_type'] = 'Type:'; +$string[ 'javame_vendor'] = 'Vendor:'; +$string[ 'javame_version'] = 'Version:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'המשחק הסתיים'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'אנשים אומרים'; +$string[ 'millionaire_info_telephone'] = 'אני חושב/ת שהתשובה הנכונה היא '; +$string[ 'millionaire_info_wrong_answer'] = 'תשובתכם שגוייה
    התשובה הנכונה היא:'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'עבור משחק המיליונר מקור השאלות צריך להיות {$a} או שאלות ולא'; +$string[ 'must_select_questioncategory'] = 'יש לבחור סיווג לשאלות'; +$string[ 'must_select_quiz'] = 'You must select a quiz'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Score'; + +//index.php +$string[ 'modulename'] = 'משחק'; +$string[ 'modulenameplural'] = 'משחקים'; +$string[ 'pluginname'] = 'משחק'; + +//lib.php +$string[ 'attempt'] = 'ניסיון'; +$string[ 'bookquiz_questions'] = 'קישור סיווג שאלות לפרק בספר'; +$string[ 'game_bookquiz'] = 'ספר עם שאלות'; +$string[ 'game_cross'] = 'תשבץ'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'הצילו את האיש התלוי'; +$string[ 'game_hiddenpicture'] = 'Hidden Picture'; +$string[ 'game_millionaire'] = 'מי רוצה להיות מיליונר'; +$string[ 'game_snakes'] = 'סולמות ונחשים'; +$string[ 'game_sudoku'] = 'סודוקו'; +$string[ 'info'] = 'מידע'; +$string[ 'noattempts'] = 'No attempts have been made on this game'; +$string[ 'percent'] = 'Percent'; +$string[ 'results'] = 'תוצאות'; +$string[ 'showanswers'] = 'הצגת תשובות'; + +//locallib.php +$string[ 'attemptfirst'] = 'ניסיון ראשון'; +$string[ 'attemptlast'] = 'ניסיון אחרון'; +$string[ 'gradeaverage'] = 'ציון ממוצע'; +$string[ 'gradehighest'] = 'הציון הגובהה ביותר'; + +//mod_form.php +$string[ 'bottomtext'] = 'המלל בתחתית'; +$string[ 'cross_layout'] = 'מבנה תצורה'; +$string[ 'cross_layout0'] = 'המשפט יופיע תחת התשבץ'; +$string[ 'cross_layout1'] = 'המשפט יופיע מימין לתשבץ'; +$string[ 'cross_maxcols'] = 'מספר עמודות מירבי בתשבץ'; +$string[ 'cross_maxwords'] = 'מספר מילים מירבי בתשבץ'; +$string[ 'cryptex_maxcols'] = 'מספר העמודות/שורות במשחק cryptex'; +$string[ 'cryptex_maxwords'] = 'מספר המילים במשחק cryptex'; +$string[ 'grademethod'] = 'שיטת מתן ציונים'; +$string[ 'hangman_allowspaces'] = 'אפשרות לרווחים במילים'; +$string[ 'hangman_allowsub'] = 'אפשרות לתו - במילים'; +$string[ 'hangman_imageset'] = 'בחרו תמונה למשחק האיש התלוי'; +$string[ 'hangman_language'] = 'שפת המילים'; +$string[ 'hangman_maxtries'] = 'מספר מילים בכל משחק'; +$string[ 'hangman_showcorrectanswer'] = 'הצגת התשובה הנכונה בסוף כל משחק'; +$string[ 'hangman_showfirst'] = 'הצגת האות הראשונה במשחק האיש התלוי'; +$string[ 'hangman_showlast'] = 'הצגת האות האחרונה במשחק האיש התלוי'; +$string[ 'hangman_showquestion'] = 'להציג את השאלות ?'; +$string[ 'hiddenpicture_across'] = 'Cells horizontal'; +$string[ 'hiddenpicture_down'] = 'Cells down'; +$string[ 'hiddenpicture_height'] = 'קבעו גובה תמונה ל'; +$string[ 'hiddenpicture_pictureglossary'] = 'The glossary for main question and picture'; +$string[ 'hiddenpicture_width'] = 'קבעו רוחב תמונה ל'; +$string[ 'snakes_background'] = 'רקע'; +$string[ 'sourcemodule'] = 'מקור השאלות'; +$string[ 'sourcemodule_book'] = 'בחרו ספר'; +$string[ 'sourcemodule_glossary'] = 'בחרו אגרון'; +$string[ 'sourcemodule_glossarycategory'] = 'בחרו סיווג עבור אגרון'; +$string[ 'sourcemodule_include_subcategories'] = 'Include subcategories'; +$string[ 'sourcemodule_question'] = 'שאלות'; +$string[ 'sourcemodule_questioncategory'] = 'בחרו סיווג לשאלות'; +$string[ 'sourcemodule_quiz'] = 'בחרו מבחן'; +$string[ 'sudoku_maxquestions'] = 'מספר שאלות מירבי'; + +//preview.php +$string[ 'only_teachers'] = 'רק מורה יכול לראות דף זה'; +$string[ 'preview'] = 'תצוגה מקדימה'; + +//review.php +$string[ 'attempts'] = 'Attempts'; +$string[ 'completedon'] = 'Completed on'; +$string[ 'outof'] = '{$a->grade} out of a maximum of {$a->maxgrade}'; +$string[ 'review'] = 'Review'; +$string[ 'reviewofattempt'] = 'Review of Attempt {$a}'; +$string[ 'startagain'] = 'Start again'; +$string[ 'timetaken'] = 'זמן המשחק'; + +//showanswers.php +$string[ 'feedbacks'] = 'ההודעה במצב של תשובה נכונה'; + +//showattempts.php +$string[ 'lastip'] = 'כתובת ה IP של התלמיד'; +$string[ 'showsolution'] = 'פתרון'; +$string[ 'timefinish'] = 'המשחק הסתיים'; +$string[ 'timelastattempt'] = 'ניסיון אחרון'; +$string[ 'timestart'] = 'התחלה'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'שחקו עכשיו'; +$string[ 'continueattemptgame'] = 'המשיכו ניסיון משחק קודם שלכם'; +$string[ 'reattemptgame'] = 'Reattempt game'; +$string[ 'yourfinalgradeis'] = 'הציון הסופי שלכם למשחק זה הוא {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//export.php $string[ 'javame_maxpictureheight'] = 'Max picture height:'; +//exporthtml_hangman.php $string[ 'html_hangman_new'] = 'New'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'export_to_html'] = 'Export to HTML'; +//lib.php $string[ 'export_to_javame'] = 'Export to Javame'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_maxtries'] = 'Max tries'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'millionaire_shuffle'] = 'Randomize questions'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/hr/game.php b/lang/hr/game.php new file mode 100644 index 0000000..ddb3cb8 --- /dev/null +++ b/lang/hr/game.php @@ -0,0 +1,306 @@ +Dobrodošli!

    Za početak igre odaberite riječ.

    '; +$string[ 'letter'] = 'slovo'; +$string[ 'letters'] = 'slova'; +$string[ 'nextgame'] = 'Nova igra'; +$string[ 'no_words'] = 'Riječi nisu pronađene'; +$string[ 'print'] = 'Ispiši'; +$string[ 'win'] = 'Čestitamo !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Kraj igre'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Tražena fraza je: '; +$string[ 'hangman_correct_word'] = 'Tražena riječ je: '; +$string[ 'hangman_gradeinstance'] = 'Ocjena u cijeloj igri'; +$string[ 'hangman_letters'] = 'Slova: '; +$string[ 'hangman_restletters_many'] = 'Imate još {$a} pokušaja'; +$string[ 'hangman_restletters_one'] = 'Imate još SAMO 1 pokušaj'; +$string[ 'hangman_wrongnum'] = 'Krivo: %%d od %%d'; +$string[ 'nextword'] = 'Sljedeća riječ'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Ocjeni glavni odgovor'; +$string[ 'hiddenpicture_nocols'] = 'Treba zadati broj stupaca vodoravno'; +$string[ 'hiddenpicture_nomainquestion'] = 'Nije pronađen ni jedan zapis u rječniku {$a->name} sa pridruženom slikom'; +$string[ 'hiddenpicture_norows'] = 'Treba zadati broj stupaca okomito'; +$string[ 'must_select_glossary'] = 'Morate odabrati rječnik'; +$string[ 'noglossaryentriesfound'] = 'U rječniku nije pronađen ni jedan pojam'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Morate odabrati kategoriju pitanja'; +$string[ 'millionaire_must_select_quiz'] = 'Morate odabrati tip igre'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Prikaži sve pokušaje'; +$string[ 'allstudents'] = 'Prikaži sve $a'; +$string[ 'attemptsonly'] = 'Prikaži samo studente sa pokušajima'; +$string[ 'deleteattemptcheck'] = 'Dali ste sigurni da želite nepovratno obrisati ove pokušaje?'; +$string[ 'displayoptions'] = 'Postavke prikaza'; +$string[ 'downloadods'] = 'Preuzmi u ODS formatu'; +$string[ 'feedback'] = 'Povratna informacija'; +$string[ 'noattemptsonly'] = 'Prikaži samo $a bez pokušaja'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring su imali $a->attemptnum pokušaja'; +$string[ 'pagesize'] = 'Pitanja po stranici:'; +$string[ 'reportoverview'] = 'Pregled'; +$string[ 'selectall'] = 'Označi sve'; +$string[ 'selectnone'] = 'Odznači sve'; +$string[ 'showdetailedmarks'] = 'Prikaži detalje ocjena'; +$string[ 'startedon'] = 'Započeto'; +$string[ 'timecompleted'] = 'Završeno'; +$string[ 'unfinished'] = 'nije završeno'; +$string[ 'withselected'] = 'Sa odabranim'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Broju sudoku zadataka koji će se napraviti'; +$string[ 'sudoku_create_start'] = 'Započni pravljenje sudou zadataka'; +$string[ 'sudoku_creating'] = 'Pravim {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Kraj igre'; +$string[ 'sudoku_guessnumber'] = 'Pogodite točan broj'; +$string[ 'sudoku_noentriesfound'] = 'U rječniku nije pronađena ni jedna riječ'; + +//export.php +$string[ 'export'] = 'Izvoz'; +$string[ 'html_hascheckbutton'] = 'Sadrži tipku za provjeru:'; +$string[ 'html_hasprintbutton'] = 'Sadrži tipku za ispis:'; +$string[ 'html_title'] = 'Naslov stranice:'; +$string[ 'javame_createdby'] = 'Autor:'; +$string[ 'javame_description'] = 'Opis:'; +$string[ 'javame_filename'] = 'Ime datoteke:'; +$string[ 'javame_icon'] = 'Ikona:'; +$string[ 'javame_maxpictureheight'] = 'Maksimalna visina slike:'; +$string[ 'javame_maxpicturewidth'] = 'Maksimalna širina slike:'; +$string[ 'javame_name'] = 'Ime:'; +$string[ 'javame_type'] = 'Tip:'; +$string[ 'javame_vendor'] = 'Prodavač:'; +$string[ 'javame_version'] = 'Verzija:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Kraj igre'; +$string[ 'html_hangman_new'] = 'Nova igra'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Pitaj publiku'; +$string[ 'millionaire_info_people'] = 'Publika kaže'; +$string[ 'millionaire_info_telephone'] = 'Mislim da je točan odgovor '; +$string[ 'millionaire_info_wrong_answer'] = 'Vaš odgovor je pogrešan
    Točan odgovor je:'; +$string[ 'millionaire_quit'] = 'Kraj'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Za Milijunaša izvor mora biti {$a} ili pitanja i ne'; +$string[ 'millionaire_telephone'] = 'Pomoć zovi'; +$string[ 'must_select_questioncategory'] = 'Morate odabrati kategoriju pitanja'; +$string[ 'must_select_quiz'] = 'Morate odabrati igru'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Rezultat'; + +//index.php +$string[ 'modulename'] = 'igru'; +$string[ 'modulenameplural'] = 'Igre'; +$string[ 'pluginname'] = 'igru'; + +//lib.php +$string[ 'attempt'] = 'Pokušaj'; +$string[ 'bookquiz_questions'] = 'Pridruži kategorije pitanja poglavlju knjige'; +$string[ 'export_to_html'] = 'Izvoz u HTML'; +$string[ 'export_to_javame'] = 'Izvoz u Javame'; +$string[ 'game_bookquiz'] = 'Knjiga sa pitanjima'; +$string[ 'game_cross'] = 'Križaljka'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Vješalo'; +$string[ 'game_hiddenpicture'] = 'Skrivena slika'; +$string[ 'game_millionaire'] = 'Milijunaš'; +$string[ 'game_snakes'] = 'Zmije i Ljestve'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Informacije'; +$string[ 'noattempts'] = 'Ovu igru nitko još nije pokušao igrati'; +$string[ 'percent'] = 'Postotak'; +$string[ 'results'] = 'Rezultati'; +$string[ 'showanswers'] = 'Prikaži odgovore'; +$string[ 'showattempts'] = 'Prikaži pokušaje'; + +//locallib.php +$string[ 'attemptfirst'] = 'Prvi pokušaj'; +$string[ 'attemptlast'] = 'Zadnji pokušaj'; +$string[ 'convertfrom'] = ''; //Special convertation to capital letters +$string[ 'convertto'] = ''; //It is needed for some languages +$string[ 'gradeaverage'] = 'Prosječna ocjena'; +$string[ 'gradehighest'] = 'Najveća ocjena'; + +//mod_form.php +$string[ 'bottomtext'] = 'Tekst na dnu'; +$string[ 'cross_layout'] = 'Raspored'; +$string[ 'cross_layout0'] = 'Fraze ispod križaljke'; +$string[ 'cross_layout1'] = 'Fraze desno od križaljke'; +$string[ 'cross_maxcols'] = 'Maksimaln broj stupaca u križaljci'; +$string[ 'cross_maxwords'] = 'Maksimalan broj riječi u križaljci'; +$string[ 'cross_options'] = 'Postavke križaljke'; +$string[ 'cryptex_maxcols'] = 'Maksimalan broj stupaca/redova cryptexa'; +$string[ 'cryptex_maxtries'] = 'Maksimalan broj pokušaja'; +$string[ 'cryptex_maxwords'] = 'Maksimalan broj riječi cryptexa'; +$string[ 'cryptex_options'] = 'Cryptex postavke'; +$string[ 'grademethod'] = 'Metoda ocjenjivanja'; +$string[ 'hangman_allowspaces'] = 'Dozvoli razmake u riječima'; +$string[ 'hangman_allowsub'] = 'Dozvoli znak - u riječima'; +$string[ 'hangman_imageset'] = 'Odaberite sliku vješala'; +$string[ 'hangman_language'] = 'Jezik riječi'; +$string[ 'hangman_maxtries'] = 'Broj riječi po igri'; +$string[ 'hangman_options'] = 'Postavke vješala'; +$string[ 'hangman_showcorrectanswer'] = 'Prikaži ispravan odgovor nakon završetka'; +$string[ 'hangman_showfirst'] = 'Prikaži prvo slovo vješala'; +$string[ 'hangman_showlast'] = 'Prikaži zadnje slovo vješala'; +$string[ 'hangman_showquestion'] = 'Prikaži pitanje?'; +$string[ 'hiddenpicture_across'] = 'Ćelije vodoravno'; +$string[ 'hiddenpicture_down'] = 'Ćelije okomito'; +$string[ 'hiddenpicture_height'] = 'Postavi visinu slike na'; +$string[ 'hiddenpicture_options'] = 'Postavke skrivene slike'; +$string[ 'hiddenpicture_pictureglossary'] = 'Rječnik za glavno pitanje i sliku'; +$string[ 'hiddenpicture_width'] = 'Postavi širinu slike na'; +$string[ 'millionaire_background'] = 'Boja pozadine'; +$string[ 'millionaire_options'] = 'Postavke Milijunaša'; +$string[ 'millionaire_shuffle'] = 'Izmješaj pitanja'; +$string[ 'snakes_background'] = 'Pozadina'; +$string[ 'snakes_options'] = 'Postavke \'Zmije i ljestve\''; +$string[ 'sourcemodule'] = 'Izvor pitanja'; +$string[ 'sourcemodule_book'] = 'Odaberite knjigu'; +$string[ 'sourcemodule_glossary'] = 'Odaberite rječnik'; +$string[ 'sourcemodule_glossarycategory'] = 'Odaberite kategoriju rječnika'; +$string[ 'sourcemodule_include_subcategories'] = 'Uključi podkategorije'; +$string[ 'sourcemodule_question'] = 'Pitanja'; +$string[ 'sourcemodule_questioncategory'] = 'Kategorija pitanja'; +$string[ 'sourcemodule_quiz'] = 'Odaberite igru'; +$string[ 'sudoku_maxquestions'] = 'Maksimalan broj pitanja'; +$string[ 'sudoku_options'] = 'Sudoku postavke'; +$string[ 'toptext'] = 'Tekst na vrhu'; + +//preview.php +$string[ 'only_teachers'] = 'Samo učitelj može vidjeti ovu stranicu'; +$string[ 'preview'] = 'Pregled'; + +//review.php +$string[ 'attempts'] = 'Pokušaji'; +$string[ 'completedon'] = 'Završeno'; +$string[ 'outof'] = '{$a->grade} od maksimalno {$a->maxgrade}'; +$string[ 'review'] = 'Pregled'; +$string[ 'reviewofattempt'] = 'Pregled pokušaja {$a}'; +$string[ 'startagain'] = 'Ponovo igraj'; +$string[ 'timetaken'] = 'Proteklo vrijeme'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Obriši statistiku'; +$string[ 'computerepetitions'] = 'Ponovo izračunaj statistiku'; +$string[ 'feedbacks'] = 'Poruke ispravnih odgovora'; +$string[ 'repetitions'] = 'Ponavljanja'; + +//showattempts.php +$string[ 'lastip'] = 'Adresa računala'; +$string[ 'showsolution'] = 'Rješenje'; +$string[ 'timefinish'] = 'Kraj igre'; +$string[ 'timelastattempt'] = 'Posljednji pokušaj'; +$string[ 'timestart'] = 'Početak'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Pokušaj ponovo'; +$string[ 'continueattemptgame'] = 'Nastavi sa prethodnim pokušajem ove igre'; +$string[ 'reattemptgame'] = 'Ponovni pokušaj igre'; +$string[ 'yourfinalgradeis'] = 'Vaša konačna ocjena za ovu igru je {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/it/game.php b/lang/it/game.php new file mode 100644 index 0000000..d3c0941 --- /dev/null +++ b/lang/it/game.php @@ -0,0 +1,305 @@ +Dobrodošli!

    Za početak igre odaberite riječ.

    '; +$string[ 'letter'] = 'slovo'; +$string[ 'letters'] = 'slova'; +$string[ 'nextgame'] = 'Nova igra'; +$string[ 'no_words'] = 'una o più parole non sono state trovate'; +$string[ 'print'] = 'Ispiši'; +$string[ 'win'] = 'congratulazioni!!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Kraj igre'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'la frase giusta era: '; +$string[ 'hangman_correct_word'] = 'la parola giusta era: '; +$string[ 'hangman_gradeinstance'] = 'Ocjena u cijeloj igri'; +$string[ 'hangman_letters'] = 'Slova: '; +$string[ 'hangman_restletters_many'] = 'Imate još {$a} pokušaja'; +$string[ 'hangman_restletters_one'] = 'Imate još SAMO 1 pokušaj'; +$string[ 'hangman_wrongnum'] = 'Krivo: %%d od %%d'; +$string[ 'nextword'] = 'Sljedeća riječ'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Ocjeni glavni odgovor'; +$string[ 'hiddenpicture_nocols'] = 'Treba zadati broj stupaca vodoravno'; +$string[ 'hiddenpicture_nomainquestion'] = 'Nije pronađen ni jedan zapis u rječniku {$a->name} sa pridruženom slikom'; +$string[ 'hiddenpicture_norows'] = 'Treba zadati broj stupaca okomito'; +$string[ 'must_select_glossary'] = 'Morate odabrati rječnik'; +$string[ 'noglossaryentriesfound'] = 'Non sono state trovate voci di glossario'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Morate odabrati kategoriju pitanja'; +$string[ 'millionaire_must_select_quiz'] = 'Morate odabrati tip igre'; + +//report/overview/report.php +$string[ 'allattempts'] = 'mostra tutti i tentativi'; +$string[ 'allstudents'] = 'mostra tutti $a'; +$string[ 'attemptsonly'] = 'indica solo gli studenti che hanno svolto tentativi'; +$string[ 'deleteattemptcheck'] = 'Sei sicbookquiz_emptyuro che tu vuoi eliminare completamente questi tentativi?'; +$string[ 'displayoptions'] = 'mostrare i fattori'; +$string[ 'downloadods'] = 'salvare in formato ODS'; +$string[ 'feedback'] = 'risposta'; +$string[ 'noattemptsonly'] = 'mostra solo $a che non presentano tentativi'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring Hanno fatto $a->attemptnum tentativi'; +$string[ 'pagesize'] = 'domande per pagina:'; +$string[ 'reportoverview'] = 'sommario'; +$string[ 'selectall'] = 'seleziona tutti'; +$string[ 'selectnone'] = 'deseleziona tutti'; +$string[ 'showdetailedmarks'] = 'mostra i dettagli delle valutazioni'; +$string[ 'startedon'] = 'Započeto'; +$string[ 'timecompleted'] = 'Završeno'; +$string[ 'unfinished'] = 'nije završeno'; +$string[ 'withselected'] = 'con i file selezionati'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Broju sudoku zadataka koji će se napraviti'; +$string[ 'sudoku_create_start'] = 'Započni pravljenje sudou zadataka'; +$string[ 'sudoku_creating'] = 'Pravim {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Kraj igre'; +$string[ 'sudoku_guessnumber'] = 'Pogodite točan broj'; +$string[ 'sudoku_noentriesfound'] = 'U rječniku nije pronađena ni jedna riječ'; + +//export.php +$string[ 'export'] = 'Izvoz'; +$string[ 'html_hascheckbutton'] = 'Sadrži tipku za provjeru:'; +$string[ 'html_hasprintbutton'] = 'Sadrži tipku za ispis:'; +$string[ 'html_title'] = 'Naslov stranice:'; +$string[ 'javame_createdby'] = 'Autor:'; +$string[ 'javame_description'] = 'Opis:'; +$string[ 'javame_filename'] = 'Ime datoteke:'; +$string[ 'javame_icon'] = 'Ikona:'; +$string[ 'javame_maxpictureheight'] = 'Maksimalna visina slike:'; +$string[ 'javame_maxpicturewidth'] = 'Maksimalna širina slike:'; +$string[ 'javame_name'] = 'Ime:'; +$string[ 'javame_type'] = 'Tip:'; +$string[ 'javame_vendor'] = 'Prodavač:'; +$string[ 'javame_version'] = 'Verzija:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Kraj igre'; +$string[ 'html_hangman_new'] = 'nuovo'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Pitaj publiku'; +$string[ 'millionaire_info_people'] = 'Publika kaže'; +$string[ 'millionaire_info_telephone'] = 'Mislim da je točan odgovor '; +$string[ 'millionaire_info_wrong_answer'] = 'Vaš odgovor je pogrešan
    Točan odgovor je:'; +$string[ 'millionaire_quit'] = 'Kraj'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Za Milijunaša izvor mora biti {$a} ili pitanja i ne'; +$string[ 'millionaire_telephone'] = 'Pomoć zovi'; +$string[ 'must_select_questioncategory'] = 'Morate odabrati kategoriju pitanja'; +$string[ 'must_select_quiz'] = 'Morate odabrati igru'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Rezultat'; + +//index.php +$string[ 'modulename'] = 'igru'; +$string[ 'modulenameplural'] = 'Igre'; +$string[ 'pluginname'] = 'igru'; + +//lib.php +$string[ 'attempt'] = 'Pokušaj'; +$string[ 'bookquiz_questions'] = 'Pridruži kategorije pitanja poglavlju knjige'; +$string[ 'export_to_html'] = 'Izvoz u HTML'; +$string[ 'export_to_javame'] = 'Izvoz u Javame'; +$string[ 'game_bookquiz'] = 'Knjiga sa pitanjima'; +$string[ 'game_cross'] = 'Križaljka'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Vješalo'; +$string[ 'game_hiddenpicture'] = 'Skrivena slika'; +$string[ 'game_millionaire'] = 'Milijunaš'; +$string[ 'game_snakes'] = 'Zmije i Ljestve'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Informacije'; +$string[ 'noattempts'] = 'Ovu igru nitko još nije pokušao igrati'; +$string[ 'percent'] = 'Postotak'; +$string[ 'results'] = 'Rezultati'; +$string[ 'showanswers'] = 'Prikaži odgovore'; +$string[ 'showattempts'] = 'mostra i tentativi'; + +//locallib.php +$string[ 'attemptfirst'] = 'Prvi pokušaj'; +$string[ 'attemptlast'] = 'Zadnji pokušaj'; +$string[ 'gradeaverage'] = 'Prosječna ocjena'; +$string[ 'gradehighest'] = 'Najveća ocjena'; + +//mod_form.php +$string[ 'bottomtext'] = 'Tekst na dnu'; +$string[ 'cross_layout'] = 'Raspored'; +$string[ 'cross_layout0'] = 'Fraze ispod križaljke'; +$string[ 'cross_layout1'] = 'Fraze desno od križaljke'; +$string[ 'cross_maxcols'] = 'Maksimaln broj stupaca u križaljci'; +$string[ 'cross_maxwords'] = 'Maksimalan broj riječi u križaljci'; +$string[ 'cross_options'] = 'opzioni di incrocio'; +$string[ 'cryptex_maxcols'] = 'Maksimalan broj stupaca/redova cryptexa'; +$string[ 'cryptex_maxtries'] = 'massimo numero di tentativi'; +$string[ 'cryptex_maxwords'] = 'Maksimalan broj riječi cryptexa'; +$string[ 'cryptex_options'] = 'opzioni nel criptoverba'; +$string[ 'grademethod'] = 'Metoda ocjenjivanja'; +$string[ 'hangman_allowspaces'] = 'Dozvoli razmake u riječima'; +$string[ 'hangman_allowsub'] = 'Dozvoli znak - u riječima'; +$string[ 'hangman_imageset'] = 'Odaberite sliku vješala'; +$string[ 'hangman_language'] = 'Jezik riječi'; +$string[ 'hangman_maxtries'] = 'Broj riječi po igri'; +$string[ 'hangman_options'] = 'opzioni del gioco dell\'impiccato'; +$string[ 'hangman_showcorrectanswer'] = 'Prikaži ispravan odgovor nakon završetka'; +$string[ 'hangman_showfirst'] = 'Prikaži prvo slovo vješala'; +$string[ 'hangman_showlast'] = 'Prikaži zadnje slovo vješala'; +$string[ 'hangman_showquestion'] = 'Prikaži pitanje?'; +$string[ 'hiddenpicture_across'] = 'Ćelije vodoravno'; +$string[ 'hiddenpicture_down'] = 'Ćelije okomito'; +$string[ 'hiddenpicture_height'] = 'Postavi visinu slike na'; +$string[ 'hiddenpicture_options'] = 'opzioni della figura nascosta'; +$string[ 'hiddenpicture_pictureglossary'] = 'Rječnik za glavno pitanje i sliku'; +$string[ 'hiddenpicture_width'] = 'Postavi širinu slike na'; +$string[ 'millionaire_background'] = 'Boja pozadine'; +$string[ 'millionaire_options'] = 'opzioni del gioco del milionario'; +$string[ 'millionaire_shuffle'] = 'Izmješaj pitanja'; +$string[ 'snakes_background'] = 'Pozadina'; +$string[ 'snakes_options'] = 'opzioni del gioco delle serpentine'; +$string[ 'sourcemodule'] = 'Izvor pitanja'; +$string[ 'sourcemodule_book'] = 'Odaberite knjigu'; +$string[ 'sourcemodule_glossary'] = 'Odaberite rječnik'; +$string[ 'sourcemodule_glossarycategory'] = 'Odaberite kategoriju rječnika'; +$string[ 'sourcemodule_include_subcategories'] = 'Uključi podkategorije'; +$string[ 'sourcemodule_question'] = 'Pitanja'; +$string[ 'sourcemodule_questioncategory'] = 'Kategorija pitanja'; +$string[ 'sourcemodule_quiz'] = 'Odaberite igru'; +$string[ 'sudoku_maxquestions'] = 'Maksimalan broj pitanja'; +$string[ 'sudoku_options'] = 'opzioni del gioco del Sudoku'; +$string[ 'toptext'] = 'testo in cima'; + +//preview.php +$string[ 'only_teachers'] = 'Samo učitelj može vidjeti ovu stranicu'; +$string[ 'preview'] = 'Pregled'; + +//review.php +$string[ 'attempts'] = 'Pokušaji'; +$string[ 'completedon'] = 'Završeno'; +$string[ 'outof'] = '{$a->grade} od maksimalno {$a->maxgrade}'; +$string[ 'review'] = 'Pregled'; +$string[ 'reviewofattempt'] = 'Pregled pokušaja {$a}'; +$string[ 'startagain'] = 'Ponovo igraj'; +$string[ 'timetaken'] = 'Proteklo vrijeme'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Clear statistics'; +$string[ 'computerepetitions'] = 'ricalcola le statistiche'; +$string[ 'feedbacks'] = 'Poruke ispravnih odgovora'; +$string[ 'repetitions'] = 'ripetizioni'; + +//showattempts.php +$string[ 'lastip'] = 'Adresa računala'; +$string[ 'showsolution'] = 'Rješenje'; +$string[ 'timefinish'] = 'Kraj igre'; +$string[ 'timelastattempt'] = 'Posljednji pokušaj'; +$string[ 'timestart'] = 'Početak'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Pokušaj ponovo'; +$string[ 'continueattemptgame'] = 'Nastavi sa prethodnim pokušajem ove igre'; +$string[ 'reattemptgame'] = 'Ponovni pokušaj igre'; +$string[ 'yourfinalgradeis'] = 'Vaša konačna ocjena za ovu igru je {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/lt/game.php b/lang/lt/game.php new file mode 100644 index 0000000..32d4e83 --- /dev/null +++ b/lang/lt/game.php @@ -0,0 +1,306 @@ +Sveiki!

    Norėdami pradėti, paspauskite bet kurį kryžiažodžio langelį. Atsiradusiame lauke įveskite savo atsakymą.

    '; // '

    Welcome!

    Click on a word to begin.

    '; +$string[ 'letter'] = 'raidė'; // 'letter'; +$string[ 'letters'] = 'raidės'; // 'letters'; +$string[ 'nextgame'] = 'Naujas žaidimas'; // 'New game'; +$string[ 'no_words'] = 'Nėra žodžių'; // 'There are no words'; +$string[ 'print'] = 'Spausdinti'; // 'Print'; +$string[ 'win'] = 'Sveikiname !!!'; // 'Congratulations !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Žaidimo pabaiga'; // 'End of game'; + +//db/access.php +$string[ 'game:attempt'] = 'Pradėti žaidimą'; // 'Play game'; +$string[ 'game:deleteattempts'] = 'Ištrinti bandymus'; // 'Delete attempts'; +$string[ 'game:grade'] = 'Rašyti žaidimų įvertinimus'; // 'Grade games manually'; +$string[ 'game:manage'] = 'Tvarkyti'; // 'Manage'; +$string[ 'game:manageoverrides'] = 'Tvarkyti žaidimo išimtis'; // 'Manage game overrides'; +$string[ 'game:preview'] = 'Peržiūrėti žaidimus'; // 'Preview Games'; +$string[ 'game:reviewmyattempts'] = 'Peržiūrėti bandymus'; // 'reviewmyattempts'; +$string[ 'game:view'] = 'žiūrėti'; // 'view'; +$string[ 'game:viewreports'] = 'Peržiūrėti ataskaitas'; // 'viewreports'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Teisinga frazė buvo: '; // 'The correct phrase was: '; +$string[ 'hangman_correct_word'] = 'Teisingas žodis buvo: '; // 'The correct word was: '; +$string[ 'hangman_gradeinstance'] = 'Viso žaidimo įvertinimas'; // 'Grade in whole game'; +$string[ 'hangman_letters'] = 'Raidės: '; // 'Letters: '; +$string[ 'hangman_restletters_many'] = 'Jums liko {$a} bandymai'; // 'You have {$a} tries'; +$string[ 'hangman_restletters_one'] = 'Jums liko TIK 1 - PASKUTINIS bandymas'; // 'You have ONLY 1 try'; +$string[ 'hangman_wrongnum'] = 'Neteisingai: %d iš %d'; // 'Wrong: %d out of %d'; +$string[ 'nextword'] = 'Sekantis žodis'; // 'Next word'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Vertinti pagrindinį atsakymą'; // 'Grade main answer'; +$string[ 'hiddenpicture_nocols'] = 'Reikia nurodyti stulpelių skaičių'; // 'Have to specify the number of cols horizontaly'; +$string[ 'hiddenpicture_nomainquestion'] = 'Žodyne {$a->name} nėra įrašo su pridėta nuotrauka'; // 'There are no glossary entries on glossary {$a->name} with an attached picture'; +$string[ 'hiddenpicture_norows'] = 'Reikia nurodyti eilučių skaičių'; // 'Have to specify the number of cols verticaly'; +$string[ 'must_select_glossary'] = 'Privalote parinkti žodyną'; // 'You must select a glossary'; +$string[ 'no_questions'] = "Nėra klausimų"; // "There are no questions"; +$string[ 'noglossaryentriesfound'] = 'Žodyne nerasta nei vieno įrašo'; // 'No glossary entries found'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Pasirinkite klausimo kategoriją'; // 'You must select one question category'; +$string[ 'millionaire_must_select_quiz'] = 'Pasirinkite klausimų sąrašą'; // 'You must select one quiz'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Rodyti visus bandymus'; // 'Show all tries'; +$string[ 'allstudents'] = 'Rodyti visus $a'; // 'Show all $a'; +$string[ 'attemptsonly'] = 'Rodyti tik bandžiusius spręsti studentus'; // 'Show only students with attempts'; +$string[ 'deleteattemptcheck'] = 'Ar jūs tikrai norite visiškai pašalinti šiuos bandymus?'; // 'Are you absolutely sure you want to completely delete these attempts?'; +$string[ 'displayoptions'] = 'Parodyti parinktis'; // 'Display options'; +$string[ 'downloadods'] = 'Atsiųsti ODS formatu'; // 'Download in ODS format'; +$string[ 'feedback'] = 'Atsiliepimai'; // 'Feedback'; +$string[ 'noattemptsonly'] = 'Rodyti tiktai $a nebandžiusius spręsti'; // 'Show $a with no attempts only'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring atliko $a->attemptnum bandymų'; // '$a->studentnum $a->studentstring have made $a->attemptnum attempts'; +$string[ 'pagesize'] = 'Klausimų viename puslapyje:'; // 'Questions per page:'; +$string[ 'reportoverview'] = 'Apžvalga'; // 'Overview'; +$string[ 'selectall'] = 'Pažymėti viską'; // 'Select all'; +$string[ 'selectnone'] = 'Panaikinti žymėjimą'; // 'Deselect all'; +$string[ 'showdetailedmarks'] = 'Rodyti vertininmą išsamiai'; // 'Show mark details'; +$string[ 'startedon'] = 'Pradėta'; // 'Started on'; +$string[ 'timecompleted'] = 'Pabaigta'; // 'Completed'; +$string[ 'unfinished'] = 'atverti'; // 'open'; +$string[ 'withselected'] = 'Su pažymėtais'; // 'With selected'; + +//snakes/play.php +$string[ 'snakes_dice'] = 'Žaidimo kauliukas, $a taškų.'; // 'Dice, $a spots.'; +$string[ 'snakes_player'] = 'Žaidėjo, vieta: $a.'; // 'Player, position: $a.'; + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Sukuriamų sudoku žaidimų skaičius'; // 'Number of sudokus that will be created'; +$string[ 'sudoku_create_start'] = 'Pradėti kurti sudoku žaidimus'; // 'Start creating sudokus'; +$string[ 'sudoku_creating'] = 'Kuriamas {$a} sudoku'; // 'Creating {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Baigti žaidimą'; // 'End of game'; +$string[ 'sudoku_guessnumber'] = 'Spėti teisingą skaičių'; // 'Guess the correct number'; +$string[ 'sudoku_noentriesfound'] = 'Žodyne nerasta nei vieno įrašo'; // 'No words found in glossary'; + +//export.php +$string[ 'export'] = 'Eksportuoti'; // 'Export'; +$string[ 'html_hascheckbutton'] = 'Yra tikrinimo mygtukas:'; // 'Has check button:'; +$string[ 'html_hasprintbutton'] = 'Yra spausdinimo mygtukas:'; // 'Has print button:'; +$string[ 'html_title'] = 'html antraštė:'; // 'Title of html:'; +$string[ 'javame_createdby'] = 'Autorius:'; // 'Created by:'; +$string[ 'javame_description'] = 'Aprašymas:'; // 'Description:'; +$string[ 'javame_filename'] = 'Failo vardas:'; // 'Filename:'; +$string[ 'javame_icon'] = 'Piktograma:'; // 'Icon:'; +$string[ 'javame_maxpictureheight'] = 'Maksimalus nuotraukos aukštis:'; // 'Max picture height:'; +$string[ 'javame_maxpicturewidth'] = 'Maksimalus nuotraukos plotis:'; // 'Max picture width:'; +$string[ 'javame_name'] = 'Pavadinimas:'; // 'Name:'; +$string[ 'javame_type'] = 'Tipas:'; // 'Type:'; +$string[ 'javame_vendor'] = 'Pardavėjas:'; // 'Vendor:'; +$string[ 'javame_version'] = 'Versija:'; // 'Version:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Žaidimas baigtas'; // 'Game over'; +$string[ 'html_hangman_new'] = 'Naujas žaidimas'; // 'New'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Salės pagalba'; // 'Help of people'; +$string[ 'millionaire_info_people'] = 'Salė sako'; // 'People say'; +$string[ 'millionaire_info_telephone'] = 'Man atrodo teisingas atsakymas yra '; // 'I think that the correct answer is '; +$string[ 'millionaire_info_wrong_answer'] = 'Jūsų atsakymas neteisingas.
    Teisingas atsakymas yra:'; // 'Your answer is wrong
    The right answer is:'; +$string[ 'millionaire_quit'] = 'Baigti'; // 'Quit'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Milijonierio žaidimui duomenys turi būti {$a} arba klausimai, bet ne'; // 'For the millionaire the source must be {$a} or questions and not'; +$string[ 'millionaire_telephone'] = 'Pagalba telefonu'; // 'Help of telephone'; +$string[ 'must_select_questioncategory'] = 'Pasirinkite klausimo kategoriją'; // 'You must select a question category'; +$string[ 'must_select_quiz'] = 'Pasirinkite klausimų sąrašą'; // 'You must select a quiz'; + +//exporthtml_snakes.php +$string[ 'html_snakes_check'] = 'Tikrinti'; // 'Check'; +$string[ 'html_snakes_correct'] = 'Teisingai!'; // 'Correct!'; +$string[ 'html_snakes_no_selection'] = 'Turite ką nors pažymėti!'; // 'Have to select something!'; +$string[ 'html_snakes_wrong'] = "Jūsų atsakymas neteisingas. Pasiliekate toje pačioje vietoje."; // "Your answer isn't correct. Stay on the same seat."; +$string[ 'score'] = 'Rezultatas'; // 'Score'; + +//index.php +$string[ 'modulename'] = 'Žaidimas'; // 'Game'; +$string[ 'modulenameplural'] = 'Žaidimai'; // 'Games'; +$string[ 'pluginadministration'] = 'Žaidimo valdymas'; // 'Game administration'; +$string[ 'pluginname'] = 'Žaidimai'; // 'Game'; + +//lib.php +$string[ 'attempt'] = 'Bandyti'; // 'Attempt'; +$string[ 'bookquiz_questions'] = 'Susieti klausimų grupes su knygos skyriumi'; // 'Associate question categories to chapter of book'; +$string[ 'export_to_html'] = 'Eksportuoti į HTML'; // 'Export to HTML'; +$string[ 'export_to_javame'] = 'Eksportuoti į Java'; // 'Export to Javame'; +$string[ 'game_bookquiz'] = 'Knyga su klausimais'; // 'Book with questions'; +$string[ 'game_cross'] = 'Kryžiažodis'; // 'Crossword'; +$string[ 'game_cryptex'] = 'Cryptex'; // 'Cryptex'; +$string[ 'game_hangman'] = 'Kartuvės'; // 'Hangman'; +$string[ 'game_hiddenpicture'] = 'Paslėpta nuotrauka'; // 'Hidden Picture'; +$string[ 'game_millionaire'] = 'Milijonierius'; // 'Millionaire'; +$string[ 'game_snakes'] = 'Gyvatės ir kopėčios'; // 'Snakes and Ladders'; +$string[ 'game_sudoku'] = 'Sudoku'; // 'Sudoku'; +$string[ 'info'] = 'Informacija'; // 'Info'; +$string[ 'noattempts'] = 'Nebuvo bandyta žaisti šio žaidimo'; // 'No attempts have been made on this game'; +$string[ 'percent'] = 'Procentai'; // 'Percent'; +$string[ 'reset_game_all'] = 'Šalinti bandymus iš visų žaidimų'; // 'Delete tries from all games'; +$string[ 'reset_game_deleted_course'] = 'Šalinti bandymus iš pašalintų žaidimų'; // 'Delete tries from deleted courses'; +$string[ 'results'] = 'Rezultatas'; // 'Results'; +$string[ 'showanswers'] = 'Rodyti atsakymus'; // 'Show answers'; +$string[ 'showattempts'] = 'Rodyti bandymus'; // 'Show attempts'; + +//locallib.php +$string[ 'attemptfirst'] = 'Pirmas bandymas'; // 'First attempt'; +$string[ 'attemptlast'] = 'Paskutinis bandymas'; // 'Last attempt'; +$string[ 'convertfrom'] = '-'; // '-'; +$string[ 'convertto'] = '-'; // '-'; +$string[ 'gradeaverage'] = 'Vidurkis'; // 'Average grade'; +$string[ 'gradehighest'] = 'Aukščiausias rezultatas'; // 'Highest grade'; + +//mod_form.php +$string[ 'bottomtext'] = 'Tekstas puslapio apačioje'; // 'Text at the bottom of page'; +$string[ 'cross_layout'] = 'Išdėstymas'; // 'Layout'; +$string[ 'cross_layout0'] = 'Frazės po kryžiažodžiu'; // 'Phrases on the bottom of cross'; +$string[ 'cross_layout1'] = 'Frazės kryžiažodžio dešinėje'; // 'Phrases on the right of cross'; +$string[ 'cross_maxcols'] = 'Maksimalus stulpelių skaičius kryžiažodyje'; // 'Maximum number of cols of crossword'; +$string[ 'cross_maxwords'] = 'Maksimalus žodžių skaičius kryžiažodyje'; // 'Maximum number of words of crossword'; +$string[ 'cross_options'] = 'Kryžiažodžio parametrai'; // 'Crossword options'; +$string[ 'cryptex_maxcols'] = 'Maksimalus stulpelių/eilučių skaičius cryptex žaidime'; // 'Maximum number of cols/rows in cryptex'; +$string[ 'cryptex_maxtries'] = 'Maksimalus bandymų skaičius'; // 'Max tries'; +$string[ 'cryptex_maxwords'] = 'Maksimalus žodžių skaičius cryptex žaidime'; // 'Maximum number of words in cryptex'; +$string[ 'cryptex_options'] = 'Cryptex žaidimo parametrai'; // 'Cryptex options'; +$string[ 'gameclose'] = 'Užbaigti žaidimą'; // 'Close the game'; +$string[ 'gameopen'] = 'Pradėti žaidimą'; // 'Open the game'; +$string[ 'grademethod'] = 'Vertinimo metodas'; // 'Grading method'; +$string[ 'hangman_allowspaces'] = 'Leisti naudoti tarpus žodžiuose'; // 'Allow spaces in words'; +$string[ 'hangman_allowsub'] = 'Leisti naudoti "-" (brūkšnelio ženklą) žodžiuose'; // 'Allow the symbol - in words'; +$string[ 'hangman_imageset'] = 'Parinkite Kartuvių žaidimo paveiksliuką'; // 'Select the images of hangman'; +$string[ 'hangman_language'] = 'Žodžių kalba'; // 'Language of words'; +$string[ 'hangman_maximum_number_of_errors'] = 'Maksimalus klaidų skaičius (turi būti paveiksliukai kiekvienai klaidai - hangman_0.jpg, hangman_1.jpg, ...)'; // 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +$string[ 'hangman_maxtries'] = 'Žodžių skaičius viename žaidime'; // 'Number of words per game'; +$string[ 'hangman_options'] = 'Kartuvių žaidimo parametrai'; // 'Hangman options'; +$string[ 'hangman_showcorrectanswer'] = 'Pabaigoje parodyti teisingą atsakymą'; // 'Show the correct answer after the end'; +$string[ 'hangman_showfirst'] = 'Rodyti pirmą žodžio raidę'; // 'Show first letter of hangman'; +$string[ 'hangman_showlast'] = 'Rodyti paskutinę žodžio raidę'; // 'Show last letter of hangman'; +$string[ 'hangman_showquestion'] = 'Rodyti klausimus?'; // 'Show the questions ?'; +$string[ 'hiddenpicture_across'] = 'Langeliai horizontaliai'; // 'Cells horizontal'; +$string[ 'hiddenpicture_down'] = 'Langeliai vertikaliai'; // 'Cells down'; +$string[ 'hiddenpicture_height'] = 'Nustatyti nuotraukos aukštį'; // 'Set height of picture to'; +$string[ 'hiddenpicture_options'] = '\'Paslėpta nuotrauka\' žaidimo parametrai'; // '\'Hidden Picture\' options'; +$string[ 'hiddenpicture_pictureglossary'] = 'Pagrindinio klausimo ir nuotraukos žodymas'; // 'The glossary for main question and picture'; +$string[ 'hiddenpicture_width'] = 'Nustatyti nuotraukos plotį'; // 'Set width of picture to'; +$string[ 'millionaire_background'] = 'Fono spalva'; // 'Background color'; +$string[ 'millionaire_options'] = 'Milijonieriaus žaidimo parametrai'; // 'Millionaire\' options'; +$string[ 'millionaire_shuffle'] = 'Klausimų parinkimas atsitiktine tvarka'; // 'Randomize questions'; +$string[ 'snakes_background'] = 'Fonas'; // 'Background'; +$string[ 'snakes_cols'] = 'Stulpeliai'; // 'Cols'; +$string[ 'snakes_data'] = 'Gyvačių ir kopėčių padėtis'; // 'Positions of Snakes and Ladders'; +$string[ 'snakes_file'] = 'Fono failas'; // 'File for background'; +$string[ 'snakes_footerx'] = 'Tarpas apačioje kairėje'; // 'Space at bootom left'; +$string[ 'snakes_footery'] = 'Tarpas apačioje dešinėje'; // 'Space at bottom right'; +$string[ 'snakes_headerx'] = 'Tarpas viršuje kairėje'; // 'Space at up left'; +$string[ 'snakes_headery'] = 'Tarpas viršuje dešinėje'; // 'Space at up right'; +$string[ 'snakes_options'] = '\'Gyvatės ir kopėčios\' žaidimo parametrai'; // '\'Snakes and Ladders\' options'; +$string[ 'snakes_rows'] = 'Eilutės'; // 'Rows'; +$string[ 'sourcemodule'] = 'Klausimų šaltinis'; // 'Source of questions'; +$string[ 'sourcemodule_book'] = 'Parinkite knygą'; // 'Select a book'; +$string[ 'sourcemodule_glossary'] = 'Parinkite žodyną'; // 'Select glossary'; +$string[ 'sourcemodule_glossarycategory'] = 'Parinkite žodyno grupę'; // 'Select category of glossary'; +$string[ 'sourcemodule_include_subcategories'] = 'Įtraukti pogrupį'; // 'Include subcategories'; +$string[ 'sourcemodule_question'] = 'Klausimai'; // 'Questions'; +$string[ 'sourcemodule_questioncategory'] = 'Parinkite klausimų grupę'; // 'Select question category'; +$string[ 'sourcemodule_quiz'] = 'Parinkite kontrolinių klausimų sąrašą'; // 'Select quiz'; +$string[ 'sudoku_maxquestions'] = 'Didžiausias klausimų skaičius'; // 'Maximum number of questions'; +$string[ 'sudoku_options'] = 'Sudoku parametrai'; // 'Sudoku options'; +$string[ 'toptext'] = 'Tekstas puslapio viršuje'; // 'Text at the top of page'; +$string[ 'userdefined'] = 'Naudotojo apibrėžtas'; // 'User defined'; + +//preview.php +$string[ 'only_teachers'] = 'Tik mokytojai gali matyti šį puslapį'; // 'Only teacher can see this page'; +$string[ 'preview'] = 'Peržiūrėti'; // 'Preview'; + +//review.php +$string[ 'attempts'] = 'Bandymai'; // 'Attempts'; +$string[ 'completedon'] = 'Išspręsta'; // 'Completed on'; +$string[ 'outof'] = '{$a->grade} balų iš {$a->maxgrade}'; // '{$a->grade} out of a maximum of {$a->maxgrade}'; +$string[ 'review'] = 'Peržiūrėti'; // 'Review'; +$string[ 'reviewofattempt'] = 'Peržiūrėti bandymą {$a}'; // 'Review of Attempt {$a}'; +$string[ 'showall'] = 'Parodyti visus'; // 'Show all'; +$string[ 'startagain'] = 'Pradėti iš naujo'; // 'Start again'; +$string[ 'timetaken'] = 'Užėmė laiko'; // 'Time taken'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Išvalyti statistiką'; // 'Clear statistics'; +$string[ 'computerepetitions'] = 'Skaičiuoti statistiką iš naujo'; // 'Compute statistics again'; +$string[ 'feedbacks'] = 'Teisingų atsakymų pranešimai'; // 'Messages correct answer'; +$string[ 'repetitions'] = 'Pasikartojimai'; // 'Repetitions'; + +//showattempts.php +$string[ 'lastip'] = 'Studento IP'; // 'IP student'; +$string[ 'showsolution'] = 'Sprendimas'; // 'solution'; +$string[ 'timefinish'] = 'Žaidimas pabaigtas'; // 'End of game'; +$string[ 'timelastattempt'] = 'Paskutinins bandymas'; // 'Last attempt'; +$string[ 'timestart'] = 'Pradėta'; // 'Start'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Pradėti dabar žaidimą'; // 'Attempt game now'; +$string[ 'continueattemptgame'] = 'Tęsti anksčiau pradėtą žaidimą'; // 'Continue a previous attempt of game'; +$string[ 'gameclosed'] = 'Žaidimas užbaigtas {$a}'; // 'This game closed on {$a}'; +$string[ 'gamecloseson'] = 'Žaidimas bus baigiamas {$a}'; // 'This game will close at {$a}'; +$string[ 'gamenotavailable'] = 'Žaidimas nebus pradedamas iki {$a}'; // 'The game will not be available until {$a}'; +$string[ 'gameopenedon'] = 'Žaidimas bus pradedamas {$a}'; // 'This game opened at {$a}'; +$string[ 'reattemptgame'] = 'Bandyti žaidimą dar kartą'; // 'Reattempt game'; +$string[ 'yourfinalgradeis'] = 'Galutinis Jūsų žaidimo įvertinimas yra {$a}.'; // 'Your final grade for this game is {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//view.php $string[ 'comment'] = 'Comment'; diff --git a/lang/nl/game.php b/lang/nl/game.php new file mode 100644 index 0000000..d49e621 --- /dev/null +++ b/lang/nl/game.php @@ -0,0 +1,305 @@ +Welkom!

    Klik op een woord om te beginnen.'; +$string[ 'letter'] = 'letter'; +$string[ 'letters'] = 'letters'; +$string[ 'nextgame'] = 'Nieuw spel'; +$string[ 'no_words'] = 'Geen woorden gevonden'; +$string[ 'print'] = 'Print'; +$string[ 'win'] = 'Gefeliciteerd!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Einde van het spel'; + +//db/access.php +$string[ 'game:attempt'] = 'Speel het spel'; +$string[ 'game:deleteattempts'] = 'Verwijder pogingen'; +$string[ 'game:grade'] = 'Geef manueel punten'; +$string[ 'game:manage'] = 'Beheer'; +$string[ 'game:preview'] = 'Bekijk Spellen'; +$string[ 'game:reviewmyattempts'] = 'Bekijk mijn pogingen'; +$string[ 'game:view'] = 'Bekijk'; +$string[ 'game:viewreports'] = 'Bekijk het rapport'; + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'De juiste oplossing was:'; +$string[ 'hangman_correct_word'] = 'Het juiste woord was:'; +$string[ 'hangman_gradeinstance'] = 'Cijfer in het hele spel'; +$string[ 'hangman_letters'] = 'Letters'; +$string[ 'hangman_restletters_many'] = 'Je hebt {$a} pogingen'; +$string[ 'hangman_restletters_one'] = 'Je hebt slechts ÉÉN poging'; +$string[ 'hangman_wrongnum'] = 'Fout: %%d van de %%d'; +$string[ 'nextword'] = 'Volgende woord'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Cijfer hoofdantwoord'; +$string[ 'hiddenpicture_nocols'] = 'Het aantal kolommen horizontaal dient ingesteld te worden'; +$string[ 'hiddenpicture_nomainquestion'] = 'Er zijn geen woordenlijst onderdelen in woordenlijst {$a->name} met een toegevoegde afbeelding.'; +$string[ 'hiddenpicture_norows'] = 'Het aantal rijen verticaal dient ingesteld te worden'; +$string[ 'must_select_glossary'] = 'Je moet een woordenlijst kiezen'; +$string[ 'no_questions'] = "Geen vragen gevonden"; +$string[ 'noglossaryentriesfound'] = 'Geen woorden gevonden'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Je moet een vragencategorie kiezen'; +$string[ 'millionaire_must_select_quiz'] = 'Je moet één quiz kiezen'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Alle pogingen'; +$string[ 'allstudents'] = 'Alle leerlingen'; +$string[ 'attemptsonly'] = 'Laat alleen leerlingen met pogingen zien'; +$string[ 'deleteattemptcheck'] = 'Weet je zeker dat je deze pogingen wilt verwijderen?'; +$string[ 'displayoptions'] = 'Weergaveopties'; +$string[ 'downloadods'] = 'Download in ODS formaat'; +$string[ 'feedback'] = 'Reactie'; +$string[ 'noattemptsonly'] = 'Laat $a zonder pogingen zien'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring heeft $a->attemptnum pogingen gedaan'; +$string[ 'pagesize'] = 'Aantal vragen per pagina'; +$string[ 'reportoverview'] = 'Overzicht'; +$string[ 'selectall'] = 'Selecteer allemaal'; +$string[ 'selectnone'] = 'Deselecteer allemaal'; +$string[ 'showdetailedmarks'] = 'Laat markeringsdetails zien'; +$string[ 'startedon'] = 'Gestart op'; +$string[ 'timecompleted'] = 'Voltooid'; +$string[ 'unfinished'] = 'open'; +$string[ 'withselected'] = 'Met geselecteerde'; + +//snakes/play.php +$string[ 'snakes_dice'] = 'Dobbelsteen, $a ogen.'; +$string[ 'snakes_player'] = 'Speler, plaats: $a.'; + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Aantal sudokus die gemaakt worden'; +$string[ 'sudoku_create_start'] = 'Start met het maken van sudokus'; +$string[ 'sudoku_creating'] = 'Creëren van {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Einde van het sudoku spel'; +$string[ 'sudoku_guessnumber'] = 'Gok het correcte aantal'; +$string[ 'sudoku_noentriesfound'] = 'Geen woorden gevonden in de woordenlijst'; + +//export.php +$string[ 'export'] = 'Exporteer'; +$string[ 'html_hascheckbutton'] = 'Heeft een check-knop:'; +$string[ 'html_hasprintbutton'] = 'Heeft een print-knop:'; +$string[ 'html_title'] = 'Html-titel:'; +$string[ 'javame_createdby'] = 'Gemaakt door:'; +$string[ 'javame_description'] = 'Beschrijving:'; +$string[ 'javame_filename'] = 'Naam van de file:'; +$string[ 'javame_icon'] = 'Icoon:'; +$string[ 'javame_maxpictureheight'] = 'Max afbeeldingshoogte:'; +$string[ 'javame_maxpicturewidth'] = 'Max afbeeldingsbreedte:'; +$string[ 'javame_name'] = 'Naam:'; +$string[ 'javame_type'] = 'Type:'; +$string[ 'javame_vendor'] = 'Verkoper:'; +$string[ 'javame_version'] = 'Versie:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Spel voorbij'; +$string[ 'html_hangman_new'] = 'Nieuw'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Aan het publiek vragen'; +$string[ 'millionaire_info_people'] = 'Mensen zeggen'; +$string[ 'millionaire_info_telephone'] = 'Ik denk dat het juiste antwoord is...'; +$string[ 'millionaire_info_wrong_answer'] = 'Helaas, je antwoord is fout.
    Het goede antwoord is:'; +$string[ 'millionaire_quit'] = 'Stop'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Voor de miljonair moet de bron {$a} zijn of de vragen en niet'; +$string[ 'millionaire_telephone'] = 'Een hulplijn bellen'; +$string[ 'must_select_questioncategory'] = 'Je moet een vragencategorie kiezen'; +$string[ 'must_select_quiz'] = 'Je moet een quiz/test kiezen'; + +//exporthtml_snakes.php +$string[ 'html_snakes_check'] = 'Check'; +$string[ 'html_snakes_correct'] = 'Juist!'; +$string[ 'html_snakes_no_selection'] = 'Je moet iets aanduiden!'; +$string[ 'html_snakes_wrong'] = "Je antwoord is niet juist, je mag niet verdergaan op het bord."; +$string[ 'score'] = 'Score'; + +//index.php +$string[ 'modulename'] = 'Spel'; +$string[ 'modulenameplural'] = 'Spellen'; +$string[ 'pluginname'] = 'Spel'; + +//lib.php +$string[ 'attempt'] = 'Poging'; +$string[ 'bookquiz_questions'] = 'Associeer vraagcategorieën aan het hoofdstuk van dit boek.'; +$string[ 'export_to_html'] = 'Exporteer naar HTML'; +$string[ 'export_to_javame'] = 'Exporteer naar Javame'; +$string[ 'game_bookquiz'] = 'Boek met vragen'; +$string[ 'game_cross'] = 'Kruiswoord'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Galgje'; +$string[ 'game_hiddenpicture'] = 'Verborgen foto'; +$string[ 'game_millionaire'] = 'Miljonair'; +$string[ 'game_snakes'] = 'Slangen en Ladders'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Er zijn in deze quiz/test geen pogingen gedaan'; +$string[ 'percent'] = 'Percentage'; +$string[ 'results'] = 'Resultaten'; +$string[ 'showanswers'] = 'Laat antwoorden zien'; +$string[ 'showattempts'] = 'Toon pogingen'; + +//locallib.php +$string[ 'attemptfirst'] = 'Eerste poging'; +$string[ 'attemptlast'] = 'Laatste poging'; +$string[ 'gradeaverage'] = 'Gemiddeld cijfer'; +$string[ 'gradehighest'] = 'Hoogste cijfer'; + +//mod_form.php +$string[ 'bottomtext'] = 'Tekst aan onderkant'; +$string[ 'cross_layout'] = 'Layout'; +$string[ 'cross_layout0'] = 'Zinnen aan de onderkant van het kruiswoord'; +$string[ 'cross_layout1'] = 'Zinnen aan de rechterkant van het kruiswoord'; +$string[ 'cross_maxcols'] = 'Maximum aantal kolommen in kruiswoord'; +$string[ 'cross_maxwords'] = 'Maximum aantal woorden in het kruiswoord'; +$string[ 'cross_options'] = 'Kruiswoordraadsel opties'; +$string[ 'cryptex_maxcols'] = 'Maximum aantal kolommen/rijen in de cryptex'; +$string[ 'cryptex_maxtries'] = 'Max pogingen'; +$string[ 'cryptex_maxwords'] = 'Maximum aantal woorden in de cryptex'; +$string[ 'cryptex_options'] = 'Woordzoeker opties'; +$string[ 'grademethod'] = 'Becijferingsmethode'; +$string[ 'hangman_allowspaces'] = 'Sta spaties in woorden toe'; +$string[ 'hangman_allowsub'] = 'Sta het -symbool toe in woorden'; +$string[ 'hangman_imageset'] = 'Kies de plaatjes voor galgje'; +$string[ 'hangman_language'] = 'Taal van de woorden'; +$string[ 'hangman_maxtries'] = 'Aantal woorden per spel'; +$string[ 'hangman_options'] = 'Galgje opties'; +$string[ 'hangman_showcorrectanswer'] = 'Laat de juiste antwoorden aan het einde zien'; +$string[ 'hangman_showfirst'] = 'Laat de eerste letter bij galgje zien'; +$string[ 'hangman_showlast'] = 'Laat de laatste letter bij galgje zien'; +$string[ 'hangman_showquestion'] = 'Laat de vragen zien?'; +$string[ 'hiddenpicture_across'] = 'Cellen horizontaal'; +$string[ 'hiddenpicture_down'] = 'Cellen naar beneden'; +$string[ 'hiddenpicture_height'] = 'Stel de hoogte in op'; +$string[ 'hiddenpicture_options'] = '\'Verborgen afbeelding\' opties'; +$string[ 'hiddenpicture_pictureglossary'] = 'De woordenlijst voor de hoofdvraag'; +$string[ 'hiddenpicture_width'] = 'Stel de breedte van de afbeelding in op'; +$string[ 'millionaire_background'] = 'Achtergrondkleur'; +$string[ 'millionaire_options'] = 'Miljonair\' opties'; +$string[ 'millionaire_shuffle'] = 'Haal de vragen door elkaar'; +$string[ 'snakes_background'] = 'Achtergrond'; +$string[ 'snakes_cols'] = 'Kolommen'; +$string[ 'snakes_data'] = 'Spelbord'; +$string[ 'snakes_file'] = 'Achtergrond'; +$string[ 'snakes_footerx'] = 'Ruimte linksonder'; +$string[ 'snakes_footery'] = 'Ruimte rechtsonder'; +$string[ 'snakes_headerx'] = 'Ruimte linksboven'; +$string[ 'snakes_headery'] = 'Ruimte rechtsboven'; +$string[ 'snakes_options'] = '\'Slangen en ladders\' opties'; +$string[ 'snakes_rows'] = 'Rijen'; +$string[ 'sourcemodule'] = 'Vragenbron'; +$string[ 'sourcemodule_book'] = 'Kies een boek'; +$string[ 'sourcemodule_glossary'] = 'Kies een woordenlijst'; +$string[ 'sourcemodule_glossarycategory'] = 'Selecteer een categorie van de woordenlijst'; +$string[ 'sourcemodule_include_subcategories'] = 'Subcategorieën meerekenen'; +$string[ 'sourcemodule_question'] = 'Vragen'; +$string[ 'sourcemodule_questioncategory'] = 'Selecteer vragencategorie'; +$string[ 'sourcemodule_quiz'] = 'Selecteer quiz/test'; +$string[ 'sudoku_maxquestions'] = 'Maximum aantal vragen'; +$string[ 'sudoku_options'] = 'Sudoku opties'; +$string[ 'toptext'] = 'Teskt bovenaan de pagina'; +$string[ 'userdefined'] = 'Bepaald door de gebruiker'; + +//preview.php +$string[ 'only_teachers'] = 'Alleen de leraar kan deze pagina zien'; +$string[ 'preview'] = 'Voorbeeld'; + +//review.php +$string[ 'attempts'] = 'Pogingen'; +$string[ 'completedon'] = 'Voltooid op'; +$string[ 'outof'] = '{$a->grade} uit een maximum van {$a->maxgrade}'; +$string[ 'review'] = 'Bekijk'; +$string[ 'reviewofattempt'] = 'Overzicht van Poging {$a}'; +$string[ 'showall'] = 'Toon alles'; +$string[ 'startagain'] = 'Start opnieuw'; +$string[ 'timetaken'] = 'Gebruikte tijd'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Ruim statistieken op'; +$string[ 'computerepetitions'] = 'Bereken statistieken opnieuw'; +$string[ 'feedbacks'] = 'Berichten bij juist antwoord'; +$string[ 'repetitions'] = 'Herhalingen'; + +//showattempts.php +$string[ 'lastip'] = 'IP leerling'; +$string[ 'showsolution'] = 'oplossing'; +$string[ 'timefinish'] = 'Einde van het spel'; +$string[ 'timelastattempt'] = 'Laatste poging'; +$string[ 'timestart'] = 'Start'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Probeer het spel nu'; +$string[ 'continueattemptgame'] = 'Ga verder met een vorige poging'; +$string[ 'reattemptgame'] = 'Probeer het spel opnieuw'; +$string[ 'yourfinalgradeis'] = 'Je uiteindelijke cijfer voor dit spel is {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/no/game.php b/lang/no/game.php new file mode 100644 index 0000000..69bbb8a --- /dev/null +++ b/lang/no/game.php @@ -0,0 +1,305 @@ +Velkommen!

    Klikk et ord for å begyne.

    '; +$string[ 'letter'] = 'bokstav'; +$string[ 'letters'] = 'bokstaver'; +$string[ 'nextgame'] = 'Nytt spill'; +$string[ 'no_words'] = 'Ingen ord funnet'; +$string[ 'win'] = 'Gratulerer!!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Spill slutt'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Korrekt setning var:'; +$string[ 'hangman_correct_word'] = 'Korrekt ord var:'; +$string[ 'hangman_gradeinstance'] = 'Karakter i hele spillet'; +$string[ 'hangman_letters'] = 'Bokstaver:'; +$string[ 'hangman_restletters_many'] = 'Du har {$a} forsøk'; +$string[ 'hangman_restletters_one'] = 'Du har BARE 1 forsøk'; +$string[ 'hangman_wrongnum'] = 'Feil: %%d av %%d'; +$string[ 'nextword'] = 'Neste ord'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Karakter hovedsvar'; +$string[ 'hiddenpicture_nocols'] = 'Du må angi antall kolonner horisontalt'; +$string[ 'hiddenpicture_nomainquestion'] = 'Det er ingen ordbokinnlegg i ordboken {$a->name} med vedlagt bilde'; +$string[ 'hiddenpicture_norows'] = 'Må angi antall kolonner vertikalt'; +$string[ 'must_select_glossary'] = 'Du må velge en ordbok'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Du må velge en spørsmålskategori'; +$string[ 'millionaire_must_select_quiz'] = 'Du må velge en prøve'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Alle forsøk'; +$string[ 'allstudents'] = 'Alle studenter'; +$string[ 'attemptsonly'] = 'Bare vis studenter som har forsøkt'; +$string[ 'deleteattemptcheck'] = 'Er du sikkker på at du vil slette disse forsøkene helt?'; +$string[ 'displayoptions'] = 'Vis valg'; +$string[ 'downloadods'] = 'Last ned i ODS format'; +$string[ 'feedback'] = 'Tilbakemelding'; +$string[ 'noattemptsonly'] = 'Vis $a uten noen forsøk'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring har gjort $a->attemptnum forsøk'; +$string[ 'pagesize'] = 'Spørsmål per side'; +$string[ 'reportoverview'] = 'Oversikt'; +$string[ 'selectall'] = 'Velg alle'; +$string[ 'selectnone'] = 'Ikke velg noen'; +$string[ 'showdetailedmarks'] = 'Vis markeringsdetaljer'; +$string[ 'startedon'] = 'Startet'; +$string[ 'timecompleted'] = 'Ferdig'; +$string[ 'unfinished'] = 'åpne'; +$string[ 'withselected'] = 'Med valgte'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Antall sudokus som vil lages'; +$string[ 'sudoku_create_start'] = 'Start med å lage sudokus'; +$string[ 'sudoku_creating'] = 'Lag {$a}sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Slutt på sudokuspill'; +$string[ 'sudoku_guessnumber'] = 'Gjett riktig tall'; +$string[ 'sudoku_noentriesfound'] = 'Ingen ord funnet i ordboken'; + +//export.php + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Spillet slutt'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'Folk sier'; +$string[ 'millionaire_info_telephone'] = 'Jeg tror korrekt svar er'; +$string[ 'millionaire_info_wrong_answer'] = 'Svaret ditt er feil
    Riktig svar er:'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'I \"Vil du bli millionær\" må kilden være {$a} eller spørsmål og ikke'; +$string[ 'must_select_questioncategory'] = 'Du må velge en spørsmålskategori'; +$string[ 'must_select_quiz'] = 'Du må velge en prøve'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Score'; + +//index.php +$string[ 'modulename'] = 'Spill'; +$string[ 'modulenameplural'] = 'Spill'; +$string[ 'pluginname'] = 'Spill'; + +//lib.php +$string[ 'attempt'] = 'Forsøk'; +$string[ 'bookquiz_questions'] = 'Koble spørsmålskategorier til kapitler i bok'; +$string[ 'game_bookquiz'] = 'Bok med spørsmål'; +$string[ 'game_cross'] = 'Kryssord'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Hangman'; +$string[ 'game_hiddenpicture'] = 'Skjult bilde'; +$string[ 'game_millionaire'] = 'Millionær'; +$string[ 'game_snakes'] = 'Slange og stiger'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Ingen forsøk er gjort på denne prøven'; +$string[ 'results'] = 'Resulat'; +$string[ 'showanswers'] = 'Vis svar'; + +//locallib.php +$string[ 'attemptfirst'] = 'Første forsøk'; +$string[ 'attemptlast'] = 'Siste forsøk'; +$string[ 'gradeaverage'] = 'Gjennomsnittelig karakter'; +$string[ 'gradehighest'] = 'Høyeste karakter'; + +//mod_form.php +$string[ 'bottomtext'] = 'Bunntekst'; +$string[ 'cross_layout'] = 'Layout'; +$string[ 'cross_layout0'] = 'Fraser på bunnen på tvers'; +$string[ 'cross_layout1'] = 'Fraser til høyre på tvers'; +$string[ 'cross_maxcols'] = 'Maksimum antall kolonner i kryssordet'; +$string[ 'cross_maxwords'] = 'Maksimum antall ord i kryssordet'; +$string[ 'cryptex_maxcols'] = 'Max antall kol/rader i cryptex'; +$string[ 'cryptex_maxwords'] = 'Max antall ord i cryptex'; +$string[ 'grademethod'] = 'Karaktermetode'; +$string[ 'hangman_allowspaces'] = 'Tillatt mellomrom i ord'; +$string[ 'hangman_allowsub'] = 'Tillat symbolet i ord'; +$string[ 'hangman_imageset'] = 'Velg bilder for hangman'; +$string[ 'hangman_language'] = 'Språk for ordene'; +$string[ 'hangman_maxtries'] = 'Antall ord per spill'; +$string[ 'hangman_showcorrectanswer'] = 'Vis korrekt svar når du er ferdig'; +$string[ 'hangman_showfirst'] = 'Vis første bokstaven i hangman'; +$string[ 'hangman_showlast'] = 'Vis siste bokstaven i hangman'; +$string[ 'hangman_showquestion'] = 'Vis spørsmålet?'; +$string[ 'hiddenpicture_across'] = 'Ruter horisontalt'; +$string[ 'hiddenpicture_down'] = 'Ruter nedover'; +$string[ 'hiddenpicture_pictureglossary'] = 'Ordbok for hovedspørsmål'; +$string[ 'snakes_background'] = 'Bakgrunn'; +$string[ 'sourcemodule'] = 'Spørsmålskilde'; +$string[ 'sourcemodule_book'] = 'Velg en bok'; +$string[ 'sourcemodule_glossary'] = 'Velg ordbok'; +$string[ 'sourcemodule_glossarycategory'] = 'Velg ordbokskategori'; +$string[ 'sourcemodule_question'] = 'Spørsmål'; +$string[ 'sourcemodule_questioncategory'] = 'Velg spørsmålskategori'; +$string[ 'sourcemodule_quiz'] = 'Velg prøve'; +$string[ 'sudoku_maxquestions'] = 'Maks antall spørsmål'; + +//preview.php +$string[ 'only_teachers'] = 'Bare lærer kan se denne siden'; +$string[ 'preview'] = 'Forhåndsvisning'; + +//review.php +$string[ 'attempts'] = 'Forsøk'; +$string[ 'completedon'] = 'Ferdig på'; +$string[ 'outof'] = '{$a->grade} av makismalt {$a->maxgrade}'; +$string[ 'review'] = 'Rapport'; +$string[ 'reviewofattempt'] = 'Rapport fra forsøk {$a}'; +$string[ 'startagain'] = 'Start på nytt'; +$string[ 'timetaken'] = 'Tid brukt'; + +//showanswers.php +$string[ 'feedbacks'] = 'Tilbakemelding ved riktig svar'; + +//showattempts.php +$string[ 'lastip'] = 'IP student'; +$string[ 'showsolution'] = 'løsning'; +$string[ 'timefinish'] = 'Spill slutt'; +$string[ 'timelastattempt'] = 'Siste forsøk'; +$string[ 'timestart'] = 'Start'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Prøv å spille nå'; +$string[ 'continueattemptgame'] = 'Fortsette et tidligere forsøk av spillet'; +$string[ 'reattemptgame'] = 'Prøv spillet igjen'; +$string[ 'yourfinalgradeis'] = 'Din endelige karakter for spillet er {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/play.php $string[ 'print'] = 'Print'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//export.php $string[ 'export'] = 'Export'; +//export.php $string[ 'html_hascheckbutton'] = 'Has check button:'; +//export.php $string[ 'html_hasprintbutton'] = 'Has print button:'; +//export.php $string[ 'html_title'] = 'Title of html:'; +//export.php $string[ 'javame_createdby'] = 'Created by:'; +//export.php $string[ 'javame_description'] = 'Description:'; +//export.php $string[ 'javame_filename'] = 'Filename:'; +//export.php $string[ 'javame_icon'] = 'Icon:'; +//export.php $string[ 'javame_maxpictureheight'] = 'Max picture height:'; +//export.php $string[ 'javame_maxpicturewidth'] = 'Max picture width:'; +//export.php $string[ 'javame_name'] = 'Name:'; +//export.php $string[ 'javame_type'] = 'Type:'; +//export.php $string[ 'javame_vendor'] = 'Vendor:'; +//export.php $string[ 'javame_version'] = 'Version:'; +//exporthtml_hangman.php $string[ 'html_hangman_new'] = 'New'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'export_to_html'] = 'Export to HTML'; +//lib.php $string[ 'export_to_javame'] = 'Export to Javame'; +//lib.php $string[ 'percent'] = 'Percent'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_maxtries'] = 'Max tries'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_height'] = 'Set height of picture to'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'hiddenpicture_width'] = 'Set width of picture to'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'millionaire_shuffle'] = 'Randomize questions'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sourcemodule_include_subcategories'] = 'Include subcategories'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/pl/game.php b/lang/pl/game.php new file mode 100644 index 0000000..eae8e8e --- /dev/null +++ b/lang/pl/game.php @@ -0,0 +1,304 @@ +Witaj!

    Kliknij na słowo aby rozpocząć.

    '; +$string[ 'letter'] = 'litera'; +$string[ 'letters'] = 'litery'; +$string[ 'nextgame'] = 'Nowa gra'; +$string[ 'no_words'] = 'Nie znaleziono wyrazów'; +$string[ 'win'] = 'Gratulacje !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Koniec gry'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Prawidłowa fraza to: '; +$string[ 'hangman_correct_word'] = 'Prawidłowe słowo to: '; +$string[ 'hangman_gradeinstance'] = 'Ocena za całą grę'; +$string[ 'hangman_letters'] = 'Litery: '; +$string[ 'hangman_restletters_many'] = 'Pozostało prób: {$a}'; +$string[ 'hangman_restletters_one'] = 'Pozostała TYLKO 1 próba'; +$string[ 'hangman_wrongnum'] = 'Źle: %%d z %%d'; +$string[ 'nextword'] = 'Następne słowo'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Oceń główną odpowiedź'; +$string[ 'hiddenpicture_nocols'] = 'Musisz określić maksymalną liczbę kolumn'; +$string[ 'hiddenpicture_nomainquestion'] = 'Brak wpisów z załączonym zdjęciem w słowniku {$a->name}'; +$string[ 'hiddenpicture_norows'] = 'Musisz określić maksymalną liczbę wierszy'; +$string[ 'must_select_glossary'] = 'Musisz wybrać słownik'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Musisz wybrać kategorię pytań'; +$string[ 'millionaire_must_select_quiz'] = 'Musisz wybrać jeden quiz'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Pokaż wszystkie próby'; +$string[ 'allstudents'] = 'Pokaż wszystkie $a'; +$string[ 'attemptsonly'] = 'Pokaż tylko studentów którzy dokonali prób'; +$string[ 'deleteattemptcheck'] = 'Czy na pewno chcesz usunąć te próby?'; +$string[ 'displayoptions'] = 'Wyświetl opcje'; +$string[ 'downloadods'] = 'Pobierz w formacie ODS'; +$string[ 'feedback'] = 'Informacja zwrotna'; +$string[ 'noattemptsonly'] = 'Pokaż $a bez prób'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring podjęło $a->attemptnum prób'; +$string[ 'pagesize'] = 'Pytań na stronę:'; +$string[ 'reportoverview'] = 'Przegląd'; +$string[ 'selectall'] = 'Wybierz wszystkie'; +$string[ 'selectnone'] = 'Odznacz wszytko'; +$string[ 'showdetailedmarks'] = 'Pokaż szczegóły oceny'; +$string[ 'startedon'] = 'Rozpoczęto'; +$string[ 'timecompleted'] = 'Ukończono'; +$string[ 'unfinished'] = 'otwarte'; +$string[ 'withselected'] = 'Z zaznaczonymi'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Liczba sudoku które zostaną stworzone'; +$string[ 'sudoku_create_start'] = 'Rozpocznij tworzenie sudoku'; +$string[ 'sudoku_creating'] = 'Tworzenie {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Sudoku zakończone'; +$string[ 'sudoku_guessnumber'] = 'Odgadnij prawidłową liczbę'; +$string[ 'sudoku_noentriesfound'] = 'Nie znaleziono słów w słowniku'; + +//export.php +$string[ 'export'] = 'Eksportuj'; +$string[ 'javame_createdby'] = 'Stworzony przez:'; +$string[ 'javame_description'] = 'Opis:'; +$string[ 'javame_filename'] = 'Nazwa pliku:'; +$string[ 'javame_icon'] = 'Ikona:'; +$string[ 'javame_name'] = 'Nazwa:'; +$string[ 'javame_vendor'] = 'Dostawca:'; +$string[ 'javame_version'] = 'Wersja:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Koniec gry'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'Odpowiedź publiczności'; +$string[ 'millionaire_info_telephone'] = 'Wydaje mi się że prawidłowa odpowiedź to '; +$string[ 'millionaire_info_wrong_answer'] = 'Zła odpowiedź.
    Prawidłowo:'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'W milionerach źródłem mogą być {$a} lub pytania a nie'; +$string[ 'must_select_questioncategory'] = 'Musisz wybrać kategorię pytań'; +$string[ 'must_select_quiz'] = 'Musisz wybrać quiz'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Wynik'; + +//index.php +$string[ 'modulename'] = 'Gra'; +$string[ 'modulenameplural'] = 'Gry'; +$string[ 'pluginname'] = 'Gra'; + +//lib.php +$string[ 'attempt'] = 'Próba'; +$string[ 'bookquiz_questions'] = 'Przypisz kategorie pytań do rozdziałów książki'; +$string[ 'game_bookquiz'] = 'Książka z pytaniami'; +$string[ 'game_cross'] = 'Krzyżówka'; +$string[ 'game_cryptex'] = 'Cryptex'; +$string[ 'game_hangman'] = 'Wisielec'; +$string[ 'game_hiddenpicture'] = 'Ukryty obraz'; +$string[ 'game_millionaire'] = 'Milionerzy'; +$string[ 'game_snakes'] = 'Węże i Drabiny'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Informacje'; +$string[ 'noattempts'] = 'Nie dokonano prób'; +$string[ 'results'] = 'Wyniki'; +$string[ 'showanswers'] = 'Pokaż odpowiedzi'; + +//locallib.php +$string[ 'attemptfirst'] = 'Pierwsza próba'; +$string[ 'attemptlast'] = 'Ostatnia próba'; +$string[ 'gradeaverage'] = 'Średnia ocena'; +$string[ 'gradehighest'] = 'Najwyższa ocena'; + +//mod_form.php +$string[ 'bottomtext'] = 'Tekst na dole'; +$string[ 'cross_layout'] = 'Układ'; +$string[ 'cross_layout0'] = 'Wyrażenia pod krzyżówką'; +$string[ 'cross_layout1'] = 'Wyrażenia na prawo od krzyżówki'; +$string[ 'cross_maxcols'] = 'Maksymalna ilość kolumn krzyżówki'; +$string[ 'cross_maxwords'] = 'Maksymalna ilość słów'; +$string[ 'cryptex_maxcols'] = 'Maksymalna liczba kolumn/wierszy'; +$string[ 'cryptex_maxwords'] = 'Maksymalna liczba wyrazów'; +$string[ 'grademethod'] = 'Metoda oceniania'; +$string[ 'hangman_allowspaces'] = 'Zezwól na spacje w wyrazach'; +$string[ 'hangman_allowsub'] = 'Zezwól na symbol - w wyrazach'; +$string[ 'hangman_imageset'] = 'Wybierz obrazek wisielca'; +$string[ 'hangman_language'] = 'Język słów'; +$string[ 'hangman_maxtries'] = 'Ilość słów na grę'; +$string[ 'hangman_showcorrectanswer'] = 'Pokazuj na koniec prawidłową odpowiedź'; +$string[ 'hangman_showfirst'] = 'Pokazuj pierwszą literę'; +$string[ 'hangman_showlast'] = 'Pokazuj ostatnią literę'; +$string[ 'hangman_showquestion'] = 'Pokazywać pytania ?'; +$string[ 'hiddenpicture_across'] = 'Komórki poziomo'; +$string[ 'hiddenpicture_down'] = 'Komórki pionowo'; +$string[ 'hiddenpicture_height'] = 'Ustaw wysokość obrazka na'; +$string[ 'hiddenpicture_pictureglossary'] = 'Słownik dla głównego pytania i obrazu'; +$string[ 'hiddenpicture_width'] = 'Ustaw szerokość obrazka na'; +$string[ 'snakes_background'] = 'Tło'; +$string[ 'sourcemodule'] = 'Źródło pytań'; +$string[ 'sourcemodule_book'] = 'Wybierz książkę'; +$string[ 'sourcemodule_glossary'] = 'Wybierz słownik'; +$string[ 'sourcemodule_glossarycategory'] = 'Wybierz kategorię słownika'; +$string[ 'sourcemodule_include_subcategories'] = 'Dołącz podkategorie'; +$string[ 'sourcemodule_question'] = 'Pytania'; +$string[ 'sourcemodule_questioncategory'] = 'Wybierz kategorię pytań'; +$string[ 'sourcemodule_quiz'] = 'Wybierz quiz'; +$string[ 'sudoku_maxquestions'] = 'Maksymalna liczba pytań'; + +//preview.php +$string[ 'only_teachers'] = 'Tylko nauczyciel może oglądać tą stronę'; +$string[ 'preview'] = 'Podgląd'; + +//review.php +$string[ 'attempts'] = 'Próby'; +$string[ 'completedon'] = 'Ukończono'; +$string[ 'outof'] = '{$a->grade} z {$a->maxgrade}'; +$string[ 'review'] = 'Opis'; +$string[ 'reviewofattempt'] = 'Opis próby {$a}'; +$string[ 'startagain'] = 'Rozpocznij ponownie'; +$string[ 'timetaken'] = 'Zużyty czas'; + +//showanswers.php +$string[ 'feedbacks'] = 'Wiadomości po prawidłowej odpowiedzi'; + +//showattempts.php +$string[ 'lastip'] = 'IP studenta'; +$string[ 'showsolution'] = 'rozwiązanie'; +$string[ 'timefinish'] = 'Koniec gry'; +$string[ 'timelastattempt'] = 'Ostatnia próba'; +$string[ 'timestart'] = 'Start'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Rozpocznij grę'; +$string[ 'continueattemptgame'] = 'Kontynuuj poprzednią próbę'; +$string[ 'reattemptgame'] = 'Wznów grę'; +$string[ 'yourfinalgradeis'] = 'Ostateczną oceną za tą grę jest $a.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/cross_class.php $string[ 'lettersall'] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +//cross/play.php $string[ 'print'] = 'Print'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//export.php $string[ 'html_hascheckbutton'] = 'Has check button:'; +//export.php $string[ 'html_hasprintbutton'] = 'Has print button:'; +//export.php $string[ 'html_title'] = 'Title of html:'; +//export.php $string[ 'javame_maxpictureheight'] = 'Max picture height:'; +//export.php $string[ 'javame_maxpicturewidth'] = 'Max picture width:'; +//export.php $string[ 'javame_type'] = 'Type:'; +//exporthtml_hangman.php $string[ 'html_hangman_new'] = 'New'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'export_to_html'] = 'Export to HTML'; +//lib.php $string[ 'export_to_javame'] = 'Export to Javame'; +//lib.php $string[ 'percent'] = 'Percent'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_maxtries'] = 'Max tries'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'millionaire_shuffle'] = 'Randomize questions'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/pt_br/game.php b/lang/pt_br/game.php new file mode 100644 index 0000000..0a5086b --- /dev/null +++ b/lang/pt_br/game.php @@ -0,0 +1,305 @@ +Bem vindo!

    Clique em uma palavra para começar.

    '; +$string[ 'letter'] = 'letra'; +$string[ 'letters'] = 'letras'; +$string[ 'nextgame'] = 'Próximo jogo'; +$string[ 'print'] = 'Imprimir'; + +//cryptex/play.php +$string[ 'finish'] = 'Fim de jogo'; + +//db/access.php +$string[ 'game:attempt'] = 'Começar o jogo'; +$string[ 'game:deleteattempts'] = 'Apagar tentativas'; +$string[ 'game:manage'] = 'Administrar'; +$string[ 'game:reviewmyattempts'] = 'Rever minhas tentativas'; +$string[ 'game:view'] = 'Ver'; +$string[ 'game:viewreports'] = 'Ver relatórios'; + +//hangman/play.php +$string[ 'hangman_gradeinstance'] = 'Nível do jogo completo'; +$string[ 'hangman_letters'] = 'Letras: '; +$string[ 'hangman_restletters_many'] = 'Você tem {$a} tentativas'; +$string[ 'hangman_restletters_one'] = 'Você tem SOMENTE 1 tentativa'; +$string[ 'hangman_wrongnum'] = 'Erradas: %%d de %%d'; +$string[ 'nextword'] = 'Próxima palavra'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Nota da pergunta principal'; +$string[ 'hiddenpicture_nocols'] = 'Especifique o número de linhas horizontais'; +$string[ 'hiddenpicture_nomainquestion'] = 'Sem entradas no glossário {$a->name} com imagem anexa'; +$string[ 'hiddenpicture_norows'] = 'Especifique o número de colunas verticais'; +$string[ 'must_select_glossary'] = 'Um glossário deve ser selecionado'; +$string[ 'noglossaryentriesfound'] = 'Não foram encontradas entradas no glossário'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Uma categoria de perguntas deve ser selecionada'; +$string[ 'millionaire_must_select_quiz'] = 'Um questionário deve ser selecionado'; + +//report/overview/report.php +$string[ 'feedback'] = 'Retorno'; +$string[ 'startedon'] = 'Començou em'; +$string[ 'timecompleted'] = 'Completo'; +$string[ 'unfinished'] = 'aberto'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Número de sudokus que serão criados'; +$string[ 'sudoku_create_start'] = 'Comece a criar sudokus'; +$string[ 'sudoku_creating'] = 'Criando {$a} sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Fim do jogo de sudoku'; +$string[ 'sudoku_guessnumber'] = 'Adivinhe o número correto'; +$string[ 'sudoku_noentriesfound'] = 'Não foram contradas palavras no glossário'; + +//export.php +$string[ 'export'] = 'Exportar'; +$string[ 'html_hascheckbutton'] = 'Botão de teste:'; +$string[ 'html_hasprintbutton'] = 'Botão de impressão:'; +$string[ 'html_title'] = 'Título de html:'; +$string[ 'javame_createdby'] = 'Criado por:'; +$string[ 'javame_description'] = 'Descrição:'; +$string[ 'javame_filename'] = 'Nome do arquivo:'; +$string[ 'javame_icon'] = 'Ícone:'; +$string[ 'javame_maxpictureheight'] = 'Altura máxima da imagem:'; +$string[ 'javame_maxpicturewidth'] = 'Largura máxima da imagem:'; +$string[ 'javame_name'] = 'Nome:'; +$string[ 'javame_type'] = 'Tipo:'; +$string[ 'javame_vendor'] = 'Vendedor:'; +$string[ 'javame_version'] = 'Versão'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Fim de jogo'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = 'Ajuda do público'; +$string[ 'millionaire_info_people'] = 'O púlico diz'; +$string[ 'millionaire_info_telephone'] = 'Creio que a resposta correta seja'; +$string[ 'millionaire_info_wrong_answer'] = 'Sua resposta está errada
    A resposta correta é:'; +$string[ 'millionaire_quit'] = 'Sair'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Para milhonário a fonte deve ser {$a} ou perguntas e não'; +$string[ 'millionaire_telephone'] = 'Ajuda pelo telefone'; +$string[ 'must_select_questioncategory'] = 'Uma categoria de perguntas deve ser selecionada'; +$string[ 'must_select_quiz'] = 'Um questionário deve ser selecionado'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Pontuação'; + +//index.php +$string[ 'modulename'] = 'Jogo'; +$string[ 'modulenameplural'] = 'Jogos'; +$string[ 'pluginname'] = 'Jogo'; + +//lib.php +$string[ 'attempt'] = 'Tentativa'; +$string[ 'bookquiz_questions'] = 'Relacione categorias de perguntas com capítulos do livro'; +$string[ 'export_to_html'] = 'Exportar como HTML'; +$string[ 'export_to_javame'] = 'Exportar como Javame'; +$string[ 'game_bookquiz'] = 'Livro de perguntas'; +$string[ 'game_cross'] = 'Palavras-cruzadas'; +$string[ 'game_cryptex'] = 'Sopa de Letras'; +$string[ 'game_hangman'] = 'Forca'; +$string[ 'game_hiddenpicture'] = 'Imagem oculta'; +$string[ 'game_millionaire'] = 'Milhonário'; +$string[ 'game_snakes'] = 'Serpentes'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Info'; +$string[ 'noattempts'] = 'Nenhuma tentativa foi feita com este questionário'; +$string[ 'percent'] = 'Porcentagem'; +$string[ 'results'] = 'Resultados'; +$string[ 'showanswers'] = 'Mostrar respostas'; +$string[ 'showattempts'] = 'Mostrar as tentativas'; + +//locallib.php +$string[ 'attemptfirst'] = 'Primeira tentativa'; +$string[ 'attemptlast'] = 'Última tentativa'; +$string[ 'gradeaverage'] = 'Nota média'; +$string[ 'gradehighest'] = 'Maior nota'; + +//mod_form.php +$string[ 'bottomtext'] = 'Texto no rodapé da página'; +$string[ 'cross_layout'] = 'Formato'; +$string[ 'cross_layout0'] = 'Frases na parte inferior do palavras-cruzadas'; +$string[ 'cross_layout1'] = 'Frases na parte direita do palavras-cruzadas'; +$string[ 'cross_maxcols'] = 'Número máximo de colunas do palavras-cruzadas'; +$string[ 'cross_maxwords'] = 'Máximo número de palavras do palavras-cruzadas'; +$string[ 'cross_options'] = 'Opções do Palavras-cruzadas'; +$string[ 'cryptex_maxcols'] = 'Máximo número de colunas/linhas do Criptograma'; +$string[ 'cryptex_maxtries'] = 'Número máximo de tantativas'; +$string[ 'cryptex_maxwords'] = 'Máximo número de palavras do Criptograma'; +$string[ 'cryptex_options'] = 'Opções do Criptograma'; +$string[ 'grademethod'] = 'Método de avaliação'; +$string[ 'hangman_allowspaces'] = 'Permitir espaços nas palavras'; +$string[ 'hangman_allowsub'] = 'Permitir símbolos nas palavras'; +$string[ 'hangman_imageset'] = 'Selecione as imágens para a Forca'; +$string[ 'hangman_language'] = 'Idioma das palavras'; +$string[ 'hangman_maxtries'] = 'Número de palavras por jogo'; +$string[ 'hangman_options'] = 'Opções da Forca'; +$string[ 'hangman_showcorrectanswer'] = 'Mostrar a resposta correta ao final'; +$string[ 'hangman_showfirst'] = 'Mostrar a primeira letra da Forca'; +$string[ 'hangman_showlast'] = 'Mostrar a última letra da Forca'; +$string[ 'hangman_showquestion'] = 'Mostrar as perguntas ?'; +$string[ 'hiddenpicture_across'] = 'Células horizontais'; +$string[ 'hiddenpicture_down'] = 'Células verticais'; +$string[ 'hiddenpicture_height'] = 'Definir a altura da imagem em'; +$string[ 'hiddenpicture_options'] = '\'Imagem Oculta\' opções'; +$string[ 'hiddenpicture_pictureglossary'] = 'O glossário para a pergunta principal'; +$string[ 'hiddenpicture_width'] = 'Definir a largura da imagem em'; +$string[ 'millionaire_background'] = 'Cor de fundo'; +$string[ 'millionaire_options'] = 'Opções o Milhonário'; +$string[ 'millionaire_shuffle'] = 'Mesclar perguntas'; +$string[ 'snakes_background'] = 'Fundo'; +$string[ 'snakes_cols'] = 'Colunas'; +$string[ 'snakes_footerx'] = 'Espaço inferior esquerdo'; +$string[ 'snakes_footery'] = 'Espaço inferior direito'; +$string[ 'snakes_headerx'] = 'Espaço superior esquerdo'; +$string[ 'snakes_headery'] = 'Espaço superior direito'; +$string[ 'snakes_options'] = '\'Serpentes\' opções'; +$string[ 'snakes_rows'] = 'Linhas'; +$string[ 'sourcemodule'] = 'Fonte de perguntas'; +$string[ 'sourcemodule_book'] = 'Selecione un livro'; +$string[ 'sourcemodule_glossary'] = 'Selecione um glossário'; +$string[ 'sourcemodule_glossarycategory'] = 'Selecione una categoria de glossário.'; +$string[ 'sourcemodule_include_subcategories'] = 'Inclua subcategorias'; +$string[ 'sourcemodule_question'] = 'Perguntas'; +$string[ 'sourcemodule_questioncategory'] = 'Selecione uma categoria de perguntas'; +$string[ 'sourcemodule_quiz'] = 'Selecione un questionário'; +$string[ 'sudoku_maxquestions'] = 'Máximo número de perguntas'; +$string[ 'sudoku_options'] = 'Opcções do Sudoku'; +$string[ 'toptext'] = 'Texto da parte superior'; +$string[ 'userdefined'] = 'Definido pelo usuário'; + +//preview.php +$string[ 'only_teachers'] = 'Somente o professor pode ver esta página'; +$string[ 'preview'] = 'Visualizar'; + +//review.php +$string[ 'attempts'] = 'Tentativas'; +$string[ 'completedon'] = 'Completado em'; +$string[ 'outof'] = '{$a->grade} de um máximo de {$a->maxgrade}'; +$string[ 'review'] = 'Revisar'; +$string[ 'reviewofattempt'] = 'Revisar tentativas {$a}'; +$string[ 'startagain'] = 'Começar de novo'; +$string[ 'timetaken'] = 'Timpo utilizado'; + +//showanswers.php +$string[ 'clearrepetitions'] = 'Limpar estatísticas'; +$string[ 'computerepetitions'] = 'Recalcular estatísticas'; +$string[ 'feedbacks'] = 'Mensagens de resposta correta'; +$string[ 'repetitions'] = 'Repetições'; + +//showattempts.php +$string[ 'lastip'] = 'IP do estudante'; +$string[ 'showsolution'] = 'solução'; +$string[ 'timefinish'] = 'Fim de jogo'; +$string[ 'timelastattempt'] = 'Última tentativa'; +$string[ 'timestart'] = 'Começo'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Tente jogar agora'; +$string[ 'continueattemptgame'] = 'Continue uma tentativa anterior do jogo'; +$string[ 'reattemptgame'] = 'Tentar novamente'; +$string[ 'yourfinalgradeis'] = 'Sua nota final neste jogo é {$a}.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/play.php $string[ 'no_words'] = 'There are no words'; +//cross/play.php $string[ 'win'] = 'Congratulations !!!'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//hangman/play.php $string[ 'hangman_correct_phrase'] = 'The correct phrase was: '; +//hangman/play.php $string[ 'hangman_correct_word'] = 'The correct word was: '; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//report/overview/report.php $string[ 'allattempts'] = 'Show all tries'; +//report/overview/report.php $string[ 'allstudents'] = 'Show all $a'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//report/overview/report.php $string[ 'attemptsonly'] = 'Show only students with attempts'; +//report/overview/report.php $string[ 'deleteattemptcheck'] = 'Are you absolutely sure you want to completely delete these attempts?'; +//report/overview/report.php $string[ 'displayoptions'] = 'Display options'; +//report/overview/report.php $string[ 'downloadods'] = 'Download in ODS format'; +//report/overview/report.php $string[ 'noattemptsonly'] = 'Show $a with no attempts only'; +//report/overview/report.php $string[ 'numattempts'] = '$a->studentnum $a->studentstring have made $a->attemptnum attempts'; +//report/overview/report.php $string[ 'pagesize'] = 'Questions per page:'; +//report/overview/report.php $string[ 'reportoverview'] = 'Overview'; +//report/overview/report.php $string[ 'selectall'] = 'Select all'; +//report/overview/report.php $string[ 'selectnone'] = 'Deselect all'; +//report/overview/report.php $string[ 'showdetailedmarks'] = 'Show mark details'; +//report/overview/report.php $string[ 'withselected'] = 'With selected'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_hangman.php $string[ 'html_hangman_new'] = 'New'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//review.php $string[ 'showall'] = 'Show all'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/ru/game.php b/lang/ru/game.php new file mode 100644 index 0000000..f88eb1e --- /dev/null +++ b/lang/ru/game.php @@ -0,0 +1,305 @@ +Добро пожаловать!

    Сначала щелкните по любой из клеток, содержащих слово, затем введите в появившемся окне ответ.

    '; +$string[ 'letter'] = 'буква'; +$string[ 'letters'] = 'буквы'; +$string[ 'nextgame'] = 'Новая игра'; +$string[ 'no_words'] = 'Не найдены слова'; +$string[ 'win'] = 'Поздравляем !!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Конец игры'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Правильная фраза: '; +$string[ 'hangman_correct_word'] = 'Правильное слово: '; +$string[ 'hangman_gradeinstance'] = 'Оценить всю игру'; +$string[ 'hangman_letters'] = 'Буквы: '; +$string[ 'hangman_restletters_many'] = 'У Вас {$a} попыток'; +$string[ 'hangman_restletters_one'] = 'У Вас только 1 попытка'; +$string[ 'hangman_wrongnum'] = 'Неправильно: %%d из %%d'; +$string[ 'nextword'] = 'Следующее слово'; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = 'Оценить главный ответ'; +$string[ 'hiddenpicture_nocols'] = 'Необходимо указать количество колонок по горизонтали'; +$string[ 'hiddenpicture_norows'] = 'Необходимо указать количество срок по вертикали'; +$string[ 'must_select_glossary'] = 'Вы должны выбрать глоссарий'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Вы должны выбрать одну из категорий вопросов'; +$string[ 'millionaire_must_select_quiz'] = 'Вы должны выбрать тест'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Все попытки'; +$string[ 'allstudents'] = 'Все студенты $a'; +$string[ 'attemptsonly'] = 'Показать только студентов с попытками'; +$string[ 'deleteattemptcheck'] = 'Вы уверены, что хотите полностью удалить эти попытки?'; +$string[ 'displayoptions'] = 'Отобразить дополнительно'; +$string[ 'downloadods'] = 'Загрузить в формате ODS'; +$string[ 'feedback'] = 'Комментарий'; +$string[ 'noattemptsonly'] = 'Показать $a только, у которых нет попыток'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring сделали $a->attemptnum попыток'; +$string[ 'pagesize'] = 'Вопросов на страницу:'; +$string[ 'reportoverview'] = 'Обзор'; +$string[ 'selectall'] = 'Выбрать все'; +$string[ 'selectnone'] = 'Снять выделение со всех'; +$string[ 'showdetailedmarks'] = 'Показать детали оценок'; +$string[ 'startedon'] = 'Начато'; +$string[ 'timecompleted'] = 'Выполнено'; +$string[ 'unfinished'] = 'открыто'; +$string[ 'withselected'] = 'С выделенным'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Количество созданных \"Судоку\"'; +$string[ 'sudoku_create_start'] = 'Начало создания \"Судоку\"'; +$string[ 'sudoku_creating'] = 'Создание {$a} \"Судоку\"'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Окончание игры \"Судоку\"'; +$string[ 'sudoku_guessnumber'] = 'Введите правильное число'; +$string[ 'sudoku_noentriesfound'] = 'В глоссарии нет слов'; + +//export.php + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Игра окончена'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'Люди говорят'; +$string[ 'millionaire_info_telephone'] = 'Я думаю, что правильный ответ '; +$string[ 'millionaire_info_wrong_answer'] = 'Ваш ответ неверный
    Правильный ответ:'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Для игры Миллионер источником вопросов должен быть {$a}, а не'; +$string[ 'must_select_questioncategory'] = 'Вы должны выбрать категорию вопросов'; +$string[ 'must_select_quiz'] = 'Вы должны выбрать тест'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Очки'; + +//index.php +$string[ 'modulename'] = 'Игра'; +$string[ 'modulenameplural'] = 'Игры'; +$string[ 'pluginname'] = 'Игра'; + +//lib.php +$string[ 'attempt'] = 'Попытка'; +$string[ 'bookquiz_questions'] = 'Связать категории вопросов с главой книги'; +$string[ 'game_bookquiz'] = 'Книга с вопросами'; +$string[ 'game_cross'] = 'Кроссворд'; +$string[ 'game_cryptex'] = 'Криптекст'; +$string[ 'game_hangman'] = 'Виселица'; +$string[ 'game_hiddenpicture'] = 'Спрятанная картинка'; +$string[ 'game_millionaire'] = 'Миллионер'; +$string[ 'game_snakes'] = 'Змеи и лестницы'; +$string[ 'game_sudoku'] = 'Судоку'; +$string[ 'info'] = 'Информация'; +$string[ 'noattempts'] = 'В этом тесте не сделано попыток'; +$string[ 'results'] = 'Результаты'; +$string[ 'showanswers'] = 'Показать ответы'; + +//locallib.php +$string[ 'attemptfirst'] = 'Первая попытка'; +$string[ 'attemptlast'] = 'Последняя попытка'; +$string[ 'gradeaverage'] = 'Оценивание по среднему баллу'; +$string[ 'gradehighest'] = 'Оценивание по высшему баллу'; + +//mod_form.php +$string[ 'bottomtext'] = 'Текст внизу экрана игры'; +$string[ 'cross_layout'] = 'Слой'; +$string[ 'cross_layout0'] = 'Расшифровка внизу кроссворда'; +$string[ 'cross_layout1'] = 'Расшифровка справа от кроссворда'; +$string[ 'cross_maxcols'] = 'Максимальное число колонок в кроссворде'; +$string[ 'cross_maxwords'] = 'Максимальное число слов в кроссворде'; +$string[ 'cryptex_maxcols'] = 'Макимальное число колонок/рядов в Криптексте'; +$string[ 'cryptex_maxwords'] = 'Макимальное число слов в Криптексте'; +$string[ 'grademethod'] = 'Метод оценивания'; +$string[ 'hangman_allowspaces'] = 'Разрешить в словах пробелы'; +$string[ 'hangman_allowsub'] = 'Разрешить дефис в словах'; +$string[ 'hangman_imageset'] = 'Выберите изображение виселицы'; +$string[ 'hangman_language'] = 'Язык слов'; +$string[ 'hangman_maxtries'] = 'Число попыток в игре'; +$string[ 'hangman_showcorrectanswer'] = 'Показать правильные ответы после окончания игры'; +$string[ 'hangman_showfirst'] = 'Показать первую букву'; +$string[ 'hangman_showlast'] = 'Показать последнюю букву'; +$string[ 'hangman_showquestion'] = 'Показать вопросы?'; +$string[ 'hiddenpicture_across'] = 'Клетки по горизонтали'; +$string[ 'hiddenpicture_down'] = 'Клетки по вертикали'; +$string[ 'hiddenpicture_pictureglossary'] = 'Глоссарий для главного вопроса'; +$string[ 'snakes_background'] = 'Фон'; +$string[ 'sourcemodule'] = 'Источник вопросов'; +$string[ 'sourcemodule_book'] = 'Выберите книгу'; +$string[ 'sourcemodule_glossary'] = 'Выберите глоссарий'; +$string[ 'sourcemodule_glossarycategory'] = 'Выберите категорию глоссария'; +$string[ 'sourcemodule_question'] = 'Вопросы'; +$string[ 'sourcemodule_questioncategory'] = 'Выберите категорию вопросов'; +$string[ 'sourcemodule_quiz'] = 'Выберите тест'; +$string[ 'sudoku_maxquestions'] = 'Максимальное число вопросов'; + +//preview.php +$string[ 'only_teachers'] = 'Только учителя могут просматривать эту страницу'; +$string[ 'preview'] = 'Предварительный просмотр'; + +//review.php +$string[ 'attempts'] = 'Попытки'; +$string[ 'completedon'] = 'Выполнено'; +$string[ 'outof'] = '{$a->grade} out of a maximum of {$a->maxgrade}'; +$string[ 'review'] = 'Повторный просмотр'; +$string[ 'reviewofattempt'] = 'Повторный промотр попыток {$a}'; +$string[ 'startagain'] = 'Начать снова'; +$string[ 'timetaken'] = 'Время выполнения'; + +//showanswers.php +$string[ 'feedbacks'] = 'Текст сообщения о правильном ответе'; + +//showattempts.php +$string[ 'lastip'] = 'IP студента'; +$string[ 'showsolution'] = 'решение'; +$string[ 'timefinish'] = 'Конец игры'; +$string[ 'timelastattempt'] = 'Последняя попытка'; +$string[ 'timestart'] = 'Начало'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Начать новую попытку игры'; +$string[ 'continueattemptgame'] = 'Продолжить предыдущую попытку этой игры'; +$string[ 'reattemptgame'] = 'Сделать попытку в этой игре'; +$string[ 'yourfinalgradeis'] = 'Ваша последняя оценка за эту игру: $a.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/play.php $string[ 'print'] = 'Print'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'hiddenpicture_nomainquestion'] = 'There are no glossary entries on glossary {$a->name} with an attached picture'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//export.php $string[ 'export'] = 'Export'; +//export.php $string[ 'html_hascheckbutton'] = 'Has check button:'; +//export.php $string[ 'html_hasprintbutton'] = 'Has print button:'; +//export.php $string[ 'html_title'] = 'Title of html:'; +//export.php $string[ 'javame_createdby'] = 'Created by:'; +//export.php $string[ 'javame_description'] = 'Description:'; +//export.php $string[ 'javame_filename'] = 'Filename:'; +//export.php $string[ 'javame_icon'] = 'Icon:'; +//export.php $string[ 'javame_maxpictureheight'] = 'Max picture height:'; +//export.php $string[ 'javame_maxpicturewidth'] = 'Max picture width:'; +//export.php $string[ 'javame_name'] = 'Name:'; +//export.php $string[ 'javame_type'] = 'Type:'; +//export.php $string[ 'javame_vendor'] = 'Vendor:'; +//export.php $string[ 'javame_version'] = 'Version:'; +//exporthtml_hangman.php $string[ 'html_hangman_new'] = 'New'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'export_to_html'] = 'Export to HTML'; +//lib.php $string[ 'export_to_javame'] = 'Export to Javame'; +//lib.php $string[ 'percent'] = 'Percent'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_maxtries'] = 'Max tries'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_height'] = 'Set height of picture to'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'hiddenpicture_width'] = 'Set width of picture to'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'millionaire_shuffle'] = 'Randomize questions'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sourcemodule_include_subcategories'] = 'Include subcategories'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/sq/game.php b/lang/sq/game.php new file mode 100644 index 0000000..4f3b8ce --- /dev/null +++ b/lang/sq/game.php @@ -0,0 +1,304 @@ +Mirësevini!

    Kliko në një fjalë për të filluar.

    '; +$string[ 'letter'] = 'shkronja'; +$string[ 'letters'] = 'shkronja'; +$string[ 'nextgame'] = 'Lojë e re '; +$string[ 'no_words'] = 'Nuk u gjend asnjë fjalë '; +$string[ 'print'] = 'Printim'; +$string[ 'win'] = 'Urime!!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Fund loje'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Fjalia e saktë ishte: '; +$string[ 'hangman_correct_word'] = 'Fjala e saktë ishte: '; +$string[ 'hangman_gradeinstance'] = 'Shuma e pikeve ne gjithe lojen'; +$string[ 'hangman_letters'] = 'Shkronja : '; +$string[ 'hangman_restletters_many'] = 'Keni $a përpjekje akoma'; +$string[ 'hangman_restletters_one'] = 'Keni akoma VETEM 1 përpjekje'; +$string[ 'hangman_wrongnum'] = 'Gabime: %%d out of %%d'; +$string[ 'nextword'] = 'Fjalë tjetër '; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = "Ver pikë në pyetjen kryesore"; +$string[ 'hiddenpicture_nocols'] = 'Duhet te përcaktoni numrin e qelizave horizontalisht'; +$string[ 'hiddenpicture_nomainquestion'] = 'Nuk ka asnjë regjistrim në fjalor $a->name që të përmbajë dhë figurë'; +$string[ 'hiddenpicture_norows'] = 'Duhet te përcaktoni numrin e qelizave vertikalisht'; +$string[ 'must_select_glossary'] = 'Duhet te zgjidhni me patjetër një fjalor'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Duhet me patjetër te zgjidhni një kategori pyetjesh'; +$string[ 'millionaire_must_select_quiz'] = 'Duhet me patjetër te zgjidhni një kuiz'; + +//report/overview/report.php +$string[ 'feedback'] = 'Përgjigje'; +$string[ 'startedon'] = 'Filloni në'; +$string[ 'timecompleted'] = 'Kompletuar'; +$string[ 'unfinished'] = 'Pafund'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Numuri i sudoku që do krijohet'; +$string[ 'sudoku_create_start'] = 'Fillimi i krijimit sudoku'; +$string[ 'sudoku_creating'] = 'U krijua $a sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Fund loje'; +$string[ 'sudoku_guessnumber'] = 'Supozo numurin '; +$string[ 'sudoku_noentriesfound'] = 'Nuk u gjendën fjalë në fjalor'; + +//export.php +$string[ 'export'] = 'Εksport'; +$string[ 'html_hascheckbutton'] = 'Të ketë buton kontrollimi përgjigjjeve të sakta:'; +$string[ 'html_hasprintbutton'] = 'Të ketë buton printimi:'; +$string[ 'html_title'] = 'Titulli i faqes të internetit:'; +$string[ 'javame_createdby'] = 'U krijua nga:'; +$string[ 'javame_description'] = 'Përshkrim:'; +$string[ 'javame_filename'] = 'emri i zarfit:'; +$string[ 'javame_icon'] = 'ikona:'; +$string[ 'javame_maxpictureheight'] = 'Maksimumi i gjatësisë të ikonës:'; +$string[ 'javame_maxpicturewidth'] = 'Μaksimumi i gjërësisë të ikonës:'; +$string[ 'javame_name'] = 'Emri:'; +$string[ 'javame_type'] = 'Τip:'; +$string[ 'javame_vendor'] = 'Vendor:'; +$string[ 'javame_version'] = 'versioni:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Fund loje'; +$string[ 'html_hangman_new'] = 'E re'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'Fjala bosh thotë'; +$string[ 'millionaire_info_telephone'] = 'Mendoj se përgjigjja e saktë është '; +$string[ 'millionaire_info_wrong_answer'] = 'Përgjigjja juaj është gabim
    Pergjigjja e saktë është :'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Burimi i pyetjeve per milionerin duhet te ishte $a ose Pyetje dhe jo '; +$string[ 'must_select_questioncategory'] = 'Duhet te zgjedhësh me patjetër një kategori pyetjesh '; +$string[ 'must_select_quiz'] = 'Duhet te zgjidhni një kuiz'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Piket'; + +//index.php +$string[ 'modulename'] = 'Lojë'; +$string[ 'modulenameplural'] = 'Lojra'; +$string[ 'pluginname'] = 'Lojë'; + +//lib.php +$string[ 'attempt'] = 'Përpjekja $a'; +$string[ 'bookquiz_questions'] = 'Radhitja e katigorive te pyetjeve në vellime libri'; +$string[ 'export_to_html'] = 'Εksport në HTML'; +$string[ 'export_to_javame'] = 'Εksport në JavaMe për telefona celularë'; +$string[ 'game_bookquiz'] = 'Libër me pyetje'; +$string[ 'game_cross'] = 'Fjalëkryq'; +$string[ 'game_cryptex'] = 'Fjalefshehje'; +$string[ 'game_hangman'] = 'Xhelat'; +$string[ 'game_hiddenpicture'] = "Figura e fshehtë"; +$string[ 'game_millionaire'] = 'Milioner'; +$string[ 'game_snakes'] = 'Gjarpër'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Informacione'; +$string[ 'noattempts'] = 'Asnjë përpjekje nuk u bë për këtë lojë'; +$string[ 'percent'] = 'Përqindje'; +$string[ 'results'] = 'Përfundime'; +$string[ 'showanswers'] = 'Shfaqja e përgjigjjeve'; + +//locallib.php +$string[ 'attemptfirst'] = 'Përpjekja e parë'; +$string[ 'attemptlast'] = 'Përpjekja e fundit'; +$string[ 'gradeaverage'] = 'Numuri mesatar'; +$string[ 'gradehighest'] = 'Numuri më i madh'; + +//mod_form.php +$string[ 'bottomtext'] = 'Text në pjesën e poshtme të faqes'; +$string[ 'cross_layout'] = 'Mënyrë shfaqjeje'; +$string[ 'cross_layout0'] = 'Përcaktimet poshtë fjalëkryqit'; +$string[ 'cross_layout1'] = 'Përcaktimet nga e djathta e fjalëkryqit'; +$string[ 'cross_maxcols'] = 'Maximumi i rreshtave / shtyllave të fjalëkryqit'; +$string[ 'cross_maxwords'] = 'Maximumi i fjalëve të fjalëkryqit'; +$string[ 'cryptex_maxcols'] = 'Maximumi i rreshtave / shtyllave të fjalëkryqit'; +$string[ 'cryptex_maxtries'] = 'Maximumi i përpjekjeve'; +$string[ 'cryptex_maxwords'] = 'Maximumi i fjalëve të fjalëkryqit'; +$string[ 'grademethod'] = 'Μënyrë vleresimi'; +$string[ 'hangman_allowspaces'] = 'Të lejohen vendet bosh në fjalët'; +$string[ 'hangman_allowsub'] = 'Të lejohet simboli - në fjalet'; +$string[ 'hangman_imageset'] = 'Zgjidhni fotografi'; +$string[ 'hangman_language'] = 'Gjuha në të cilën janë fjalët'; +$string[ 'hangman_maxtries'] = 'Numuri i fjalëve për cdo lojë'; +$string[ 'hangman_showcorrectanswer'] = 'Të shfaqet përgjigjja e saktë pas fund loje ;'; +$string[ 'hangman_showfirst'] = 'Të shfaqet shkronja e parë e fjalës'; +$string[ 'hangman_showlast'] = 'Të shfaqet shkronja e fundit e fjalës'; +$string[ 'hangman_showquestion'] = 'Të shfaqen pyetjet;'; +$string[ 'hiddenpicture_across'] = "Numri i qelizave horizontale "; +$string[ 'hiddenpicture_down'] = "Numri i qelizave vertikal "; +$string[ 'hiddenpicture_height'] = 'Përcaktimi i lartesisë të ikonës'; +$string[ 'hiddenpicture_pictureglossary'] = 'Fjalori për pyetjen kryesore'; +$string[ 'hiddenpicture_width'] = 'Përcaktimi i gjërësisë të ikonës'; +$string[ 'millionaire_shuffle'] = 'Përzjerje pyetjesh'; +$string[ 'snakes_background'] = 'Pistë'; +$string[ 'sourcemodule'] = 'Burim pyetjesh'; +$string[ 'sourcemodule_book'] = 'Zgjidh libër '; +$string[ 'sourcemodule_glossary'] = 'Zgjidh fjalor'; +$string[ 'sourcemodule_glossarycategory'] = 'Zgjidh kategori fjalori'; +$string[ 'sourcemodule_include_subcategories'] = 'Te plotësohen nënkategoritë'; +$string[ 'sourcemodule_question'] = 'Pyetje'; +$string[ 'sourcemodule_questioncategory'] = 'Zgjidh kategori pyetjesh'; +$string[ 'sourcemodule_quiz'] = 'Zgjidh kuiz'; +$string[ 'sudoku_maxquestions'] = 'Μaximumi i pyetjeve'; + +//preview.php +$string[ 'only_teachers'] = 'Vetëm mesuesi mundet te shikojë këtë faqe'; +$string[ 'preview'] = 'Parashfaq'; + +//review.php +$string[ 'attempts'] = 'Përpjekje'; +$string[ 'completedon'] = 'U përfundua në'; +$string[ 'outof'] = '$a->grade nga maksimumi $a->maxgrade'; +$string[ 'review'] = 'Rikorigjim'; +$string[ 'reviewofattempt'] = 'Rikorigjim i mundimit $a'; +$string[ 'startagain'] = 'Përpjekje prap'; +$string[ 'timetaken'] = 'Koha e duhur'; + +//showanswers.php +$string[ 'feedbacks'] = 'Mesazh përgjigjjeje të saktë'; + +//showattempts.php +$string[ 'lastip'] = 'IP studenti'; +$string[ 'showsolution'] = 'Zgjedhje'; +$string[ 'timefinish'] = 'Fund loje '; +$string[ 'timelastattempt'] = 'Përpjekje e fundit'; +$string[ 'timestart'] = 'Fillimi '; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Përpjekje loje tani'; +$string[ 'continueattemptgame'] = 'Vazhdim i lojës'; +$string[ 'reattemptgame'] = 'Përpjekje loje përsëri'; +$string[ 'yourfinalgradeis'] = 'Pikët përfundimtare për këtë kuiz janë $a'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//cross/cross_class.php $string[ 'lettersall'] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'allattempts'] = 'Show all tries'; +//report/overview/report.php $string[ 'allstudents'] = 'Show all $a'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//report/overview/report.php $string[ 'attemptsonly'] = 'Show only students with attempts'; +//report/overview/report.php $string[ 'deleteattemptcheck'] = 'Are you absolutely sure you want to completely delete these attempts?'; +//report/overview/report.php $string[ 'displayoptions'] = 'Display options'; +//report/overview/report.php $string[ 'downloadods'] = 'Download in ODS format'; +//report/overview/report.php $string[ 'noattemptsonly'] = 'Show $a with no attempts only'; +//report/overview/report.php $string[ 'numattempts'] = '$a->studentnum $a->studentstring have made $a->attemptnum attempts'; +//report/overview/report.php $string[ 'pagesize'] = 'Questions per page:'; +//report/overview/report.php $string[ 'reportoverview'] = 'Overview'; +//report/overview/report.php $string[ 'selectall'] = 'Select all'; +//report/overview/report.php $string[ 'selectnone'] = 'Deselect all'; +//report/overview/report.php $string[ 'showdetailedmarks'] = 'Show mark details'; +//report/overview/report.php $string[ 'withselected'] = 'With selected'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/uk/game.php b/lang/uk/game.php new file mode 100644 index 0000000..d9d7e41 --- /dev/null +++ b/lang/uk/game.php @@ -0,0 +1,304 @@ +Mirësevini!

    Kliko në një fjalë për të filluar.

    '; +$string[ 'letter'] = 'shkronja'; +$string[ 'letters'] = 'shkronja'; +$string[ 'nextgame'] = 'Lojë e re '; +$string[ 'no_words'] = 'Не знайшлось жодного слова'; +$string[ 'print'] = 'Printim'; +$string[ 'win'] = 'Вітання!!!'; + +//cryptex/play.php +$string[ 'finish'] = 'Fund loje'; + +//db/access.php + +//hangman/play.php +$string[ 'hangman_correct_phrase'] = 'Вірна фраза була: '; +$string[ 'hangman_correct_word'] = 'Вірне слово було: '; +$string[ 'hangman_gradeinstance'] = 'Shuma e pikeve ne gjithe lojen'; +$string[ 'hangman_letters'] = 'Shkronja : '; +$string[ 'hangman_restletters_many'] = 'Keni $a përpjekje akoma'; +$string[ 'hangman_restletters_one'] = 'Keni akoma VETEM 1 përpjekje'; +$string[ 'hangman_wrongnum'] = 'Gabime: %%d out of %%d'; +$string[ 'nextword'] = 'Fjalë tjetër '; + +//hiddenpicture/play.php +$string[ 'hiddenpicture_mainsubmit'] = "Ver pikë në pyetjen kryesore"; +$string[ 'hiddenpicture_nocols'] = 'Duhet te përcaktoni numrin e qelizave horizontalisht'; +$string[ 'hiddenpicture_nomainquestion'] = 'Nuk ka asnjë regjistrim në fjalor $a->name që të përmbajë dhë figurë'; +$string[ 'hiddenpicture_norows'] = 'Duhet te përcaktoni numrin e qelizave vertikalisht'; +$string[ 'must_select_glossary'] = 'Duhet te zgjidhni me patjetër një fjalor'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = 'Duhet me patjetër te zgjidhni një kategori pyetjesh'; +$string[ 'millionaire_must_select_quiz'] = 'Duhet me patjetër te zgjidhni një kuiz'; + +//report/overview/report.php +$string[ 'allattempts'] = 'Показати всі зусилля'; +$string[ 'allstudents'] = 'Показати всі $a'; +$string[ 'attemptsonly'] = 'Показати тільки учнів які намагалися'; +$string[ 'deleteattemptcheck'] = 'Ви абсолютно впевнені,що хочете,повністю видалити ці спроби?'; +$string[ 'displayoptions'] = 'Відображити параметри'; +$string[ 'downloadods'] = 'Зберегти як ODS'; +$string[ 'feedback'] = 'Përgjigje'; +$string[ 'noattemptsonly'] = 'Відображити $a які не мають жодної спроби'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring зробили $a->attemptnum спроб'; +$string[ 'pagesize'] = 'Питання на сторінці:'; +$string[ 'reportoverview'] = 'Πерегляд'; +$string[ 'selectall'] = 'Виділити все'; +$string[ 'selectnone'] = ' Відмінити все'; +$string[ 'showdetailedmarks'] = 'Інформація питань'; +$string[ 'startedon'] = 'Filloni në'; +$string[ 'timecompleted'] = 'Kompletuar'; +$string[ 'unfinished'] = 'Pafund'; +$string[ 'withselected'] = 'З вибраним'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = 'Numuri i sudoku që do krijohet'; +$string[ 'sudoku_create_start'] = 'Fillimi i krijimit sudoku'; +$string[ 'sudoku_creating'] = 'U krijua $a sudoku'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = 'Fund loje'; +$string[ 'sudoku_guessnumber'] = 'Supozo numurin '; +$string[ 'sudoku_noentriesfound'] = 'Nuk u gjendën fjalë në fjalor'; + +//export.php +$string[ 'export'] = 'Εksport'; +$string[ 'html_hascheckbutton'] = 'Të ketë buton kontrollimi përgjigjjeve të sakta:'; +$string[ 'html_hasprintbutton'] = 'Të ketë buton printimi:'; +$string[ 'html_title'] = 'Titulli i faqes të internetit:'; +$string[ 'javame_createdby'] = 'U krijua nga:'; +$string[ 'javame_description'] = 'Përshkrim:'; +$string[ 'javame_filename'] = 'emri i zarfit:'; +$string[ 'javame_icon'] = 'ikona:'; +$string[ 'javame_maxpictureheight'] = 'Maksimumi i gjatësisë të ikonës:'; +$string[ 'javame_maxpicturewidth'] = 'Μaksimumi i gjërësisë të ikonës:'; +$string[ 'javame_name'] = 'Emri:'; +$string[ 'javame_type'] = 'Τip:'; +$string[ 'javame_vendor'] = 'Vendor:'; +$string[ 'javame_version'] = 'versioni:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = 'Fund loje'; +$string[ 'html_hangman_new'] = 'E re'; + +//exporthtml_millionaire.php +$string[ 'millionaire_info_people'] = 'Fjala bosh thotë'; +$string[ 'millionaire_info_telephone'] = 'Mendoj se përgjigjja e saktë është '; +$string[ 'millionaire_info_wrong_answer'] = 'Përgjigjja juaj është gabim
    Pergjigjja e saktë është :'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = 'Burimi i pyetjeve per milionerin duhet te ishte $a ose Pyetje dhe jo '; +$string[ 'must_select_questioncategory'] = 'Duhet te zgjedhësh me patjetër një kategori pyetjesh '; +$string[ 'must_select_quiz'] = 'Duhet te zgjidhni një kuiz'; + +//exporthtml_snakes.php +$string[ 'score'] = 'Piket'; + +//index.php +$string[ 'modulename'] = 'Lojë'; +$string[ 'modulenameplural'] = 'Lojra'; +$string[ 'pluginname'] = 'Lojë'; + +//lib.php +$string[ 'attempt'] = 'Përpjekja $a'; +$string[ 'bookquiz_questions'] = 'Radhitja e katigorive te pyetjeve në vellime libri'; +$string[ 'export_to_html'] = 'Εksport në HTML'; +$string[ 'export_to_javame'] = 'Εksport në JavaMe për telefona celularë'; +$string[ 'game_bookquiz'] = 'Libër me pyetje'; +$string[ 'game_cross'] = 'Fjalëkryq'; +$string[ 'game_cryptex'] = 'Fjalefshehje'; +$string[ 'game_hangman'] = 'Xhelat'; +$string[ 'game_hiddenpicture'] = "Figura e fshehtë"; +$string[ 'game_millionaire'] = 'Milioner'; +$string[ 'game_snakes'] = 'Gjarpër'; +$string[ 'game_sudoku'] = 'Sudoku'; +$string[ 'info'] = 'Informacione'; +$string[ 'noattempts'] = 'Asnjë përpjekje nuk u bë për këtë lojë'; +$string[ 'percent'] = 'Përqindje'; +$string[ 'results'] = 'Përfundime'; +$string[ 'showanswers'] = 'Shfaqja e përgjigjjeve'; + +//locallib.php +$string[ 'attemptfirst'] = 'Përpjekja e parë'; +$string[ 'attemptlast'] = 'Përpjekja e fundit'; +$string[ 'gradeaverage'] = 'Numuri mesatar'; +$string[ 'gradehighest'] = 'Numuri më i madh'; + +//mod_form.php +$string[ 'bottomtext'] = 'Text në pjesën e poshtme të faqes'; +$string[ 'cross_layout'] = 'Mënyrë shfaqjeje'; +$string[ 'cross_layout0'] = 'Përcaktimet poshtë fjalëkryqit'; +$string[ 'cross_layout1'] = 'Përcaktimet nga e djathta e fjalëkryqit'; +$string[ 'cross_maxcols'] = 'Maximumi i rreshtave / shtyllave të fjalëkryqit'; +$string[ 'cross_maxwords'] = 'Maximumi i fjalëve të fjalëkryqit'; +$string[ 'cryptex_maxcols'] = 'Maximumi i rreshtave / shtyllave të fjalëkryqit'; +$string[ 'cryptex_maxtries'] = 'Maximumi i përpjekjeve'; +$string[ 'cryptex_maxwords'] = 'Maximumi i fjalëve të fjalëkryqit'; +$string[ 'grademethod'] = 'Μënyrë vleresimi'; +$string[ 'hangman_allowspaces'] = 'Të lejohen vendet bosh në fjalët'; +$string[ 'hangman_allowsub'] = 'Të lejohet simboli - në fjalet'; +$string[ 'hangman_imageset'] = 'Zgjidhni fotografi'; +$string[ 'hangman_language'] = 'Gjuha në të cilën janë fjalët'; +$string[ 'hangman_maxtries'] = 'Numuri i fjalëve për cdo lojë'; +$string[ 'hangman_showcorrectanswer'] = 'Të shfaqet përgjigjja e saktë pas fund loje ;'; +$string[ 'hangman_showfirst'] = 'Të shfaqet shkronja e parë e fjalës'; +$string[ 'hangman_showlast'] = 'Të shfaqet shkronja e fundit e fjalës'; +$string[ 'hangman_showquestion'] = 'Të shfaqen pyetjet;'; +$string[ 'hiddenpicture_across'] = "Numri i qelizave horizontale "; +$string[ 'hiddenpicture_down'] = "Numri i qelizave vertikal "; +$string[ 'hiddenpicture_height'] = 'Përcaktimi i lartesisë të ikonës'; +$string[ 'hiddenpicture_pictureglossary'] = 'Fjalori për pyetjen kryesore'; +$string[ 'hiddenpicture_width'] = 'Përcaktimi i gjërësisë të ikonës'; +$string[ 'millionaire_shuffle'] = 'Përzjerje pyetjesh'; +$string[ 'snakes_background'] = 'Pistë'; +$string[ 'sourcemodule'] = 'Burim pyetjesh'; +$string[ 'sourcemodule_book'] = 'Zgjidh libër '; +$string[ 'sourcemodule_glossary'] = 'Zgjidh fjalor'; +$string[ 'sourcemodule_glossarycategory'] = 'Zgjidh kategori fjalori'; +$string[ 'sourcemodule_include_subcategories'] = 'Te plotësohen nënkategoritë'; +$string[ 'sourcemodule_question'] = 'Pyetje'; +$string[ 'sourcemodule_questioncategory'] = 'Zgjidh kategori pyetjesh'; +$string[ 'sourcemodule_quiz'] = 'Zgjidh kuiz'; +$string[ 'sudoku_maxquestions'] = 'Μaximumi i pyetjeve'; + +//preview.php +$string[ 'only_teachers'] = 'Vetëm mesuesi mundet te shikojë këtë faqe'; +$string[ 'preview'] = 'Parashfaq'; + +//review.php +$string[ 'attempts'] = 'Përpjekje'; +$string[ 'completedon'] = 'U përfundua në'; +$string[ 'outof'] = '$a->grade nga maksimumi $a->maxgrade'; +$string[ 'review'] = 'Rikorigjim'; +$string[ 'reviewofattempt'] = 'Rikorigjim i mundimit $a'; +$string[ 'startagain'] = 'Përpjekje prap'; +$string[ 'timetaken'] = 'Koha e duhur'; + +//showanswers.php +$string[ 'feedbacks'] = 'Mesazh përgjigjjeje të saktë'; + +//showattempts.php +$string[ 'lastip'] = 'IP studenti'; +$string[ 'showsolution'] = 'Zgjedhje'; +$string[ 'timefinish'] = 'Fund loje '; +$string[ 'timelastattempt'] = 'Përpjekje e fundit'; +$string[ 'timestart'] = 'Fillimi '; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = 'Përpjekje loje tani'; +$string[ 'continueattemptgame'] = 'Vazhdim i lojës'; +$string[ 'reattemptgame'] = 'Përpjekje loje përsëri'; +$string[ 'yourfinalgradeis'] = 'Pikët përfundimtare për këtë kuiz janë $a'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//hiddenpicture/play.php $string[ 'noglossaryentriesfound'] = 'No glossary entries found'; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_millionaire.php $string[ 'millionaire_helppeople'] = 'Help of people'; +//exporthtml_millionaire.php $string[ 'millionaire_quit'] = 'Quit'; +//exporthtml_millionaire.php $string[ 'millionaire_telephone'] = 'Help of telephone'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//lib.php $string[ 'showattempts'] = 'Show attempts'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'cross_options'] = 'Crossword options'; +//mod_form.php $string[ 'cryptex_options'] = 'Cryptex ofptions'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'hangman_options'] = 'Hangman options'; +//mod_form.php $string[ 'hiddenpicture_options'] = '\'Hidden Picture\' options'; +//mod_form.php $string[ 'millionaire_background'] = 'Background color'; +//mod_form.php $string[ 'millionaire_options'] = 'Millionaire\' options'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_options'] = '\'Snakes and Ladders\' options'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'sudoku_options'] = 'Sudoku options'; +//mod_form.php $string[ 'toptext'] = 'Text at the top of page'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//showanswers.php $string[ 'clearrepetitions'] = 'Clear statistics'; +//showanswers.php $string[ 'computerepetitions'] = 'Compute statistics again'; +//showanswers.php $string[ 'repetitions'] = 'Repetitions'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lang/zh_cn/game.php b/lang/zh_cn/game.php new file mode 100644 index 0000000..f6221f7 --- /dev/null +++ b/lang/zh_cn/game.php @@ -0,0 +1,304 @@ +名称附加照片'; +$string[ 'hiddenpicture_norows'] = '必须指定垂直列数'; +$string[ 'must_select_glossary'] = '你必须选定一个词汇'; +$string[ 'noglossaryentriesfound'] = '词汇表没找到'; + +//millionaire/play.php +$string[ 'millionaire_must_select_questioncategory'] = '你必须选定一个问题类别'; +$string[ 'millionaire_must_select_quiz'] = '你必须选择一个小测验'; + +//report/overview/report.php +$string[ 'allattempts'] = '显示所有可能的机会'; +$string[ 'allstudents'] = '显示所有的 $a'; +$string[ 'attemptsonly'] = '只显示进行尝试的学生'; +$string[ 'deleteattemptcheck'] = '你真的确定要完全删除这些尝试?'; +$string[ 'displayoptions'] = '显示选项'; +$string[ 'downloadods'] = '以ODS格式下载'; +$string[ 'feedback'] = '反馈'; +$string[ 'noattemptsonly'] = '显示 $a ,不需任何尝试'; +$string[ 'numattempts'] = '$a->studentnum $a->studentstring 已经形成 $a->attemptnum 尝试'; +$string[ 'pagesize'] = '每页出现的问题:'; +$string[ 'reportoverview'] = '浏览'; +$string[ 'selectall'] = '全选'; +$string[ 'selectnone'] = '全不选'; +$string[ 'showdetailedmarks'] = '显示标记'; +$string[ 'startedon'] = '开始'; +$string[ 'timecompleted'] = '完成'; +$string[ 'unfinished'] = '打开'; +$string[ 'withselected'] = '选定'; + +//snakes/play.php + +//sudoku/create.php +$string[ 'sudoku_create_count'] = '创建数独游戏数'; +$string[ 'sudoku_create_start'] = '开始创建数独游戏'; +$string[ 'sudoku_creating'] = '正在创建 $a 数独游戏'; + +//sudoku/play.php +$string[ 'sudoku_finishattemptbutton'] = '数独游戏结束'; +$string[ 'sudoku_guessnumber'] = '猜测正确的编号'; +$string[ 'sudoku_noentriesfound'] = '没找到任何字'; + +//export.php +$string[ 'export'] = '输出'; +$string[ 'html_hascheckbutton'] = '已检查按钮:'; +$string[ 'html_hasprintbutton'] = '已打印按钮:'; +$string[ 'html_title'] = 'HTML的标题:'; +$string[ 'javame_createdby'] = '创建于:'; +$string[ 'javame_description'] = '描述:'; +$string[ 'javame_filename'] = '文件名:'; +$string[ 'javame_icon'] = '图标:'; +$string[ 'javame_maxpictureheight'] = '图片的最大高度:'; +$string[ 'javame_maxpicturewidth'] = '图片的最大宽度:'; +$string[ 'javame_name'] = '名称:'; +$string[ 'javame_type'] = '类型:'; +$string[ 'javame_vendor'] = '销售商:'; +$string[ 'javame_version'] = '版本:'; + +//exporthtml_hangman.php +$string[ 'hangman_loose'] = '游戏结束'; +$string[ 'html_hangman_new'] = '新的'; + +//exporthtml_millionaire.php +$string[ 'millionaire_helppeople'] = '帮助'; +$string[ 'millionaire_info_people'] = '人们说'; +$string[ 'millionaire_info_telephone'] = '我认为正确答案是 '; +$string[ 'millionaire_info_wrong_answer'] = '你的回答错误,正确答案是:'; +$string[ 'millionaire_quit'] = '退出'; +$string[ 'millionaire_sourcemodule_must_quiz_question'] = '对于百万富翁来说资源一定是 $a 要么有问题要么没有'; +$string[ 'millionaire_telephone'] = '借助电话'; +$string[ 'must_select_questioncategory'] = '你必须选定一个问题类别'; +$string[ 'must_select_quiz'] = '你必须选择一个小测验'; + +//exporthtml_snakes.php +$string[ 'score'] = '得分'; + +//index.php +$string[ 'modulename'] = '游戏'; +$string[ 'modulenameplural'] = '游戏'; +$string[ 'pluginname'] = '游戏'; + +//lib.php +$string[ 'attempt'] = '尝试 $a'; +$string[ 'bookquiz_questions'] = '把一些问题分类同各章节联系起来'; +$string[ 'export_to_html'] = '导出HTML'; +$string[ 'export_to_javame'] = '导出Javame'; +$string[ 'game_bookquiz'] = '带有问题的书'; +$string[ 'game_cross'] = '填字游戏'; +$string[ 'game_cryptex'] = '藏密筒'; +$string[ 'game_hangman'] = '刽子手'; +$string[ 'game_hiddenpicture'] = '图片隐藏'; +$string[ 'game_millionaire'] = '百万富翁'; +$string[ 'game_snakes'] = '蛇和梯子'; +$string[ 'game_sudoku'] = '数独游戏'; +$string[ 'info'] = '信息'; +$string[ 'noattempts'] = '这个游戏没有进行任何尝试'; +$string[ 'percent'] = '百分率'; +$string[ 'results'] = '结果'; +$string[ 'showanswers'] = '答案显示'; +$string[ 'showattempts'] = '试玩显示'; + +//locallib.php +$string[ 'attemptfirst'] = '第一次机会'; +$string[ 'attemptlast'] = '最后一次机会'; +$string[ 'gradeaverage'] = '平均分'; +$string[ 'gradehighest'] = '最高分'; + +//mod_form.php +$string[ 'bottomtext'] = '底部文本'; +$string[ 'cross_layout'] = '布局'; +$string[ 'cross_layout0'] = '字谜底部的词组'; +$string[ 'cross_layout1'] = '字谜右侧的词组'; +$string[ 'cross_maxcols'] = '填字游戏的最大数'; +$string[ 'cross_maxwords'] = '游戏字的最大数'; +$string[ 'cross_options'] = '填字游戏选项'; +$string[ 'cryptex_maxcols'] = '藏密筒的最大行/列数'; +$string[ 'cryptex_maxtries'] = '最多机会'; +$string[ 'cryptex_maxwords'] = '藏密筒中最多词汇'; +$string[ 'cryptex_options'] = '藏密筒选项'; +$string[ 'grademethod'] = '评分方法'; +$string[ 'hangman_allowspaces'] = '允许文字间有间隔'; +$string[ 'hangman_allowsub'] = '允许文字里有符号'; +$string[ 'hangman_imageset'] = '选择刽子手的图像'; +$string[ 'hangman_language'] = '选择语言'; +$string[ 'hangman_maxtries'] = '每个游戏数'; +$string[ 'hangman_options'] = '刽子手选项'; +$string[ 'hangman_showcorrectanswer'] = '结束后正确答案显示'; +$string[ 'hangman_showfirst'] = '刽子手游戏的第一个字母显示'; +$string[ 'hangman_showlast'] = '刽子手游戏的最后一个字母显示'; +$string[ 'hangman_showquestion'] = '问题显示 ?'; +$string[ 'hiddenpicture_across'] = '水平单元'; +$string[ 'hiddenpicture_down'] = '纵向单元'; +$string[ 'hiddenpicture_height'] = '图片的高度设置'; +$string[ 'hiddenpicture_options'] = '\图片隐藏\' 选项'; +$string[ 'hiddenpicture_pictureglossary'] = '主要问题和图片词汇'; +$string[ 'hiddenpicture_width'] = '图像宽度设置'; +$string[ 'millionaire_background'] = '背景颜色'; +$string[ 'millionaire_options'] = '百万富翁选项'; +$string[ 'millionaire_shuffle'] = '随机问题'; +$string[ 'snakes_background'] = '背景'; +$string[ 'snakes_options'] = '\'蛇和梯子\' 选项'; +$string[ 'sourcemodule'] = '问题来源'; +$string[ 'sourcemodule_book'] = '挑选一本书'; +$string[ 'sourcemodule_glossary'] = '词汇选择'; +$string[ 'sourcemodule_glossarycategory'] = '词汇类别选择'; +$string[ 'sourcemodule_include_subcategories'] = '包括子目录'; +$string[ 'sourcemodule_question'] = '问题'; +$string[ 'sourcemodule_questioncategory'] = '问题类别选择'; +$string[ 'sourcemodule_quiz'] = '小测验选择'; +$string[ 'sudoku_maxquestions'] = '问题的最大数量'; +$string[ 'sudoku_options'] = '数独游戏选项'; +$string[ 'toptext'] = '顶部文本'; + +//preview.php +$string[ 'only_teachers'] = '只有老师可以查看此页'; +$string[ 'preview'] = '预览'; + +//review.php +$string[ 'attempts'] = '尝试'; +$string[ 'completedon'] = '完成'; +$string[ 'outof'] = '$a->$a 的最高分->最高分'; +$string[ 'review'] = '回顾'; +$string[ 'reviewofattempt'] = '回顾 $a'; +$string[ 'startagain'] = '重新开始'; +$string[ 'timetaken'] = '所需时间'; + +//showanswers.php +$string[ 'clearrepetitions'] = '清除数据'; +$string[ 'computerepetitions'] = '再次计算数据'; +$string[ 'feedbacks'] = '正确答案信息'; +$string[ 'repetitions'] = '重复'; + +//showattempts.php +$string[ 'lastip'] = 'IP学生'; +$string[ 'showsolution'] = '答案'; +$string[ 'timefinish'] = '游戏结束'; +$string[ 'timelastattempt'] = '最后一次机会'; +$string[ 'timestart'] = '开始'; + +//tabs.php + +//view.php +$string[ 'attemptgamenow'] = '现在试玩游戏'; +$string[ 'continueattemptgame'] = '继续前一个游戏'; +$string[ 'reattemptgame'] = '重新试玩游戏'; +$string[ 'yourfinalgradeis'] = '此轮游戏的最后得分是 $a.'; + +//Untranslated +//bookquiz/questions.php $string[ 'bookquiz_numquestions'] = 'Questions'; +//db/access.php $string[ 'game:attempt'] = 'Play game'; +//db/access.php $string[ 'game:deleteattempts'] = 'Delete attempts'; +//db/access.php $string[ 'game:grade'] = 'Grade games manually'; +//db/access.php $string[ 'game:manage'] = 'Manage'; +//db/access.php $string[ 'game:manageoverrides'] = 'Manage game overrides'; +//db/access.php $string[ 'game:preview'] = 'Preview Games'; +//db/access.php $string[ 'game:reviewmyattempts'] = 'reviewmyattempts'; +//db/access.php $string[ 'game:view'] = 'view'; +//db/access.php $string[ 'game:viewreports'] = 'viewreports'; +//hiddenpicture/play.php $string[ 'no_questions'] = "There are no questions"; +//report/overview/report.php $string[ 'attemptduration'] = 'Attempt duration'; +//snakes/play.php $string[ 'snakes_dice'] = 'Dice, $a spots.'; +//snakes/play.php $string[ 'snakes_player'] = 'Player, position: $a.'; +//exporthtml_snakes.php $string[ 'html_snakes_check'] = 'Check'; +//exporthtml_snakes.php $string[ 'html_snakes_correct'] = 'Correct!'; +//exporthtml_snakes.php $string[ 'html_snakes_no_selection'] = 'Have to select something!'; +//exporthtml_snakes.php $string[ 'html_snakes_wrong'] = "Your answer isn't correct. Stay on the same seat."; +//index.php $string[ 'helpbookquiz'] = 'When the student answers correct can go to the next chapter.'; +//index.php $string[ 'helpcross'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a random crossword puzzle. Teacher can set the maximum number of columns/rows or words that contains. Student can press the button “Check crossword” to check if the answers are correct. Every crossword is dynamic so it is different to every student.'; +//index.php $string[ 'helpcryptex'] = 'This game is like a crossword but the answers are hidden inside a random cryptex.'; +//index.php $string[ 'helphangman'] = 'This game takes words from either a Glossary or quiz short answer questions and generates a hangman puzzle. Teacher can set the number of words that each game contains, if shows the first or last letter, or if show the question or the answer at the end.'; +//index.php $string[ 'helphiddenpicture'] = 'The hidden picture game uncovers each piece of a picture for each question correctly answered by the student. Each number in the hidden picture game displays a question to the student such that when the student answers the question correctly, the number is uncovered to display a piece of the picture.'; +//index.php $string[ 'helpmillionaire'] = 'A question is displayed to the student which if answered correctly moves up to the next number in the game until the user has completed the questions. If a question is answered incorrectly, the game is over.'; +//index.php $string[ 'helpsnakes'] = 'A question is displayed to the student which if answered correctly, displays a number on the dice, then game piece moves up the number displayed on the dice.'; +//index.php $string[ 'helpsudoku'] = 'This game shows a sudoku puzzle to the students with not enough numbers to allow it to be solved. For each question the student correctly answers an additional number is slotted into the puzzle to make it easier to solve.'; +//index.php $string[ 'pluginadministration'] = 'Game administration'; +//lib.php $string[ 'reset_game_all'] = 'Delete tries from all games'; +//lib.php $string[ 'reset_game_deleted_course'] = 'Delete tries from deleted courses'; +//mod_form.php $string[ 'bookquiz_layout'] = 'Layout'; +//mod_form.php $string[ 'bookquiz_layout0'] = 'Question at the top of the book'; +//mod_form.php $string[ 'bookquiz_layout1'] = 'Question at the bottom of the book'; +//mod_form.php $string[ 'bookquiz_options'] = 'Bookquiz options'; +//mod_form.php $string[ 'gameclose'] = 'Close the game'; +//mod_form.php $string[ 'gameopen'] = 'Open the game'; +//mod_form.php $string[ 'hangman_maximum_number_of_errors'] = 'Maximum number or errors (have to be images named hangman_0.jpg, hangman_1.jpg, ...)'; +//mod_form.php $string[ 'snakes_cols'] = 'Cols'; +//mod_form.php $string[ 'snakes_data'] = 'Positions of Snakes and Ladders'; +//mod_form.php $string[ 'snakes_file'] = 'File for background'; +//mod_form.php $string[ 'snakes_footerx'] = 'Space at bootom left'; +//mod_form.php $string[ 'snakes_footery'] = 'Space at bottom right'; +//mod_form.php $string[ 'snakes_headerx'] = 'Space at up left'; +//mod_form.php $string[ 'snakes_headery'] = 'Space at up right'; +//mod_form.php $string[ 'snakes_layout0'] = 'Question at the top of the image'; +//mod_form.php $string[ 'snakes_layout1'] = 'Question at the bottom of the image'; +//mod_form.php $string[ 'snakes_rows'] = 'Rows'; +//mod_form.php $string[ 'userdefined'] = 'User defined'; +//review.php $string[ 'showall'] = 'Show all'; +//view.php $string[ 'comment'] = 'Comment'; +//view.php $string[ 'gameclosed'] = 'This game closed on {$a}'; +//view.php $string[ 'gamecloseson'] = 'This game will close at {$a}'; +//view.php $string[ 'gamenotavailable'] = 'The game will not be available until {$a}'; +//view.php $string[ 'gameopenedon'] = 'This game opened at {$a}'; diff --git a/lib.php b/lib.php new file mode 100644 index 0000000..94262d0 --- /dev/null +++ b/lib.php @@ -0,0 +1,1101 @@ +review + * These constants help to extract the options + */ +/** + * The first 6 bits refer to the time immediately after the attempt + */ +define('GAME_REVIEW_IMMEDIATELY', 0x3f); +/** + * the next 6 bits refer to the time after the attempt but while the game is open + */ +define('GAME_REVIEW_OPEN', 0xfc0); +/** + * the final 6 bits refer to the time after the game closes + */ +define('GAME_REVIEW_CLOSED', 0x3f000); + +// within each group of 6 bits we determine what should be shown +define('GAME_REVIEW_RESPONSES', 1*0x1041); // Show responses +define('GAME_REVIEW_SCORES', 2*0x1041); // Show scores +define('GAME_REVIEW_FEEDBACK', 4*0x1041); // Show feedback +define('GAME_REVIEW_ANSWERS', 8*0x1041); // Show correct answers +// Some handling of worked solutions is already in the code but not yet fully supported +// and not switched on in the user interface. +define('GAME_REVIEW_SOLUTIONS', 16*0x1041); // Show solutions +define('GAME_REVIEW_GENERALFEEDBACK', 32*0x1041); // Show general feedback +/**#@-*/ + + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod.html) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $instance An object from the form in mod.html + * @return int The id of the newly inserted game record + **/ + +function game_add_instance($game) { + global $DB; + + $game->timemodified = time(); + game_before_add_or_update( $game); + + # May have to add extra stuff in here # + + $id = $DB->insert_record("game", $game); + + $game = $DB->get_record_select( 'game', "id=$id"); + + // Do the processing required after an add or an update. + game_grade_item_update( $game); + + return $id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod.html) this function + * will update an existing instance with new data. + * + * @param object $instance An object from the form in mod.html + * @return boolean Success/Fail + **/ +function game_update_instance($game) { + global $DB; + + $game->timemodified = time(); + $game->id = $game->instance; + + if( !isset( $game->glossarycategoryid)){ + $game->glossarycategoryid = 0; + } + + if( !isset( $game->glossarycategoryid2)){ + $game->glossarycategoryid2 = 0; + } + + if( $game->grade == ''){ + $game->grade = 0; + } + + if( !isset( $game->param1)){ + $game->param1 = 0; + } + + if( $game->param1 == ''){ + $game->param1 = 0; + } + + if( !isset( $game->param2)){ + $game->param2 = 0; + } + + if( $game->param2 == ''){ + $game->param2 = 0; + } + + if( !isset( $game->questioncategoryid)){ + $game->questioncategoryid = 0; + } + + game_before_add_or_update( $game); + + if( !$DB->update_record("game", $game)){ + return false; + } + + // Do the processing required after an add or an update. + game_grade_item_update( $game); + + return true; +} + +function game_before_add_or_update(&$game) { + if( isset( $game->questioncategoryid)) + { + $pos = strpos( $game->questioncategoryid, ','); + if( $pos != false) + $game->questioncategoryid = substr( $game->questioncategoryid, 0, $pos); + } + + if( $game->gamekind == 'millionaire') + { + $pos = strpos( '-'.$game->param8, '#'); + if( $pos > 0) + { + $game->param8 = hexdec(substr( $game->param8, $pos)); + } + }else if( $game->gamekind == 'snakes') + { + $s = ''; + if( $game->param3 == 0) + { + //means user defined + $draftitemid = $game->param4; + if( isset( $game->id)) + { + $cmg = get_coursemodule_from_instance('game', $game->id, $game->course); + $modcontext = get_context_instance(CONTEXT_MODULE, $cmg->id); + $attachmentoptions=array('subdirs' => 0, 'maxbytes' => 9999999, 'maxfiles' => 1); + file_save_draft_area_files($draftitemid, $modcontext->id, 'mod_game', 'snakes_file', $game->id, array('subdirs' => 0, 'maxbytes' => 9999999, 'maxfiles' => 1)); + $game->param5 = 1; + } + + if( isset( $_POST[ 'snakes_cols'])) + { + $fields = array( 'snakes_data', 'snakes_cols', 'snakes_rows', 'snakes_headerx', 'snakes_headery', 'snakes_footerx', 'snakes_footery', 'snakes_width', 'snakes_height'); + foreach( $fields as $f) + $s .= '#'.$f.':'.$_POST[ $f]; + $s = substr( $s, 1); + } + } + $game->param9 = $s; + } +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return boolean Success/Failure + **/ +function game_delete_instance($gameid) { + global $DB; + + $result = true; + + # Delete any dependent records here # + + if( ($recs = $DB->get_records( 'game_attempts', array( 'gameid' => $gameid))) != false){ + $ids = ''; + $count = 0; + $aids = array(); + foreach( $recs as $rec){ + $ids .= ','.$rec->id; + if( ++$count > 10){ + $count = 0; + $aids[] = $ids; + $ids = ''; + } + } + if( $ids != ''){ + $aids[] = $ids; + } + + foreach( $aids as $ids){ + if( $result == false){ + break; + } + $tables = array( 'game_hangman', 'game_cross', 'game_cryptex', 'game_millionaire', 'game_bookquiz', 'game_sudoku', 'game_snakes'); + foreach( $tables as $t){ + $sql = "DELETE FROM {".$t."} WHERE id IN (".substr( $ids, 1).')'; + if (! $DB->execute( $sql)) { + $result = false; + break; + } + } + } + } + + $tables = array( 'game_attempts', 'game_grades', 'game_bookquiz_questions', 'game_queries', 'game_repetitions'); + foreach( $tables as $t){ + if( $result == false){ + break; + } + + if (! $DB->delete_records( $t, array( 'gameid' => $gameid))) { + $result = false; + } + } + + if( $result){ + $tables = array( 'game_export_javame', 'game_export_html', 'game'); + if (!$DB->delete_records( 'game', array( 'id' => $gameid))) { + $result = false; + } + } + + return $result; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + **/ +function game_user_outline($course, $user, $mod, $game) { + global $DB; + + if ($grade = $DB->get_record_select('game_grades', "userid=$user->id AND gameid = $game->id", null, 'id,score,timemodified')) { + + $result = new stdClass; + if ((float)$grade->score) { + $result->info = get_string('grade').': '.round($grade->score * $game->grade, $game->decimalpoints).' '. + get_string('percent', 'game').': '.round(100 * $grade->score, $game->decimalpoints).' %'; + } + $result->time = $grade->timemodified; + return $result; + } + return NULL; +} + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + **/ +function game_user_complete($course, $user, $mod, $game) { + global $DB; + + if ($attempts = $DB->get_records_select('game_attempts', "userid='$user->id' AND gameid='$game->id'", null, 'attempt ASC')) { + if ($game->grade && $grade = $DB->get_record('game_grades', array( 'userid' => $user->id, 'gameid' => $game->id))) { + echo get_string('grade').': '.game_format_score( $game, $grade->score).'/'.$game->grade.'
    '; + } + foreach ($attempts as $attempt) { + echo get_string('attempt', 'game').' '.$attempt->attempt.': '; + if ($attempt->timefinish == 0) { + print_string( 'unfinished'); + } else { + echo game_format_score( $game, $attempt->score).'/'.$game->grade; + } + echo ' - '.userdate($attempt->timelastattempt).'
    '; + } + } else { + print_string('noattempts', 'game'); + } + + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in game activities and print it out. + * Return true if there was output, or false is there was none. + * + * @uses $CFG + * @return boolean + * @todo Finish documenting this function + **/ +function game_print_recent_activity($course, $isteacher, $timestart) { + global $CFG; + + return false; // True if anything was printed, otherwise false +} + +/** + * Function to be run periodically according to the moodle cron + * This function searches for things that need to be done, such + * as sending out mail, toggling flags etc ... + * + * @uses $CFG + * @return boolean + * @todo Finish documenting this function + **/ +function game_cron () { + global $CFG; + + return true; +} + +/** + * Must return an array of grades for a given instance of this module, + * indexed by user. It also returns a maximum allowed grade. + * + * Example: + * $return->grades = array of grades; + * $return->maxgrade = maximum allowed grade; + * + * return $return; + * + * @param int $gameid ID of an instance of this module + * @return mixed Null or object with an array of grades and with the maximum grade + **/ +function game_grades($gameid) { +/// Must return an array of grades, indexed by user, and a max grade. + + global $DB; + + $game = $DB->get_record( 'game', array( 'id' => intval($gameid))); + if (empty($game) || empty($game->grade)) { + return NULL; + } + + $return = new stdClass; + $return->grades = $DB->get_records_menu('game_grades', 'gameid', $game->id, '', "userid, score * {$game->grade}"); + $return->maxgrade = $game->grade; + + return $return; +} + +/** + * Return grade for given user or all users. + * + * @param int $gameid id of game + * @param int $userid optional user id, 0 means all users + * @return array array of grades, false if none + */ +function game_get_user_grades($game, $userid=0) { + global $DB; + + $user = $userid ? "AND u.id = $userid" : ""; + + $sql = 'SELECT u.id, u.id AS userid, '.$game->grade.' * g.score AS rawgrade, g.timemodified AS dategraded, MAX(a.timefinish) AS datesubmitted + FROM {user} u, {game_grades} g, {game_attempts} a + WHERE u.id = g.userid AND g.gameid = '.$game->id.' AND a.gameid = g.gameid AND u.id = a.userid'; + if( $userid != 0) + $sql .= ' AND u.id='.$userid; + $sql .= ' GROUP BY u.id, g.score, g.timemodified'; + + return $DB->get_records_sql( $sql); +} + +/** + * Must return an array of user records (all data) who are participants + * for a given instance of game. Must include every user involved + * in the instance, independient of his role (student, teacher, admin...) + * See other modules as example. + * + * @param int $gameid ID of an instance of this module + * @return mixed boolean/array of students + **/ +function game_get_participants($gameid) { + return false; //todo +} + +/** + * This function returns if a scale is being used by one game + * it it has support for grading and scales. Commented code should be + * modified if necessary. See forum, glossary or journal modules + * as reference. + * + * @param int $gameid ID of an instance of this module + * @return mixed + * @todo Finish documenting this function + **/ +function game_scale_used ($gameid,$scaleid) { + $return = false; + + //$rec = get_record("game","id","$gameid","scale","-$scaleid"); + // + //if (!empty($rec) && !empty($scaleid)) { + // $return = true; + //} + + return $return; +} + +/** + * Update grades in central gradebook + * + * @param object $game null means all games + * @param int $userid specific user only, 0 mean all + */ +function game_update_grades($game=null, $userid=0, $nullifnone=true) { + global $CFG; + if (!function_exists('grade_update')) { //workaround for buggy PHP versions + if( file_exists( $CFG->libdir.'/gradelib.php')){ + require_once($CFG->libdir.'/gradelib.php'); + }else{ + return; + } + } + + if ($game != null) { + if ($grades = game_get_user_grades($game, $userid)) { + game_grade_item_update($game, $grades); + + } else if ($userid and $nullifnone) { + $grade = new object(); + $grade->userid = $userid; + $grade->rawgrade = NULL; + game_grade_item_update( $game, $grade); + + } else { + game_grade_item_update( $game); + } + + } else { + $sql = "SELECT a.*, cm.idnumber as cmidnumber, a.course as courseid + FROM {game} a, {course_modules} cm, {modules} m + WHERE m.name='game' AND m.id=cm.module AND cm.instance=a.id"; + if ($rs = $DB->get_recordset_sql( $sql)) { + while ($game = $DB->rs_fetch_next_record( $rs)) { + if ($game->grade != 0) { + game_update_grades( $game, 0, false); + } else { + game_grade_item_update( $game); + } + } + $DB->rs_close( $rs); + } + } +} + +/** + * Create grade item for given game + * + * @param object $game object with extra cmidnumber + * @param mixed optional array/object of grade(s); 'reset' means reset grades in gradebook + * @return int 0 if ok, error code otherwise + */ +function game_grade_item_update($game, $grades=NULL) { + global $CFG; + if (!function_exists('grade_update')) { //workaround for buggy PHP versions + if( file_exists( $CFG->libdir.'/gradelib.php')){ + require_once($CFG->libdir.'/gradelib.php'); + }else{ + return; + } + } + + if (array_key_exists('cmidnumber', $game)) { //it may not be always present + $params = array('itemname'=>$game->name, 'idnumber'=>$game->cmidnumber); + } else { + $params = array('itemname'=>$game->name); + } + + if ($game->grade > 0) { + $params['gradetype'] = GRADE_TYPE_VALUE; + $params['grademax'] = $game->grade; + $params['grademin'] = 0; + + } else { + $params['gradetype'] = GRADE_TYPE_NONE; + } + + + if ($grades === 'reset') { + $params['reset'] = true; + $grades = NULL; + } + + return grade_update('mod/game', $game->course, 'mod', 'game', $game->id, 0, $grades, $params); +} + + +/** + * Delete grade item for given game + * + * @param object $game object + * @return object game + */ +function game_grade_item_delete( $game) { + global $CFG; + + if( file_exists( $CFG->libdir.'/gradelib.php')){ + require_once($CFG->libdir.'/gradelib.php'); + }else{ + return; + } + + return grade_update('mod/game', $game->course, 'mod', 'game', $game->id, 0, NULL, array('deleted'=>1)); +} + +/** + * Returns all game graded users since a given time for specified game + */ +function game_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid=0, $groupid=0) { + global $DB, $COURSE, $USER; + + if ($COURSE->id == $courseid) { + $course = $COURSE; + } else { + $course = $DB->get_record('course', array( 'id' => $courseid)); + } + + $modinfo =& get_fast_modinfo($course); + + $cm = $modinfo->cms[$cmid]; + + if ($userid) { + $userselect = "AND u.id = $userid"; + } else { + $userselect = ""; + } + + if ($groupid) { + $groupselect = "AND gm.groupid = $groupid"; + $groupjoin = "JOIN {groups_members} gm ON gm.userid=u.id"; + } else { + $groupselect = ""; + $groupjoin = ""; + } + + if (!$attempts = $DB->get_records_sql("SELECT qa.*, q.grade, + u.firstname, u.lastname, u.email, u.picture + FROM {game_attempts} qa + JOIN {game} q ON q.id = qa.gameid + JOIN {user} u ON u.id = qa.userid + $groupjoin + WHERE qa.timefinish > $timestart AND q.id = $cm->instance + $userselect $groupselect + ORDER BY qa.timefinish ASC")) { + return; + } + + + $cm_context = get_context_instance(CONTEXT_MODULE, $cm->id); + $grader = has_capability('moodle/grade:viewall', $cm_context); + $accessallgroups = has_capability('moodle/site:accessallgroups', $cm_context); + $viewfullnames = has_capability('moodle/site:viewfullnames', $cm_context); + $grader = has_capability('mod/game:grade', $cm_context); + //$grader = isteacher( $courseid, $userid); + $groupmode = groups_get_activity_groupmode($cm, $course); + + if (is_null($modinfo->groups)) { + $modinfo->groups = groups_get_user_groups($course->id); // load all my groups and cache it in modinfo + } + + $aname = format_string($cm->name,true); + foreach ($attempts as $attempt) { + if ($attempt->userid != $USER->id) { + if (!$grader) { + // grade permission required + continue; + } + + if ($groupmode == SEPARATEGROUPS and !$accessallgroups) { + $usersgroups = groups_get_all_groups($course->id, $attempt->userid, $cm->groupingid); + if (!is_array($usersgroups)) { + continue; + } + $usersgroups = array_keys($usersgroups); + $interset = array_intersect($usersgroups, $modinfo->groups[$cm->id]); + if (empty($intersect)) { + continue; + } + } + } + + $tmpactivity = new object(); + + $tmpactivity->type = 'game'; + $tmpactivity->cmid = $cm->id; + $tmpactivity->name = $aname; + $tmpactivity->sectionnum= $cm->sectionnum; + $tmpactivity->timestamp = $attempt->timefinish; + + $tmpactivity->content->attemptid = $attempt->id; + $tmpactivity->content->sumgrades = $attempt->score * $attempt->grade; + $tmpactivity->content->maxgrade = $attempt->grade; + $tmpactivity->content->attempt = $attempt->attempt; + + $tmpactivity->user->userid = $attempt->userid; + $tmpactivity->user->fullname = fullname($attempt, $viewfullnames); + $tmpactivity->user->picture = $attempt->picture; + + $activities[$index++] = $tmpactivity; + } + + return; +} + +function game_print_recent_mod_activity($activity, $courseid, $detail, $modnames) { + global $CFG; + + echo ''; + + echo "
    "; + print_user_picture($activity->user->userid, $courseid, $activity->user->picture); + echo ""; + + if ($detail) { + $modname = $modnames[$activity->type]; + echo '
    '; + echo "modpixpath/{$activity->type}/icon.gif\" ". + "class=\"icon\" alt=\"$modname\" />"; + echo "wwwroot}/mod/game/view.php?id={$activity->cmid}\">{$activity->name}"; + echo '
    '; + } + + echo '
    '; + echo get_string("attempt", "game")." {$activity->content->attempt}: "; + $grades = "({$activity->content->sumgrades} / {$activity->content->maxgrade})"; + echo "wwwroot}/mod/game/review.php?attempt={$activity->content->attemptid}\">$grades"; + echo '
    '; + + echo ''; + + echo "
    "; + + return; +} + + +/** + * Removes all grades from gradebook + * @param int $courseid + * @param string optional type + */ +function game_reset_gradebook($courseid, $type='') { + global $DB; + + $sql = "SELECT q.*, cm.idnumber as cmidnumber, q.course as courseid + FROM {game} q, {course_modules} cm, {modules} m + WHERE m.name='game' AND m.id=cm.module AND cm.instance=q.id AND q.course=$courseid"; + + if ($games = $DB->get_records_sql( $sql)) { + foreach ($games as $game) { + game_grade_item_update( $game, 'reset'); + } + } +} + +/** + * @uses FEATURE_GRADE_HAS_GRADE + * @return bool True if quiz supports feature + */ +function game_supports($feature) { + switch($feature) { + + case FEATURE_GRADE_HAS_GRADE: return true; + + case FEATURE_GROUPS: return true; + case FEATURE_GROUPINGS: return true; + case FEATURE_GROUPMEMBERSONLY: return true; + case FEATURE_MOD_INTRO: return false; + case FEATURE_COMPLETION_TRACKS_VIEWS: return true; + case FEATURE_COMPLETION_HAS_RULES: return true; + case FEATURE_GRADE_HAS_GRADE: return true; + case FEATURE_GRADE_OUTCOMES: return true; + case FEATURE_RATE: return false; + case FEATURE_BACKUP_MOODLE2: return true; + + default: return null; + } +} + +/** + * @global object + * @global stdClass + * @return array all other caps used in module + */ +function game_get_extra_capabilities() { + global $DB, $CFG; + + require_once($CFG->libdir.'/questionlib.php'); + $caps = question_get_all_capabilities(); + $reportcaps = $DB->get_records_select_menu('capabilities', 'name LIKE ?', array('quizreport/%'), 'id,name'); + $caps = array_merge($caps, $reportcaps); + $caps[] = 'moodle/site:accessallgroups'; + return $caps; +} + +/** + * Return a textual summary of the number of attemtps that have been made at a particular game, + * returns '' if no attemtps have been made yet, unless $returnzero is passed as true. + * + * @global stdClass + * @global object + * @global object + * @param object $game the game object. Only $game->id is used at the moment. + * @param object $cm the cm object. Only $cm->course, $cm->groupmode and $cm->groupingid fields are used at the moment. + * @param boolean $returnzero if false (default), when no attempts have been made '' is returned instead of 'Attempts: 0'. + * @param int $currentgroup if there is a concept of current group where this method is being called + * (e.g. a report) pass it in here. Default 0 which means no current group. + * @return string a string like "Attempts: 123", "Attemtps 123 (45 from your groups)" or + * "Attemtps 123 (45 from this group)". + */ +function game_num_attempt_summary($game, $cm, $returnzero = false, $currentgroup = 0) { + global $CFG, $USER, $DB; + + $numattempts = $DB->count_records('game_attempts', array('gameid'=> $game->id, 'preview'=>0)); + if ($numattempts || $returnzero) { + if (groups_get_activity_groupmode($cm)) { + $a->total = $numattempts; + if ($currentgroup) { + $a->group = $DB->count_records_sql('SELECT count(1) FROM ' . + '{game_attempts} qa JOIN ' . + '{groups_members} gm ON qa.userid = gm.userid ' . + 'WHERE gameid = ? AND preview = 0 AND groupid = ?', array($game->id, $currentgroup)); + return get_string('attemptsnumthisgroup', 'quiz', $a); + } else if ($groups = groups_get_all_groups($cm->course, $USER->id, $cm->groupingid)) { + list($usql, $params) = $DB->get_in_or_equal(array_keys($groups)); + $a->group = $DB->count_records_sql('SELECT count(1) FROM ' . + '{game_attempts} qa JOIN ' . + '{groups_members} gm ON qa.userid = gm.userid ' . + 'WHERE gameid = ? AND preview = 0 AND ' . + "groupid $usql", array_merge(array($game->id), $params)); + return get_string('attemptsnumyourgroups', 'quiz', $a); + } + } + return get_string('attemptsnum', 'quiz', $numattempts); + } + return ''; +} + +function game_format_score($game, $score) { + return format_float($game->grade * $score / 100, $game->decimalpoints); +} + +function game_format_grade($game, $grade) { + return format_float($grade, $game->decimalpoints); +} + +/** + * @return the options for calculating the quiz grade from the individual attempt grades. + */ +function game_get_grading_options() { + return array ( + GAME_GRADEHIGHEST => get_string('gradehighest', 'quiz'), + GAME_GRADEAVERAGE => get_string('gradeaverage', 'quiz'), + GAME_ATTEMPTFIRST => get_string('attemptfirst', 'quiz'), + GAME_ATTEMPTLAST => get_string('attemptlast', 'quiz')); +} + +/** + * This fucntion extends the global navigaiton for the site. + * It is important to note that you should not rely on PAGE objects within this + * body of code as there is no guarantee that during an AJAX request they are + * available + * + * @param navigation_node $gamenode The game node within the global navigation + * @param stdClass $course The course object returned from the DB + * @param stdClass $module The module object returned from the DB + * @param stdClass $cm The course module isntance returned from the DB + */ +function game_extend_navigation($gamenode, $course, $module, $cm) { + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + + if (!has_capability('mod/game:viewreports', $context)) + return; + + if (has_capability('mod/game:view', $context)) { + $url = new moodle_url('/mod/game/view.php', array('id'=>$cm->id)); + $gamenode->add(get_string('info', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/info', '')); + } + + if (has_capability('mod/game:manage', $context)) { + $url = new moodle_url('/course/modedit.php', array('update' => $cm->id, 'return' => true, 'sesskey' => sesskey())); + $gamenode->add(get_string('edit', 'moodle', ''), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('t/edit', '')); + } + + /* if (has_capability('mod/game:viewreports', $context)) { + $url = new moodle_url('/mod/game/report.php', array('q'=>$cm->instance)); + $reportnode = $gamenode->add(get_string('results', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/item', '')); + } */ + + if (has_capability('mod/game:viewreports', $context)) { + $url = new moodle_url('/mod/game/showanswers.php', array('q'=>$cm->instance)); + $reportnode = $gamenode->add(get_string('showanswers', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/item', '')); + } + + if (has_capability('mod/game:viewreports', $context)) { + $url = new moodle_url('/mod/game/showattempts.php', array('q'=>$cm->instance)); + $reportnode = $gamenode->add(get_string('showattempts', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('f/explore', '')); + } + + + if (has_capability('mod/game:viewreports', $context)) + { + switch( $module->gamekind){ + case 'bookquiz': + $url = new moodle_url('/mod/game/bookquiz/questions.php', array('q'=>$cm->instance)); + $exportnode = $gamenode->add( get_string('bookquiz_questions', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/item', '')); + break; + case 'hangman': + $url = new moodle_url('', null); + $exportnode = $gamenode->add( get_string('export', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', '')); + + $url = new moodle_url('/mod/game/export.php', array( 'id' => $cm->id,'courseid'=>$course->id, 'target' => 'html')); + $exportnode->add( get_string('export_to_html', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/item', '')); + + $url = new moodle_url('/mod/game/export.php', array( 'id' => $cm->id,'courseid'=>$course->id, 'target' => 'javame')); + $exportnode->add( get_string('export_to_javame', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/item', '')); + break; + case 'snakes': + case 'cross': + case 'millionaire': + $url = new moodle_url('/mod/game/export.php', array( 'id' => $cm->id,'courseid'=>$course->id, 'target' => 'html')); + $gamenode->add(get_string('export_to_html', 'game'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/item', '')); + break; + } + } +} + +/** + * Returns an array of game type objects to construct + * menu list when adding new game + * + */ +function game_get_types(){ + global $DB; + + $types = array(); + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game_group_start"; + $type->typestr = '--'.get_string( 'modulenameplural', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=hangman"; + $type->typestr = get_string('game_hangman', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=cross"; + $type->typestr = get_string('game_cross', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=cryptex"; + $type->typestr = get_string('game_cryptex', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=millionaire"; + $type->typestr = get_string('game_millionaire', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=sudoku"; + $type->typestr = get_string('game_sudoku', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=snakes"; + $type->typestr = get_string('game_snakes', 'game'); + $types[] = $type; + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=hiddenpicture"; + $type->typestr = get_string('game_hiddenpicture', 'game'); + $types[] = $type; + + if($DB->get_record( 'modules', array( 'name' => 'book'), 'id,id')){ + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game&type=bookquiz"; + $type->typestr = get_string('game_bookquiz', 'game'); + $types[] = $type; + } + + $type = new object(); + $type->modclass = MOD_CLASS_ACTIVITY; + $type->type = "game_group_end"; + $type->typestr = '--'; + $types[] = $type; + + return $types; + +} + +function mod_game_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload) +{ + global $CFG, $DB; + + if ($context->contextlevel != CONTEXT_MODULE) { + return false; + } + + require_course_login($course, true, $cm); + + if( $filearea == 'questiontext') + { + $questionid = $args[ 0]; + $file = $args[ 1]; + + if (!$contextcourse = get_context_instance(CONTEXT_COURSE, $course->id)) { + print_error('nocontext'); + } + $a = array( 'component' => 'question', 'filearea' => 'questiontext', + 'itemid' => $questionid, 'filename' => $file, 'contextid' => $contextcourse->id); + $rec = $DB->get_record( 'files', $a); + + $fs = get_file_storage(); + if (!$file = $fs->get_file_by_hash($rec->pathnamehash) or $file->is_directory()) { + return false; + } + + // finally send the file + send_stored_file($file, 0, 0, true); // download MUST be forced - security! + }else if( $filearea == 'answer') + { + $answerid = $args[ 0]; + $file = $args[ 1]; + + if (!$contextcourse = get_context_instance(CONTEXT_COURSE, $course->id)) { + print_error('nocontext'); + } + $rec = $DB->get_record( 'files', array( 'component' => 'question', 'filearea' => 'answer', + 'itemid' => $answerid, 'filename' => $file, 'contextid' => $contextcourse->id)); + + $fs = get_file_storage(); + if (!$file = $fs->get_file_by_hash($rec->pathnamehash) or $file->is_directory()) { + return false; + } + + // finally send the file + send_stored_file($file, 0, 0, true); // download MUST be forced - security! + } + + $filearea = $args[ 0]; + $filename = $args[ 1]; + + $fs = get_file_storage(); + $relativepath = implode('/', $args); + $fullpath = "/$context->id/mod_game/$filearea/$cm->instance/$filename"; + if (!$file = $fs->get_file_by_hash(sha1($fullpath)) or $file->is_directory()) { + return false; + } + + // finally send the file + send_stored_file($file, 0, 0, true); // download MUST be forced - security! +} + +/** + * Implementation of the function for printing the form elements that control + * whether the course reset functionality affects the Game. + * @param object $mform form passed by reference + */ +function game_reset_course_form_definition(&$mform) { + $mform->addElement('header', 'gameheader', get_string('modulenameplural', 'game')); + $mform->addElement('checkbox', 'reset_game_all', get_string('reset_game_all','game')); + + $mform->addElement('checkbox', 'reset_game_deleted_course', get_string('reset_game_deleted_course', 'game')); +} + +/** + * Course reset form defaults. + * @return array + */ +function game_reset_course_form_defaults($course) { + return array('reset_game_all'=>0, 'reset_game_deleted_course' => 0); +} + +/** + * Actual implementation of the reset course functionality, delete all the + * Game responses for course $data->courseid. + * + * @global object + * @param $data the data submitted from the reset course. + * @return array status array + */ +function game_reset_userdata($data) { + global $DB; + + $componentstr = get_string('modulenameplural', 'game'); + $status = array(); + $fs = get_file_storage(); + + for($i=1; $i <= 2; $i++){ + if( $i == 1){ + if (empty($data->reset_game_all)) + continue; + $allgamessql = 'SELECT g.id FROM {game} g WHERE g.course = '.$data->courseid; + $allattemptssql = 'SELECT ga.id FROM {game} g LEFT JOIN {game_attempts} ga ON g.id = ga.gameid WHERE g.course = '.$data->courseid; + $newstatus = array('component'=>$componentstr, 'item'=>get_string('reset_game_all', 'game'), 'error'=>false); + }else if( $i == 2) + { + if (empty($data->reset_game_deleted_course)) + continue; + $allgamessql = 'SELECT g.id FROM {game} g WHERE NOT EXISTS( SELECT * FROM {course} c WHERE c.id = g.course)'; + $allattemptssql = 'SELECT ga.id FROM {game_attempts} ga WHERE NOT EXISTS( SELECT * FROM {game} g WHERE ga.gameid = g.id)'; + $newstatus = array('component'=>$componentstr, 'item'=>get_string('reset_game_deleted_course', 'game'), 'error'=>false); + } + + $recs = $DB->get_recordset_sql($allgamessql); + if ($recs->valid()) { + foreach ($recs as $rec) { + if (!$cm = get_coursemodule_from_instance('game', $rec->id)) { + continue; + } + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + $fs->delete_area_files($context->id, 'mod_game', 'gnakes_file'); + $fs->delete_area_files($context->id, 'mod_game', 'gnakes_board'); + + //reset grades + $game = $DB->get_record_select( 'game', 'id='.$rec->id, null,'id,name,course '); + $grades = NULL; + $params = array('itemname'=>$game->name, 'idnumber'=>0); + $params['reset'] = true; + grade_update('mod/game', $game->course, 'mod', 'game', $game->id, 0, $grades, $params); + } + } + + $DB->delete_records_select('game_bookquiz', "id IN ($allgamessql)"); + $DB->delete_records_select('game_bookquiz_chapters', "attemptid IN ($allattemptssql)"); + $DB->delete_records_select('game_bookquiz_questions', "gameid IN ($allgamessql)"); + $DB->delete_records_select('game_cross', "id IN ($allgamessql)"); + $DB->delete_records_select('game_cryptex', "id IN ($allgamessql)"); + $DB->delete_records_select('game_export_html', "id IN ($allgamessql)"); + $DB->delete_records_select('game_export_javame', "id IN ($allgamessql)"); + $DB->delete_records_select('game_grades', "gameid IN ($allgamessql)"); + $DB->delete_records_select('game_hangman', "id IN ($allgamessql)"); + $DB->delete_records_select('game_hiddenpicture', "id IN ($allgamessql)"); + $DB->delete_records_select('game_millionaire', "id IN ($allgamessql)"); + $DB->delete_records_select('game_queries', "gameid IN ($allgamessql)"); + $DB->delete_records_select('game_repetitions', "gameid IN ($allgamessql)"); + $DB->delete_records_select('game_snakes', "id IN ($allgamessql)"); + $DB->delete_records_select('game_sudoku', "id IN ($allgamessql)"); + + if( $i == 2) + $DB->delete_records_select('game_attempts', "NOT EXISTS (SELECT * FROM {game} g WHERE {game_attempts}.gameid=g.id)"); + else + $DB->delete_records_select('game_attempts', "gameid IN ($allgamessql)"); + + $status[] = $newstatus; + } + + if (empty($data->reset_game_deleted_course)) + return $status; + + //Delete data from deleted games + $a = array( 'bookquiz', 'cross', 'cryptex', 'grades', 'bookquiz_questions', 'export_html', 'export_javame', 'hangman', + 'hiddenpicture', 'millionaire', 'snakes', 'sudoku'); + foreach( $a as $table) + $DB->delete_records_select( 'game_'.$table, "NOT EXISTS( SELECT * FROM {game} g WHERE {game_$table}.id=g.id)"); + + //gameid + $a = array( 'grades', 'queries', 'repetitions'); + foreach( $a as $table) + $DB->delete_records_select( 'game_'.$table, "NOT EXISTS( SELECT * FROM {game} g WHERE {game_$table}.gameid=g.id)"); + + //attempts + $a = array( 'bookquiz_chapters'); + foreach( $a as $table) + $DB->delete_records_select( 'game_'.$table, "NOT EXISTS( SELECT * FROM {game_attempts} ga WHERE {game_$table}.attemptid=ga.id)"); + + return $status; +} + diff --git a/locallib.php b/locallib.php new file mode 100644 index 0000000..fee0c40 --- /dev/null +++ b/locallib.php @@ -0,0 +1,1896 @@ +dirroot . '/mod/game/lib.php'); +require_once($CFG->dirroot . '/mod/quiz/locallib.php'); +/// CONSTANTS /////////////////////////////////////////////////////////////////// + +/**#@+ +* Options determining how the grades from individual attempts are combined to give +* the overall grade for a user +*/ + +define( "GAME_GRADEMETHOD_HIGHEST", "1"); +define( "GAME_GRADEMETHOD_AVERAGE", "2"); +define( "GAME_GRADEMETHOD_FIRST", "3"); +define( "GAME_GRADEMETHOD_LAST", "4"); + +$GAME_GRADE_METHOD = array ( GAME_GRADEMETHOD_HIGHEST => get_string("gradehighest", "game"), + GAME_GRADEMETHOD_AVERAGE => get_string("gradeaverage", "game"), + GAME_GRADEMETHOD_FIRST => get_string("attemptfirst", "game"), + GAME_GRADEMETHOD_LAST => get_string("attemptlast", "game")); + +define( "CONST_GAME_TRIES_REPETITION", "3"); + +/**#@-*/ + + +function game_upper( $str, $lang='') +{ + $str = textlib::strtoupper( $str); + + $strings = get_string_manager()->load_component_strings( 'game', ($lang == '' ? 'en' : $lang)); + if( !isset( $strings[ 'convertfrom'])) + return $str; + if( !isset( $strings[ 'convertto'])) + return $str; + + $from = $strings[ 'convertfrom']; + $to = $strings[ 'convertto']; + $len = textlib::strlen( $from); + for($i=0; $i < $len; $i++){ + $str = str_replace( textlib::substr( $from, $i, 1), textlib::substr( $to, $i, 1), $str); + } + + return $str; +} + + +function game_showselectcontrol( $name, $a, $input, $events=''){ + $ret = "\r\n"; + + return $ret; +} + +function game_showcheckbox( $name, $value) +{ + $a = array(); + $a[ 0] = get_string( 'no'); + $a[ 1] = get_string( 'yes'); + + return game_showselectcontrol( $name, $a, $value); + + $ret = 'sourcemodule) + { + case 'glossary': + return game_question_shortanswer_glossary( $game, $allowspaces, $use_repetitions); + case 'quiz': + return game_question_shortanswer_quiz( $game, $allowspaces, $use_repetitions); + case 'question': + return game_question_shortanswer_question( $game, $allowspaces, $use_repetitions); + } + + return false; +} + +//used by hangman +function game_question_shortanswer_glossary( $game, $allowspaces, $use_repetitions) +{ + global $DB; + + if( $game->glossaryid == 0){ + print_error( get_string( 'must_select_glossary', 'game')); + } + + $select = "glossaryid={$game->glossaryid}"; + $table = '{glossary_entries} ge'; + if( $game->glossarycategoryid){ + $table .= ',{glossary_entries_categories} gec'; + $select .= ' AND gec.entryid = ge.id '. + " AND gec.categoryid = {$game->glossarycategoryid}"; + } + if( $allowspaces == false){ + $select .= " AND concept NOT LIKE '% %' "; + } + + if( ($id = game_question_selectrandom( $game, $table, $select, 'ge.id', $use_repetitions)) == false) + return false; + + $sql = 'SELECT id, concept as answertext, definition as questiontext, id as glossaryentryid, 0 as questionid, glossaryid, attachment, 0 as answerid'. + " FROM {glossary_entries} ge WHERE id = $id"; + if( ($rec = $DB->get_record_sql( $sql)) == false) + return false; + + if( $rec->attachment != ''){ + $rec->attachment = "glossary/{$game->glossaryid}/$rec->id/$rec->attachment"; + } + + return $rec; +} + +//used by hangman +function game_question_shortanswer_quiz( $game, $allowspaces, $use_repetitions) +{ + global $DB; + + if( $game->quizid == 0){ + print_error( get_string( 'must_select_quiz', 'game')); + } + + $select = "qtype='shortanswer' AND quiz='$game->quizid' ". + " AND qqi.question=q.id"; + $table = "{question} q,{quiz_question_instances} qqi"; + $fields = "q.id"; + + if( ($id = game_question_selectrandom( $game, $table, $select, $fields, $use_repetitions)) == false) + return false; + + $select = "q.id=$id AND qa.question=$id". + " AND q.hidden=0 AND qtype='shortanswer'"; + $table = "{question} q,{question_answers} qa"; + $fields = "qa.id as answerid, q.id, q.questiontext as questiontext, ". + "qa.answer as answertext, q.id as questionid, ". + "0 as glossaryentryid, '' as attachment"; + + //Maybe there are more answers to one question. I use as correct the one with bigger fraction + $sql = "SELECT $fields FROM $table WHERE $select ORDER BY fraction DESC"; + if( ($recs=$DB->get_records_sql( $sql, null, 0, 1)) == false){ + return false; + } + foreach( $recs as $rec){ + return $rec; + } +} + +//used by hangman +function game_question_shortanswer_question( $game, $allowspaces, $use_repetitions) +{ + global $DB; + + if( $game->questioncategoryid == 0){ + print_error( get_string( 'must_select_questioncategory', 'game')); + } + + $select = 'category='.$game->questioncategoryid; + if( $game->subcategories){ + $cats = question_categorylist( $game->questioncategoryid); + if( count( $cats) > 0){ + $s = implode( ',', $cats); + $select = 'category in ('.$s.')'; + } + } + $select .= " AND qtype='shortanswer'"; + + $table = '{question} q'; + $fields = 'q.id'; + + if( ($id = game_question_selectrandom( $game, $table, $select, $fields, $use_repetitions)) == false) + return false; + + $select = "q.id=$id AND qa.question=$id". + " AND q.hidden=0 AND qtype='shortanswer'"; + $table = "{question} q,{question_answers} qa"; + $fields = "qa.id as answerid, q.id, q.questiontext as questiontext, ". + "qa.answer as answertext, q.id as questionid, ". + "0 as glossaryentryid, '' as attachment"; + + //Maybe there are more answers to one question. I use as correct the one with bigger fraction + $sql = "SELECT $fields FROM $table WHERE $select ORDER BY fraction DESC"; + if( ($recs = $DB->get_records_sql( $sql, null, 0, 1)) == false){ + return false; + } + foreach( $recs as $rec){ + return $rec; + } +} + +//used by millionaire, game_question_shortanswer_quiz, hidden picture +function game_question_selectrandom( $game, $table, $select, $id_fields='id', $use_repetitions=true) +{ + global $DB, $USER; + + $count = $DB->get_field_sql( "SELECT COUNT(*) FROM $table WHERE $select"); + + if( $count == 0) + return false; + + $min_num = 0; + $min_id = 0; + for($i=1; $i <= CONST_GAME_TRIES_REPETITION; $i++){ + $sel = mt_rand(0, $count-1); + + $sql = "SELECT $id_fields,$id_fields FROM ".$table." WHERE $select"; + if( ($recs = $DB->get_records_sql( $sql, null, $sel, 1)) == false){ + return false; + } + + $id = 0; + foreach( $recs as $rec){ + $id = $rec->id; + } + if( $min_id == 0){ + $min_id = $id; + } + + if( $use_repetitions == false){ + return $id; + } + + if( $count == 1){ + break; + } + + $questionid = $glossaryentryid = 0; + if( $game->sourcemodule == 'glossary') + $glossaryentryid = $id; + else + $questionid = $id; + + $a = array( 'gameid' => $game->id, 'userid' => $USER->id, 'questionid' => $questionid, 'glossaryentryid' => $glossaryentryid); + if( ($rec = $DB->get_record( 'game_repetitions', $a, 'id,repetitions r')) != false){ + if( ($rec->r < $min_num) or ($min_num == 0)){ + $min_num = $rec->r; + $min_id = $id; + } + }else + { + $min_id = $questionid; + break; + } + + } + + if( $game->sourcemodule == 'glossary') + game_update_repetitions( $game->id, $USER->id, 0, $min_id); + else + game_update_repetitions( $game->id, $USER->id, $min_id, 0); + + return $min_id; +} + +function game_update_repetitions( $gameid, $userid, $questionid, $glossaryentryid){ + global $DB; + + $a = array( 'gameid' => $gameid, 'userid' => $userid, 'questionid' => $questionid, 'glossaryentryid' => $glossaryentryid); + if( ($rec = $DB->get_record( 'game_repetitions', $a, 'id,repetitions r')) != false){ + $updrec = new stdClass(); + $updrec->id = $rec->id; + $updrec->repetitions = $rec->r + 1; + if( !$DB->update_record( 'game_repetitions', $updrec)){ + print_error("Update page: can't update game_repetitions id={$updrec->id}"); + } + }else + { + $newrec = new stdClass(); + $newrec->gameid = $gameid; + $newrec->userid = $userid; + $newrec->questionid = $questionid; + $newrec->glossaryentryid = $glossaryentryid; + $newrec->repetitions = 1; + + if( $newrec->questionid == ''){ + $newrec->questionid = 0; + } + if( $newrec->glossaryentryid == ''){ + $newrec->glossaryentryid = 0; + } + + if (!$DB->insert_record( 'game_repetitions', $newrec)){ + print_r( $newrec); + print_error("Insert page: new page game_repetitions not inserted"); + } + } +} + +//used by sudoku +function game_questions_selectrandom( $game, $count=1) +{ + global $DB; + + switch( $game->sourcemodule) + { + case 'quiz': + + if( $game->quizid == 0){ + print_error( get_string( 'must_select_quiz', 'game')); + } + + $table = '{question} q, {quiz_question_instances} qqi'; + $select = " qqi.quiz=$game->quizid". + " AND qqi.question=q.id ". + " AND q.qtype in ('shortanswer', 'truefalse', 'multichoice')". + " AND q.hidden=0"; +//todo 'match' + $field = "q.id as id"; + + $table2 = 'question'; + $fields2 = 'id as questionid,0 as glossaryentryid,qtype'; + break; + case 'glossary': + if( $game->glossaryid == 0){ + print_error( get_string( 'must_select_glossary', 'game')); + } + $table = '{glossary_entries} ge'; + $select = "glossaryid='$game->glossaryid' "; + if( $game->glossarycategoryid){ + $table .= ',{glossary_entries_categories} gec'; + $select .= " AND gec.entryid = ge.id ". + " AND gec.categoryid = {$game->glossarycategoryid}"; + } + $field = 'ge.id'; + $table2 = 'glossary_entries'; + $fields2 = 'id as glossaryentryid, 0 as questionid'; + break; + case 'question': + if( $game->questioncategoryid == 0){ + print_error( get_string( 'must_select_questioncategory', 'game')); + } + $table = '{question} q'; + + //inlcude subcategories + $select = 'category='.$game->questioncategoryid; + if( $game->subcategories){ + $cats = question_categorylist( $game->questioncategoryid); + if( count( $cats)) + $select = 'category in ('.implode( ',', $cats).')'; + } + + $select .= " AND q.qtype in ('shortanswer', 'truefalse', 'multichoice') ". + "AND q.hidden=0"; +//todo 'match' + $field = "id"; + + $table2 = 'question'; + $fields2 = 'id as questionid,0 as glossaryentryid'; + break; + default: + print_error( 'No sourcemodule defined'); + break; + } + + $ids = game_questions_selectrandom_detail( $table, $select, $field, $count); + if( $ids === false){ + print_error( get_string( 'no_questions', 'game')); + } + + if( count( $ids) > 1){ + //randomize the array + shuffle( $ids); + } + + $ret = array(); + foreach( $ids as $id) + { + if( $recquestion = $DB->get_record( $table2, array( 'id' => $id), $fields2)){ + $new = new stdClass(); + $new->questionid = (int )$recquestion->questionid; + $new->glossaryentryid = (int )$recquestion->glossaryentryid; + $ret[] = $new; + } + } + + return $ret; +} + +//used by game_questions_selectrandom +function game_questions_selectrandom_detail( $table, $select, $id_field="id", $count=1) +{ + global $DB; + + $sql = "SELECT $id_field FROM $table WHERE $select"; + if( ($recs=$DB->get_records_sql( $sql)) == false) + return false; + + //the array contains the ids of all questions + $a = array(); + foreach( $recs as $rec){ + $a[ $rec->id] = $rec->id; + } + + if( $count >= count( $a)){ + return $a; + }else + { + $id = array_rand( $a, $count); + return ( $count == 1 ? array( $id) : $id); + } +} + +//Tries to detect the language of word +function game_detectlanguage( $word){ + global $CFG; + + $langs = get_string_manager()->get_list_of_translations(); + + //English has more priority + if( array_key_exists( 'en', $langs)) + { + unset( $langs[ 'en']); + $langs[ ''] = ''; + } + ksort( $langs); + $langs_installed = get_string_manager()->get_list_of_translations(); + + foreach( $langs as $lang => $name) + { + if( $lang == '') + $lang = 'en'; + + if( !array_key_exists( $lang, $langs_installed)) + continue; + + $strings = get_string_manager()->load_component_strings( 'game', $lang); + if( isset( $strings[ 'lettersall'])) + { + $letters = $strings[ 'lettersall']; + $word2 = game_upper( $word, $lang); + + if( hangman_existall( $word2, $letters)) + return $lang; + } + } + + return false; +} + +//The words maybe are in two languages e.g. greek or english +//so I try to find the correct one. +function game_getallletters( $word, $lang='') +{ + for(;;) + { + $strings = get_string_manager()->load_component_strings( 'game', ($lang == '' ? 'en' : $lang)); + if( isset( $strings[ 'lettersall'])) + { + $letters = $strings[ 'lettersall']; + $word2 = game_upper( $word, $lang); + if( hangman_existall( $word2, $letters)) + return $letters; + } + + if( $lang == '') + break; + else + $lang = ''; + } + + + return ''; +} + + +function hangman_existall( $str, $strfind) +{ + $n = textlib::strlen( $str); + for( $i=0; $i < $n; $i++) + { + $pos = textlib::strpos( $strfind, textlib::substr( $str, $i, 1)); + if( $pos === false) + return false; + } + + return true; +} + +//used by cross +function game_questions_shortanswer( $game) +{ + switch( $game->sourcemodule) + { + case 'glossary': + $recs = game_questions_shortanswer_glossary( $game); + break; + case 'quiz'; + $recs = game_questions_shortanswer_quiz( $game); + break; + case 'question'; + $recs = game_questions_shortanswer_question( $game); + break; + } + + return $recs; +} + +//used by cross +function game_questions_shortanswer_glossary( $game) +{ + global $DB; + + $select = "glossaryid={$game->glossaryid}"; + $table = '{glossary_entries} ge'; + if( $game->glossarycategoryid){ + $table .= ',{glossary_entries_categories} gec'; + $select .= ' AND gec.entryid = ge.id '. + ' AND gec.categoryid = '.$game->glossarycategoryid; + } + + $sql = 'SELECT ge.id, concept as answertext, definition as questiontext, ge.id as glossaryentryid, 0 as questionid, attachment '. + " FROM $table WHERE $select"; + + return $DB->get_records_sql( $sql); + +} +//used by cross +function game_questions_shortanswer_quiz( $game) +{ + global $DB; + + if( $game->quizid == 0){ + print_error( get_string( 'must_select_quiz', 'game')); + } + + $select = "qtype='shortanswer' AND quiz='$game->quizid' ". + " AND qqi.question=q.id". + " AND qa.question=q.id". + " AND q.hidden=0"; + $table = "{question} q,{quiz_question_instances} qqi,{question_answers} qa"; + $fields = "qa.id as qaid, q.id, q.questiontext as questiontext, ". + "qa.answer as answertext, q.id as questionid,". + " 0 as glossaryentryid,'' as attachment"; + + return game_questions_shortanswer_question_fraction( $table, $fields, $select); +} + +//used by cross +function game_questions_shortanswer_question( $game) +{ + if( $game->questioncategoryid == 0){ + print_error( get_string( 'must_select_questioncategory', 'game')); + } + + //include subcategories + $select = 'q.category='.$game->questioncategoryid; + if( $game->subcategories){ + $cats = question_categorylist( $game->questioncategoryid); + if( strpos( $cats, ',') > 0){ + $select = 'q.category in ('.$cats.')'; + } + } + + $select .= " AND qtype='shortanswer' ". + " AND qa.question=q.id". + " AND q.hidden=0"; + $table = "{question} q,{question_answers} qa"; + $fields = "qa.id as qaid, q.id, q.questiontext as questiontext, ". + "qa.answer as answertext, q.id as questionid"; + + return game_questions_shortanswer_question_fraction( $table, $fields, $select); +} + +function game_questions_shortanswer_question_fraction( $table, $fields, $select) +{ + global $DB; + + $sql = "SELECT $fields FROM ".$table." WHERE $select ORDER BY fraction DESC"; + + $recs = $DB->get_records_sql( $sql); + if( $recs == false){ + print_error( get_string( 'no_questions', 'game')); + } + + $recs2 = array(); + $map = array(); + foreach( $recs as $rec){ + if( array_key_exists( $rec->questionid, $map)){ + continue; + } + $rec2 = new stdClass(); + $rec2->id = $rec->id; + $rec2->questiontext = $rec->questiontext; + $rec2->answertext = $rec->answertext; + $rec2->questionid = $rec->questionid; + $rec2->glossaryentryid = 0; + $rec2->attachment = ''; + $recs2[] = $rec2; + + $map[ $rec->questionid] = $rec->questionid; + } + + return $recs2; +} + + + function game_setchar( &$s, $pos, $char) + { + $ret = ""; + + if( $pos > 0){ + $ret .= textlib::substr( $s, 0, $pos); + } + + $s = $ret . $char . textlib::substr( $s, $pos+1); + } + + + function game_insert_record( $table, $rec) + { + global $DB; + + if( $DB->get_record($table, array('id' => $rec->id), 'id,id') == false){ + $sql = 'INSERT INTO {'.$table.'}(id) VALUES('.$rec->id.')'; + if( !$DB->execute( $sql)){ + print_error( "Cannot insert an empty $table with id=$rec->id"); + return false; + } + } + if( isset( $rec->question)){ + $temp = $rec->question; + $rec->question = addslashes( $rec->question); + } + $ret = $DB->update_record( $table, $rec); + + if( isset( $rec->question)){ + $rec->question = $temp; + } + + return $ret; + } + + //if score is negative doesn't update the record + //score is between 0 and 1 + function game_updateattempts( $game, $attempt, $score, $finished) + { + global $DB, $USER; + + if( $attempt != false){ + $updrec = new stdClass(); + $updrec->id = $attempt->id; + $updrec->timelastattempt = time(); + $updrec->lastip = getremoteaddr(); + if( isset( $_SERVER[ 'REMOTE_HOST'])){ + $updrec->lastremotehost = $_SERVER[ 'REMOTE_HOST']; + } + else{ + $updrec->lastremotehost = gethostbyaddr( $updrec->lastip); + } + $updrec->lastremotehost = substr( $updrec->lastremotehost, 0, 50); + + if( $score >= 0){ + $updrec->score = $score; + } + + if( $finished){ + $updrec->timefinish = $updrec->timelastattempt; + } + + $updrec->attempts = $attempt->attempts + 1; + + if( !$DB->update_record( 'game_attempts', $updrec)){ + print_error( "game_updateattempts: Can't update game_attempts id=$updrec->id"); + } + + // update grade item and send all grades to gradebook + game_grade_item_update( $game); + game_update_grades( $game); + } + + //Update table game_grades + if( $finished){ + game_save_best_score( $game); + } + } + + function game_updateattempts_maxgrade( $game, $attempt, $grade, $finished) + { + global $DB; + + $recgrade = $DB->get_field( 'game_attempts', 'score', array( 'id' => $attempt->id)); + + if( $recgrade > $grade){ + $grade = -1; //don't touch the grade + } + + game_updateattempts( $game, $attempt, $grade, $finished); + } + + function game_update_queries( $game, $attempt, $query, $score, $studentanswer, $updatetries=false) + { + global $DB, $USER; + + if( $query->id != 0){ + $select = "id=$query->id"; + }else + { + $select = "attemptid = $attempt->id AND sourcemodule = '{$query->sourcemodule}'"; + switch( $query->sourcemodule) + { + case 'quiz': + $select .= " AND questionid='$query->questionid' "; + break; + case 'glossary': + $select .= " AND glossaryentryid='$query->glossaryentryid'"; + break; + } + } + + if( ($recq = $DB->get_record_select( 'game_queries', $select)) === false) + { + $recq = new stdClass(); + $recq->gamekind = $game->gamekind; + $recq->gameid = $attempt->gameid; + $recq->userid = $attempt->userid; + $recq->attemptid = $attempt->id; + $recq->sourcemodule = $query->sourcemodule; + $recq->questionid = $query->questionid; + $recq->glossaryentryid = $query->glossaryentryid; + if ($updatetries) + $recq->tries = 1; + + if (!($recq->id = $DB->insert_record( 'game_queries', $recq))){ + print_error( 'Insert page: new page game_queries not inserted'); + } + } + + $updrec = new stdClass(); + $updrec->id = $recq->id; + $updrec->timelastattempt = time(); + + if( $score >= 0){ + $updrec->score = $score; + } + + if( $studentanswer != ''){ + $updrec->studentanswer = $studentanswer; + } + + if ($updatetries) + $updrec->tries = $recq->tries + 1; + + if (!($DB->update_record( 'game_queries', $updrec))){ + print_error( "game_update_queries: not updated id=$updrec->id"); + } + } + + + function game_getattempt( $game, &$detail, $autoadd=false) + { + global $DB, $USER; + + $select = "gameid=$game->id AND userid=$USER->id and timefinish=0 "; + if( $USER->id == 1){ + $key = 'mod/game:instanceid'.$game->id; + if( array_key_exists( $key, $_SESSION)){ + $select .= ' AND id="'.$_SESSION[ $key].'"'; + }else{ + $select .= ' AND id=-1'; + } + } + + if( ($recs=$DB->get_records_select( 'game_attempts', $select))){ + foreach( $recs as $attempt){ + if( $USER->id == 1){ + $_SESSION[ $key] = $attempt->id; + } + + $detail = $DB->get_record( 'game_'.$game->gamekind, array( 'id' => $attempt->id)); + + return $attempt; + } + }; + + if( $autoadd) + { + game_addattempt( $game); + return game_getattempt( $game, $detail, false); + } + + return false; + } + +/** + * @param integer $gameid the game id. + * @param integer $userid the userid. + * @param string $status 'all', 'finished' or 'unfinished' to control + * @return an array of all the user's attempts at this game. Returns an empty array if there are none. + */ +function game_get_user_attempts( $gameid, $userid, $status = 'finished') { + global $DB; + + $status_condition = array( + 'all' => '', + 'finished' => ' AND timefinish > 0', + 'unfinished' => ' AND timefinish = 0' + ); + if ($attempts = $DB->get_records_select( 'game_attempts', + "gameid = ? AND userid = ? AND preview = 0" . $status_condition[$status], + array( $gameid, $userid), 'attempt ASC')) { + return $attempts; + } else { + return array(); + } +} + + +/** + * Returns an unfinished attempt (if there is one) for the given + * user on the given game. This function does not return preview attempts. + * + * @param integer $gameid the id of the game. + * @param integer $userid the id of the user. + * + * @return mixed the unfinished attempt if there is one, false if not. + */ +function game_get_user_attempt_unfinished( $gameid, $userid) { + $attempts = game_get_user_attempts( $gameid, $userid, 'unfinished'); + if ($attempts) { + return array_shift($attempts); + } else { + return false; + } +} + +/** + * Get the best current score for a particular user in a game. + * + * @param object $game the game object. + * @param integer $userid the id of the user. + * @return float the user's current grade for this game. + */ +function game_get_best_score($game, $userid) { + global $DB; + + $score = $DB->get_field( 'game_grades', 'score', array( 'gameid' => $game->id, 'userid' => $userid)); + + // Need to detect errors/no result, without catching 0 scores. + if (is_numeric($score)) { + return $score; + } else { + return NULL; + } +} + +function game_get_best_grade($game, $userid) { + $score = game_get_best_score( $game, $userid); + + if( is_numeric( $score)){ + return round( $score * $game->grade, $game->decimalpoints); + }else + { + return NULL; + } +} + + +function game_score_to_grade($score, $game) { + if ($score) { + return round($score*$game->grade, $game->decimalpoints); + } else { + return 0; + } +} + +/** + * Determine review options + * + * @param object $game the game instance. + * @param object $attempt the attempt in question. + * @param $context the roles and permissions context, + * normally the context for the game module instance. + * + * @return object an object with boolean fields responses, scores, feedback, + * correct_responses, solutions and general feedback + */ +function game_get_reviewoptions($game, $attempt, $context=null) { + + $options = new stdClass; + $options->readonly = true; + // Provide the links to the question review and comment script + $options->questionreviewlink = '/mod/game/reviewquestion.php'; + + if ($context /* && has_capability('mod/game:viewreports', $context) */ and !$attempt->preview) { + // The teacher should be shown everything except during preview when the teachers + // wants to see just what the students see + $options->responses = true; + $options->scores = true; + $options->feedback = true; + $options->correct_responses = true; + $options->solutions = false; + $options->generalfeedback = true; + $options->overallfeedback = true; + + // Show a link to the comment box only for closed attempts + if ($attempt->timefinish) { + $options->questioncommentlink = '/mod/game/comment.php'; + } + } else { + if (((time() - $attempt->timefinish) < 120) || $attempt->timefinish==0) { + $game_state_mask = GAME_REVIEW_IMMEDIATELY; + } else if (!$game->timeclose or time() < $game->timeclose) { + $game_state_mask = GAME_REVIEW_OPEN; + } else { + $game_state_mask = GAME_REVIEW_CLOSED; + } + $options->responses = ($game->review & $game_state_mask & GAME_REVIEW_RESPONSES) ? 1 : 0; + $options->scores = ($game->review & $game_state_mask & GAME_REVIEW_SCORES) ? 1 : 0; + $options->feedback = ($game->review & $game_state_mask & GAME_REVIEW_FEEDBACK) ? 1 : 0; + $options->correct_responses = ($game->review & $game_state_mask & GAME_REVIEW_ANSWERS) ? 1 : 0; + $options->solutions = ($game->review & $game_state_mask & GAME_REVIEW_SOLUTIONS) ? 1 : 0; + $options->generalfeedback = ($game->review & $game_state_mask & GAME_REVIEW_GENERALFEEDBACK) ? 1 : 0; + $options->overallfeedback = $attempt->timefinish && ($game->review & $game_state_mask & GAME_REVIEW_FEEDBACK); + } + + return $options; +} + + +function game_compute_attempt_layout( $game, &$attempt) +{ + global $DB; + + $ret = ''; + $recs = $DB->get_records_select( 'game_queries', "attemptid=$attempt->id", null, '', 'id,questionid,sourcemodule,glossaryentryid'); + if( $recs){ + foreach( $recs as $rec){ + if( $rec->sourcemodule == 'glossary'){ + $ret .= $rec->glossaryentryid.'G,'; + }else{ + $ret .= $rec->questionid.','; + } + } + } + + $attempt->layout = $ret.'0'; +} + +/** + * Combines the review options from a number of different game attempts. + * Returns an array of two ojects, so he suggested way of calling this + * funciton is: + * list($someoptions, $alloptions) = game_get_combined_reviewoptions(...) + * + * @param object $game the game instance. + * @param array $attempts an array of attempt objects. + * @param $context the roles and permissions context, + * normally the context for the game module instance. + * + * @return array of two options objects, one showing which options are true for + * at least one of the attempts, the other showing which options are true + * for all attempts. + */ +function game_get_combined_reviewoptions($game, $attempts, $context=null) { + $fields = array('readonly', 'scores', 'feedback', 'correct_responses', 'solutions', 'generalfeedback', 'overallfeedback'); + $someoptions = new stdClass; + $alloptions = new stdClass; + foreach ($fields as $field) { + $someoptions->$field = false; + $alloptions->$field = true; + } + foreach ($attempts as $attempt) { + $attemptoptions = game_get_reviewoptions( $game, $attempt, $context); + foreach ($fields as $field) { + $someoptions->$field = $someoptions->$field || $attemptoptions->$field; + $alloptions->$field = $alloptions->$field && $attemptoptions->$field; + } + } + return array( $someoptions, $alloptions); +} + +/** + * Save the overall grade for a user at a game in the game_grades table + * + * @param object $quiz The game for which the best grade is to be calculated and then saved. + * @param integer $userid The userid to calculate the grade for. Defaults to the current user. + * @return boolean Indicates success or failure. + */ +function game_save_best_score($game) { + global $DB, $USER; + + // Get all the attempts made by the user + if (!$attempts = game_get_user_attempts( $game->id, $USER->id, 'all')) { + print_error( 'Could not find any user attempts gameid='.$game->id.' userid='.$USER->id); + } + + // Calculate the best grade + $bestscore = game_calculate_best_score( $game, $attempts); + + // Save the best grade in the database + if ($grade = $DB->get_record('game_grades', array( 'gameid' => $game->id, 'userid' => $USER->id))) { + $grade->score = $bestscore; + $grade->timemodified = time(); + if (!$DB->update_record('game_grades', $grade)) { + print_error('Could not update best grade'); + } + } else { + $grade = new stdClass(); + $grade->gameid = $game->id; + $grade->userid = $USER->id; + $grade->score = $bestscore; + $grade->timemodified = time(); + if (!$DB->insert_record( 'game_grades', $grade)) { + print_error( 'Could not insert new best grade'); + } + } + + // update gradebook + $grades = new stdClass(); + $grades->userid = $USER->id; + $grades->rawgrade = game_score_to_grade($bestscore, $game); + $grades->datesubmitted = time(); + game_grade_item_update( $game, $grades); + + return true; +} + +/** +* Calculate the overall score for a game given a number of attempts by a particular user. +* +* @return double The overall score +* @param object $game The game for which the best score is to be calculated +* @param array $attempts An array of all the attempts of the user at the game +*/ +function game_calculate_best_score($game, $attempts) { + + switch ($game->grademethod) { + + case GAME_GRADEMETHOD_FIRST: + foreach ($attempts as $attempt) { + return $attempt->score; + } + break; + + case GAME_GRADEMETHOD_LAST: + foreach ($attempts as $attempt) { + $final = $attempt->score; + } + return $final; + + case GAME_GRADEMETHOD_AVERAGE: + $sum = 0; + $count = 0; + foreach ($attempts as $attempt) { + $sum += $attempt->score; + $count++; + } + return (float)$sum/$count; + + default: + case GAME_GRADEMETHOD_HIGHEST: + $max = 0; + foreach ($attempts as $attempt) { + if ($attempt->score > $max) { + $max = $attempt->score; + } + } + return $max; + } +} + +/** +* Return the attempt with the best score for a game +* +* Which attempt is the best depends on $game->grademethod. If the grade +* method is GRADEAVERAGE then this function simply returns the last attempt. +* @return object The attempt with the best grade +* @param object $game The game for which the best grade is to be calculated +* @param array $attempts An array of all the attempts of the user at the game +*/ +function game_calculate_best_attempt($game, $attempts) { + + switch ($game->grademethod) { + + case GAME_ATTEMPTFIRST: + foreach ($attempts as $attempt) { + return $attempt; + } + break; + + case GAME_GRADEAVERAGE: // need to do something with it :-) + case GAME_ATTEMPTLAST: + foreach ($attempts as $attempt) { + $final = $attempt; + } + return $final; + + default: + case GAME_GRADEHIGHEST: + $max = -1; + foreach ($attempts as $attempt) { + if ($attempt->sumgrades > $max) { + $max = $attempt->sumgrades; + $maxattempt = $attempt; + } + } + return $maxattempt; + } +} + + +/** +* Loads the most recent state of each question session from the database +* +* For each question the most recent session state for the current attempt +* is loaded from the game_questions table and the question type specific data +* +* @return array An array of state objects representing the most recent +* states of the question sessions. +* @param array $questions The questions for which sessions are to be restored or +* created. +* @param object $cmoptions +* @param object $attempt The attempt for which the question sessions are +* to be restored or created. +* @param mixed either the id of a previous attempt, if this attmpt is +* building on a previous one, or false for a clean attempt. +*/ +function game_get_question_states(&$questions, $cmoptions, $attempt, $lastattemptid = false) { + global $DB, $QTYPES; + + // get the question ids + $ids = array_keys( $questions); + $questionlist = implode(',', $ids); + + $statefields = 'questionid as question, manualcomment, score as grade'; + + $sql = "SELECT $statefields". + " FROM {game_questions} ". + " WHERE attemptid = '$attempt->id'". + " AND questionid IN ($questionlist)"; + $states = $DB->get_records_sql($sql); + + // loop through all questions and set the last_graded states + foreach ($ids as $i) { + // Create the empty question type specific information + if (!$QTYPES[$questions[$i]->qtype]->create_session_and_responses( + $questions[$i], $states[$i], $cmoptions, $attempt)) { + return false; + } + + $states[$i]->last_graded = clone($states[$i]); + } + return $states; +} + +function game_sudoku_getquestions( $questionlist) +{ + global $DB; + + // Load the questions + if (!$questions = $DB->get_records_select( 'question', "id IN ($questionlist)")) { + print_error( get_string( 'no_questions', 'game')); + } + + // Load the question type specific information + if (!get_question_options($questions)) { + print_error('Could not load question options'); + } + + return $questions; +} + +function game_filterglossary( $text, $entryid, $contextid, $courseid) +{ + global $CFG, $DB; + + for(;;) + { + $find='@@PLUGINFILE@@'; + $pos = strpos( $text, $find); + if( $pos === false) + break; + + $pos2 = strpos( $text,'/', $pos); + if( $pos2 === false) + break; + + $pos3 = strpos( $text,'"', $pos); + if( $pos3 === false) + break; + + $file = substr( $text, $pos2+1, $pos3-$pos2-1); + + $new = $CFG->wwwroot."/pluginfile.php/$contextid/mod_glossary/entry/$entryid/$file"; + $text = substr( $text, 0, $pos).$new.substr( $text,$pos3); + } + $questiontext = str_replace( '$$'.'\\'.'\\'.'frac', '$$\\'.'frac', $text); + return game_filtertext( $text, $courseid); + +} + +function game_filterquestion( $questiontext, $questionid, $contextid, $courseid) +{ + global $CFG, $DB; + + for(;;) + { + $find='@@PLUGINFILE@@'; + $pos = strpos( $questiontext, $find); + if( $pos === false) + break; + + $pos2 = strpos( $questiontext,'/', $pos); + if( $pos2 === false) + break; + + $pos3 = strpos( $questiontext,'"', $pos); + if( $pos3 === false) + break; + + $file = substr( $questiontext, $pos2+1, $pos3-$pos2-1); + + $new = $CFG->wwwroot."/pluginfile.php/$contextid/mod_game/questiontext/$questionid/$file"; + $questiontext = substr( $questiontext, 0, $pos).$new.substr( $questiontext,$pos3); + } + $questiontext = str_replace( '$$'.'\\'.'\\'.'frac', '$$\\'.'frac', $questiontext); + return game_filtertext( $questiontext, $courseid); + +} + +function game_filterquestion_answer( $questiontext, $questionid, $contextid, $courseid) +{ + global $CFG, $DB; + + for(;;) + { + $find='@@PLUGINFILE@@'; + $pos = strpos( $questiontext, $find); + if( $pos === false) + break; + + $pos2 = strpos( $questiontext,'/', $pos); + if( $pos2 === false) + break; + + $pos3 = strpos( $questiontext,'"', $pos); + if( $pos3 === false) + break; + + $file = substr( $questiontext, $pos2+1, $pos3-$pos2-1); + + $new = $CFG->wwwroot."/pluginfile.php/$contextid/mod_game/answer/$questionid/$file"; + $questiontext = substr( $questiontext, 0, $pos).$new.substr( $questiontext,$pos3); + } + + return game_filtertext( $questiontext, $courseid); +} + +function game_filtertext( $text, $courseid){ + $formatoptions = new stdClass(); + $formatoptions->noclean = true; + $formatoptions->filter = 1; + $text = trim( format_text( $text, FORMAT_MOODLE, $formatoptions, $courseid)); + + $start = '
    '; + if( substr( $text, 0, strlen( $start)) == $start){ + if( substr( $text, -6) == '
    '){ + $text = substr( $text, strlen( $start), -6); + } + } + if( substr( $text, 0, 3) == '

    '){ + if( substr( $text, -4) == '

    '){ + $text = substr( $text, 3, -4); + } + } + + return $text; +} + +function game_tojavascriptstring( $text) +{ + $from = array('"',"\r", "\n"); + $to = array('\"', ' ', ' '); + + $from[] = ''; + echo ''; + } + // Close form + echo ''; + echo ''; + + if (!empty($attempts)) { + echo ''; + $options = array(); + $options["id"] = "$cm->id"; + $options["q"] = "$game->id"; + $options["mode"] = "overview"; + $options['sesskey'] = sesskey(); + $options["noheader"] = "yes"; + $options['noattempts'] = $noattempts; + $options['detailedmarks'] = $detailedmarks; + echo '\n"; + echo '\n"; + echo '\n"; + echo "\n"; + echo '
    '; + $options["download"] = "ODS"; + print_single_button("report.php", $options, get_string("downloadods", 'game')); ///check bdaloukas + echo "'; + $options["download"] = "Excel"; + print_single_button("report.php", $options, get_string("downloadexcel")); + echo "'; + $options["download"] = "CSV"; + print_single_button('report.php', $options, get_string("downloadtext")); + echo ""; + helpbutton('overviewdownload', get_string('overviewdownload', 'quiz'), 'game'); + echo "
    '; + } + } else if ($download == 'Excel' or $download == 'ODS') { + $workbook->close(); + exit; + } else if ($download == 'CSV') { + exit; + } + + } else { + if (!$download) { + $table->print_html(); + } + } + // Print display options + echo '
    '; + echo '
    '; + echo '
    '; + echo '

    '.get_string('displayoptions', 'game').':

    '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    '; + $options = array(0 => get_string('attemptsonly','game', $course->students)); + if ($course->id != SITEID) { + $options[1] = get_string('noattemptsonly', 'game', $course->students); + $options[2] = get_string('allstudents','game', $course->students); + $options[3] = get_string('allattempts','game'); + } + choose_from_menu($options,'noattempts',$noattempts,''); + echo '
    '; + echo '
    '; + echo ''; + echo '
    '; + echo '
    '; + echo '
    '; + echo '
    '; + echo "\n"; + + return true; + } +} + +?> diff --git a/review.php b/review.php new file mode 100644 index 0000000..4a0fae1 --- /dev/null +++ b/review.php @@ -0,0 +1,327 @@ +get_record('game_attempts', array( 'id' => $attempt))) { + print_error("No such attempt ID exists"); + } + if (! $game = $DB->get_record('game', array( 'id' => $attempt->gameid))) { + print_error("The game with id $attempt->gameid belonging to attempt $attempt is missing"); + } + + game_compute_attempt_layout( $game, $attempt); + + if (! $course = $DB->get_record('course', array( 'id' => $game->course))) { + print_error("The course with id $game->course that the game with id $game->id belongs to is missing"); + } + if (! $cm = get_coursemodule_from_instance("game", $game->id, $course->id)) { + print_error("The course module for the game with id $game->id is missing"); + } + + $grade = game_score_to_grade( $attempt->score, $game); + $feedback = game_feedback_for_grade( $grade, $attempt->gameid); + + require_login( $course->id, false, $cm); + $context = get_context_instance( CONTEXT_MODULE, $cm->id); + $coursecontext = get_context_instance( CONTEXT_COURSE, $cm->course); + $isteacher = isteacher( $game->course, $USER->id); + $options = game_get_reviewoptions( $game, $attempt, $context); + $popup = $isteacher ? 0 : $game->popup; // Controls whether this is shown in a javascript-protected window. + + add_to_log($course->id, "game", "review", "review.php?id=$cm->id&attempt=$attempt->id", "$game->id", "$cm->id"); + +/// Print the page header + + $strgames = get_string('modulenameplural', 'game'); + $strreview = get_string('review', 'game'); + $strscore = get_string('score', "game"); + $strgrade = get_string('grade'); + $strbestgrade = get_string('bestgrade', 'quiz'); + $strtimetaken = get_string('timetaken', 'game'); + $strtimecompleted = get_string('completedon', 'game'); + + + $strupdatemodule = has_capability('moodle/course:manageactivities', $coursecontext) + ? update_module_button($cm->id, $course->id, get_string('modulename', 'game')) + : ""; + + $strgames = get_string("modulenameplural", "game"); + $strgame = get_string("modulename", "game"); + + if( function_exists( 'build_navigation')){ + $navigation = build_navigation('', $cm); + echo $OUTPUT->heading("$course->shortname: $game->name", "$course->shortname: $game->name", $navigation, + "", "", true, update_module_button($cm->id, $course->id, $strgame), + navmenu($course, $cm)); + }else{ + if ($course->category) { + $navigation = "wwwroot}/course/view.php?id=$course->id\">$course->shortname ->"; + } else { + $navigation = ''; + } + echo $OUTPUT->heading("$course->shortname: $game->name", "$course->fullname", + "$navigation id>$strgames -> $game->name", + "", "", true, update_module_button($cm->id, $course->id, $strgame), + navmenu($course, $cm)); + } + + + echo ''; // for overlib +/// Print heading and tabs if this is part of a preview + //if (has_capability('mod/game:preview', $context)) { + if ($attempt->userid == $USER->id) { // this is the report on a preview + $currenttab = 'preview'; + } else { + $currenttab = 'reports'; + $mode = ''; + } + include('tabs.php'); + //} else { + // print_heading(format_string($game->name)); + //} + +/// Load all the questions and states needed by this script + + // load the questions needed by page + $pagelist = $showall ? game_questions_in_game( $attempt->layout) : game_questions_on_page( $attempt->layout, $page); + $a = explode( ',', $pagelist); + $pagelist = ''; + foreach( $a as $item){ + if( substr( $item, 0, 1)){ + if( substr( $item, -1) != 'G'){ + $pagelist .= ','.$item; + } + } + } + $pagelist = substr( $pagelist, 1); + + if( $pagelist != ''){ + $sql = "SELECT q.*, i.id AS instance,i.id as iid,". + "i.score AS score,i.studentanswer". + " FROM {question} q,". + " {game_queries} i". + " WHERE i.attemptid = '$attempt->id' AND q.id = i.questionid AND (i.sourcemodule='question' or i.sourcemodule = 'quiz')". + " AND q.id IN ($pagelist)"; + + if (!$questions = $DB->get_records_sql( $sql)) { + print_error('No questions found'); + } + }else + { + $questions = array(); + } + + // Load the question type specific information + if (!get_question_options( $questions)) { + print_error('Could not load question options'); + } + + $states = game_compute_states( $game, $questions); +/// Print infobox + + //$timelimit = (int)$game->timelimit * 60; + $timelimit = 0; + $overtime = 0; + + if ($attempt->timefinish) { + if ($timetaken = ($attempt->timefinish - $attempt->timestart)) { + if($timelimit && $timetaken > ($timelimit + 60)) { + $overtime = $timetaken - $timelimit; + $overtime = format_time($overtime); + } + $timetaken = format_time($timetaken); + } else { + $timetaken = "-"; + } + } else { + $timetaken = get_string('unfinished', 'game'); + } + + $table->align = array("right", "left"); + if ($attempt->userid <> $USER->id) { + $student = $DB->get_record('user', array( 'id' => $attempt->userid)); + $picture = print_user_picture($student->id, $course->id, $student->picture, false, true); + $table->data[] = array($picture, ''.fullname($student, true).''); + } + //if (has_capability('mod/game:grade', $context)){ + if( count($attempts = $DB->get_records('game_attempts', array( 'gameid' => $game->id, 'userid' => $attempt->userid), 'attempt ASC')) > 1) { + // print list of attempts + $attemptlist = ''; + foreach ($attempts as $at) { + $attemptlist .= ($at->id == $attempt->id) + ? ''.$at->attempt.', ' + : ''.$at->attempt.', '; + } + $table->data[] = array(get_string('attempts', 'game').':', trim($attemptlist, ' ,')); + } + //} + + $table->data[] = array(get_string('startedon', 'game').':', userdate($attempt->timestart)); + if ($attempt->timefinish) { + $table->data[] = array("$strtimecompleted:", userdate($attempt->timefinish)); + $table->data[] = array("$strtimetaken:", $timetaken); + } + //if the student is allowed to see their score + if ($options->scores) { + if ($game->grade) { + if($overtime) { + $result->sumgrades = "0"; + $result->grade = "0.0"; + } + + $a = new stdClass; + $percentage = round($attempt->score*100, 0); + $a->grade = game_score_to_grade( $attempt->score, $game); + $a->maxgrade = $game->grade; + $table->data[] = array("$strscore:", "{$a->grade}/{$game->grade} ($percentage %)"); + //$table->data[] = array("$strgrade:", get_string('outof', 'game', $a)); + } + } + if ($options->overallfeedback && $feedback) { + $table->data[] = array(get_string('feedback', 'game'), $feedback); + } + if ($isteacher and $attempt->userid == $USER->id) { + // the teacher is at the end of a preview. Print button to start new preview + unset($buttonoptions); + $buttonoptions['q'] = $game->id; + $buttonoptions['forcenew'] = true; + echo '
    '; + print_single_button($CFG->wwwroot.'/mod/game/attempt.php', $buttonoptions, get_string('startagain', 'game')); + echo '
    '; + } else { // print number of the attempt + print_heading(get_string('reviewofattempt', 'game', $attempt->attempt)); + } + print_table($table); + + // print javascript button to close the window, if necessary + if (!$isteacher) { + include('attempt_close_js.php'); + } + +/// Print the navigation panel if required + $numpages = game_number_of_pages( $attempt->layout); + if ($numpages > 1 and !$showall) { + print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); + echo ''; + } + +/// Print all the questions + if( $pagelist){ + game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game); + } + + // Print the navigation panel if required + if ($numpages > 1 and !$showall) { + print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); + } + + // print javascript button to close the window, if necessary + if (!$isteacher) { + include('attempt_close_js.php'); + } + + if (empty($popup)) { + echo $OUTPUT->footer($course); + } + + function game_compute_states( $game, $questions) + { + global $QTYPES; + + // Restore the question sessions to their most recent states + // creating new sessions where required + + $states = array(); + foreach ($questions as $question) { + $state = new StdClass; + + $cmoptions->course = $game->course; + $cmoptions->optionflags->optionflags = 0; + $cmoptions->id = 0; + $cmoptions->shuffleanswers = 1; + + $state->last_graded = new StdClass; + $state->last_graded->event = QUESTION_EVENTOPEN; + + $state->raw_grade = 0; + + $attempt = 0; + if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { + print_error( 'game_compute_states: problem'); + } + + $state->event = QUESTION_EVENTOPEN; + //$question->maxgrade = 100; + $state->manualcomment = ''; + + $state->responses = array( '' => $question->studentanswer); + $state->attempt = $question->iid; + + $states[ $question->id] = $state; + } + return $states; + } + + + + function game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game) + { + $pagequestions = explode(',', $pagelist); + $number = game_first_questionnumber( $attempt->layout, $pagelist); + foreach ($pagequestions as $i) { + if (!isset($questions[$i])) { + echo $OUTPUT->box_start('center', '90%'); + echo '' . $number . '
    '; + notify(get_string('errormissingquestion', 'quiz', $i)); + echo $OUTPUT->box_end(); + $number++; // Just guessing that the missing question would have lenght 1 + continue; + } + $options->validation = QUESTION_EVENTVALIDATE === $states[$i]->event; + //$options->history = ($isteacher and !$attempt->preview) ? 'all' : 'graded'; + $options->history = false; + unset( $options->questioncommentlink); + // Print the question + if ($i > 0) { + echo "
    \n"; + } + $questions[$i]->maxgrade = 0; + + $options->correct_responses = 0; + $options->feedback = 0; + $options->readonly = 0; + + global $QTYPES; + + unset( $cmoptions); + $cmoptions->course = $game->course; + $cmoptions->optionflags->optionflags = 0; + $cmoptions->id = 0; + $cmoptions->shuffleanswers = 1; + $attempt = 0; + $question = $questions[ $i]; + if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { + print_error( 'game_sudoku_showquestions_quiz: problem'); + } + $cmoptions->optionflags = 0; + print_question( $question, $states[$i], $number, $cmoptions, $options); + $number += $questions[$i]->length; + } + } + +?> diff --git a/showanswers.php b/showanswers.php new file mode 100644 index 0000000..c5949e1 --- /dev/null +++ b/showanswers.php @@ -0,0 +1,405 @@ +navbar->add(get_string('showanswers', 'game')); + + $action = optional_param('action', "", PARAM_ALPHANUM); // action + if( $action == 'delstats') + $DB->delete_records('game_repetitions', array('gameid' => $game->id, 'userid' => $USER->id)); + if( $action == 'computestats') + game_compute_repetitions($game); + + echo ''.get_string('repetitions', 'game').':   '; + echo get_string('user').': '; + game_showusers($game); + echo "  wwwroot}/mod/game/showanswers.php?q=$q&action=delstats\">".get_string('clearrepetitions','game').''; + echo "   wwwroot}/mod/game/showanswers.php?q=$q&action=computestats\">".get_string('computerepetitions','game').''; + echo '

    '; + + $existsbook = ($DB->get_record( 'modules', array( 'name' => 'book'), 'id,id')); + game_showanswers( $game, $existsbook); + + echo $OUTPUT->footer(); + +function game_compute_repetitions($game){ + global $DB, $USER; + + $DB->delete_records('game_repetitions', array('gameid' => $game->id,'userid' => $USER->id)); + + $sql = "INSERT INTO {game_repetitions}( gameid,userid,questionid,glossaryentryid,repetitions) ". + "SELECT $game->id,$USER->id,questionid,glossaryentryid,COUNT(*) ". + "FROM {game_queries} WHERE gameid=$game->id AND userid=$USER->id GROUP BY questionid,glossaryentryid"; + + if( !$DB->execute( $sql)) + print_error('Problem on computing statistics for repetitions'); +} + +function game_showusers($game) +{ + global $CFG, $USER; + + $users = array(); + + $context = get_context_instance(CONTEXT_COURSE, $game->course); + + if ($courseusers = get_enrolled_users($context)) { + foreach ($courseusers as $courseuser) { + $users[$courseuser->id] = fullname($courseuser, has_capability('moodle/site:viewfullnames', $context)); + } + } + if ($guest = guest_user()) { + $users[$guest->id] = fullname($guest); + } + ?> + + id,PARAM_INT); + + $output = '' . "\n"; +} + +function game_showanswers( $game, $existsbook) +{ + if( $game->gamekind == 'bookquiz' and $existsbook){ + game_showanswers_bookquiz( $game); + return; + } + + switch( $game->sourcemodule){ + case 'question': + game_showanswers_question( $game); + break; + case 'glossary': + game_showanswers_glossary( $game); + break; + case 'quiz': + game_showanswers_quiz( $game); + break; + } +} + +function game_showanswers_appendselect( $game) +{ + switch( $game->gamekind){ + case 'hangman': + case 'cross': + case 'crypto': + return " AND qtype='shortanswer'"; + case 'millionaire': + return " AND qtype = 'multichoice'"; + case 'sudoku': + case 'bookquiz': + case 'snakes': + return " AND qtype in ('shortanswer', 'truefalse', 'multichoice')"; + } + + return ''; +} + +function game_showanswers_question( $game) +{ + global $DB; + + if( $game->gamekind != 'bookquiz'){ + $select = ' category='.$game->questioncategoryid; + + if( $game->subcategories){ + $cats = question_categorylist( $game->questioncategoryid); + if( strpos( $cats, ',') > 0){ + $select = ' category in ('.$cats.')'; + } + } + }else + { + $context = get_context_instance(50, $COURSE->id); + $select = " contextid in ($context->id)"; + $select2 = ''; + if( $recs = $DB->get_records_select( 'question_categories', $select, null, 'id,id')){ + foreach( $recs as $rec){ + $select2 .= ','.$rec->id; + } + } + $select = ' AND category IN ('.substr( $select2, 1).')'; + } + + $select .= ' AND hidden = 0 '; + $select .= game_showanswers_appendselect( $game); + + $showcategories = ($game->gamekind == 'bookquiz'); + $order = ($showcategories ? 'category,questiontext' : 'questiontext'); + game_showanswers_question_select( $game, '{question} q', $select, '*', $order, $showcategories, $game->course); +} + + +function game_showanswers_quiz( $game) +{ + global $CFG; + + $select = "quiz='$game->quizid' ". + ' AND qqi.question=q.id'. + ' AND q.hidden=0'. + showanswers_appendselect( $game); + $table = '{question} q,{quiz_question_instances} qqi'; + + game_showanswers_question_select( $game, $table, $select, 'q.*', 'category,questiontext', false, $game->course); +} + + +function game_showanswers_question_select( $game, $table, $select, $fields='*', $order='questiontext', $showcategoryname=false, $courseid=0) +{ + global $CFG, $DB, $OUTPUT; + + $sql = "SELECT $fields FROM $table WHERE $select ORDER BY $order"; + if( ($questions = $DB->get_records_sql( $sql)) === false){ + return; + } + + $table .= ",{game_repetitions} gr"; + $select .= " AND gr.questionid=q.id AND gr.glossaryentryid=0 AND gr.gameid=".$game->id; + $userid = optional_param('userid',0,PARAM_INT); + if( $userid) + $select .= " AND gr.userid=$userid"; + $sql = "SELECT q.id as id,SUM(repetitions) as c FROM {$table} WHERE $select GROUP BY q.id"; + $reps = $DB->get_records_sql( $sql); + + $categorynames = array(); + if( $showcategoryname){ + $select = ''; + $recs = $DB->get_records( 'question_categories', null, '', '*', 0, 1); + foreach( $recs as $rec){ + if( array_key_exists( 'course', $rec)){ + $select = "course=$courseid"; + }else{ + $context = get_context_instance(50, $courseid); + $select = " contextid in ($context->id)"; + } + break; + } + + if( ($categories = $DB->get_records_select( 'question_categories', $select, null, '', 'id,name'))){ + foreach( $categories as $rec){ + $categorynames[ $rec->id] = $rec->name; + } + } + } + + echo ''; + echo ''; + if( $showcategoryname){ + echo ''; + } + echo ''; + echo ''; + echo ''; + if( $reps) + echo ''; + echo "\r\n"; + $line = 0; + foreach( $questions as $question){ + echo ''; + echo ''; + + if( $showcategoryname){ + echo ''; + } + + echo ''; + + switch( $question->qtype){ + case 'shortanswer': + $recs = $DB->get_records( 'question_answers', array( 'question' => $question->id), 'fraction DESC', 'id,answer,feedback'); + if( $recs == false){ + $rec = false; + }else{ + foreach( $recs as $rec) + break; + } + echo ""; + if( $rec->feedback == '') + $rec->feedback = ' '; + echo ""; + break; + case 'multichoice': + case 'truefalse': + $recs = $DB->get_records( 'question_answers', array( 'question' => $question->id)); + $feedback = ''; + echo ''; + if( $feedback == '') + $feedback = ' '; + echo ""; + break; + default: + echo ""; + break; + } + + //Show repetitions + if( $reps){ + if( array_key_exists( $question->id, $reps)){ + $rep = $reps[ $question->id]; + echo ''; + }else + echo ''; + } + + echo "\r\n"; + } + echo "
    '.get_string( 'categories', 'quiz').''.get_string( 'questions', 'quiz').''.get_string( 'answers', 'quiz').''.get_string( 'feedbacks', 'game').''.get_string( 'repetitions', 'game').'
    '.(++$line); + echo ''; + if( array_key_exists( $question->category, $categorynames)){ + echo $categorynames[ $question->category]; + }else{ + echo ' '; + } + echo ''; + echo "wwwroot}/question/question.php?inpopup=1&id=$question->id&courseid=$courseid\" target=\"_blank\">pix_url('t/edit')."\" alt=\"Edit\" /> "; + echo $question->questiontext.'$rec->answer$rec->feedback'; + $i = 0; + foreach( $recs as $rec){ + if( $i++ > 0) + echo '
    '; + if( $rec->fraction == 1){ + echo " $rec->answer"; + if( $rec->feedback == '') + $feedback .= '
    '; + else + $feedback .= "$rec->feedback
    "; + + }else + { + echo " $rec->answer"; + if( $rec->feedback == '') + $feedback .= '
    '; + else + $feedback .= "
    "; + } + } + echo '
    $feedback$question->qtype
    '.$rep->c.'
     

    \r\n\r\n"; +} + +function game_showanswers_glossary( $game) +{ + global $CFG, $DB; + + $table = '{glossary_entries} ge'; + $select = "glossaryid={$game->glossaryid}"; + if( $game->glossarycategoryid){ + $select .= " AND gec.entryid = ge.id ". + " AND gec.categoryid = {$game->glossarycategoryid}"; + $table .= ",{glossary_entries_categories} gec"; + } + $sql = "SELECT id,definition,concept FROM $table WHERE $select ORDER BY definition"; + if( ($questions = $DB->get_records_sql( $sql)) === false){ + return; + } + + //Show repetiotions of questions + $table = "{glossary_entries} ge, {game_repetitions} gr"; + $select = "glossaryid={$game->glossaryid} AND gr.glossaryentryid=ge.id AND gr.gameid=".$game->id; + $userid = optional_param('userid',0,PARAM_INT); + if( $userid) + $select .= " AND gr.userid=$userid"; + if( $game->glossarycategoryid){ + $select .= " AND gec.entryid = ge.id ". + " AND gec.categoryid = {$game->glossarycategoryid}"; + $table .= ",{glossary_entries_categories} gec"; + } + $sql = "SELECT ge.id,SUM(repetitions) as c FROM {$table} WHERE $select GROUP BY ge.id"; + $reps = $DB->get_records_sql( $sql); + + echo ''; + echo ''; + echo ''; + echo ''; + if( $reps != false) + echo ''; + echo "\r\n"; + $line = 0; + foreach( $questions as $question){ + if( $game->param7 == 0){ //Not allowed spaces + if(!( strpos( $question->concept, ' ') === false)) + continue; + } + if( $game->param8 == 0){ //Not allowed - + if(!( strpos( $question->concept, '-') === false)) + continue; + } + + echo ''; + echo ''; + + echo ''; + echo ''; + if( $reps != false){ + if( array_key_exists( $question->id, $reps)) + { + $rep = $reps[ $question->id]; + echo ''; + }else + echo ''; + } + echo "\r\n"; + } + echo "
    '.get_string( 'questions', 'quiz').''.get_string( 'answers', 'quiz').''.get_string( 'repetitions', 'game').'
    '.(++$line); + echo ''.$question->definition.''.$question->concept.'
    '.$rep->c.'
     

    \r\n\r\n"; +} + +function game_showanswers_bookquiz( $game) +{ + global $CFG; + + $select = "gbq.questioncategoryid=q.category ". + " AND gbq.gameid = $game->id ". + " AND bc.id = gbq.chapterid"; + $table = "{question} q,{game_bookquiz_questions} gbq,{book_chapters} bc"; + + game_showanswers_question_select( $game, $table, $select, "DISTINCT q.*", "bc.pagenum,questiontext"); +} diff --git a/showattempts.php b/showattempts.php new file mode 100644 index 0000000..aa3aecb --- /dev/null +++ b/showattempts.php @@ -0,0 +1,256 @@ +navbar->add(get_string('showattempts', 'game')); + + $action = optional_param('action', "", PARAM_ALPHANUM); // action + if( $action == 'delete'){ + game_ondeleteattempt( $game); + } + + echo get_string( 'group').': '; + game_showgroups( $game); + echo '   '.get_string('user').': '; + game_showusers( $game);echo '

    '; + + game_showattempts( $game); + + echo $OUTPUT->footer(); + + + function game_showusers($game) + { + global $CFG, $USER, $DB; + + $users = array(); + + $context = get_context_instance(CONTEXT_COURSE, $game->course); + + $groupid = optional_param('groupid',0, PARAM_INT); + $sql = "SELECT DISTINCT ra.userid,u.lastname,u.firstname FROM {role_assignments} ra, {user} u ". + " WHERE ra.contextid={$context->id} AND ra.userid=u.id"; + if( $groupid != 0) + $sql .= " AND ra.userid IN (SELECT gm.userid FROM {groups_members} gm WHERE gm.groupid=$groupid)"; + if( ($recs = $DB->get_records_sql( $sql))){ + foreach( $recs as $rec){ + $users[ $rec->userid] = $rec->lastname.' '.$rec->firstname; + } + } + + + if ($guest = guest_user()) { + $users[$guest->id] = fullname($guest); + } + ?> + + ' . "\n"; + $output .= ' ' . "\n"; + } + } + } + echo $output . '' . "\n"; + } + + function game_showgroups($game) + { + global $CFG, $USER, $DB; + + $groups = array(); + if( ($recs = $DB->get_records_sql( "SELECT id,name FROM {groups} WHERE courseid=$game->course ORDER BY name"))){ + foreach( $recs as $rec){ + $groups[ $rec->id] = $rec->name; + } + } + + ?> + + ' . "\n"; + $output .= ' ' . "\n"; + } + } + } + echo $output . '' . "\n"; + } + + function game_showattempts($game){ + global $CFG, $DB, $OUTPUT; + + $userid = optional_param('userid',0,PARAM_INT); + $limitfrom = optional_param('limitfrom', 0, PARAM_INT); + $gamekind = $game->gamekind; + $update = get_coursemodule_from_instance( 'game', $game->id, $game->course)->id; + + //Here are user attempts + $table = "{game_attempts} as ga, {user} u, {game} as g"; + $select = "ga.userid=u.id AND ga.gameid={$game->id} AND g.id={$game->id}"; + $fields = "ga.id, u.lastname, u.firstname, ga.attempts,". + "timestart, timefinish, timelastattempt, score, ga.lastip, ga.lastremotehost"; + if( $userid != 0) + $select .= ' AND u.id='.$userid; + $sql = "SELECT COUNT(*) AS c FROM $table WHERE $select"; + $count = $DB->count_records_sql( $sql); + $maxlines = 20; + $recslimitfrom = $recslimitnum = ''; + if( $count > $maxlines){ + $recslimitfrom = ( $limitfrom ? $limitfrom * $maxlines : ''); + $recslimitnum = $maxlines; + + for($i=0; $i*$maxlines < $count; $i++){ + if( $i == $limitfrom){ + echo ($i+1).' '; + }else + { + echo "wwwroot}/mod/game/preview.php?action=showattempts&update=$update&q={$game->id}&limitfrom=$i&\">".($i+1).""; + echo '  '; + } + } + echo "
    "; + } + + $sql = "SELECT $fields FROM $table WHERE $select ORDER BY timelastattempt DESC,timestart DESC"; + if( ($recs = $DB->get_records_sql( $sql, null, $recslimitfrom, $recslimitnum)) != false){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo "\r\n"; + + foreach( $recs as $rec){ + echo ''; + echo ''; + echo ''; + echo ''; + echo '\r\n"; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + //Show solution + echo ''; + echo "\r\n"; + } + echo "
    '.get_string( 'delete').''.get_string('user').''.get_string('lastip', 'game').''.get_string('timestart', 'game').''.get_string('timelastattempt', 'game').''.get_string('timefinish', 'game').''.get_string('score', 'game').''.get_string('attempts', 'game').''.get_string('preview', 'game').''.get_string('showsolution', 'game').'
    '; + if( $rec->timefinish == 0){ + echo "\r\nwwwroot}/mod/game/showattempts.php?attemptid={$rec->id}&q={$game->id}&action=delete\">"; + echo ''.get_string( 'delete').''; + } + echo '
    '.$rec->firstname. ' '.$rec->lastname.'
    '.(strlen( $rec->lastremotehost) > 0 ? $rec->lastremotehost : $rec->lastip).'
    '.( $rec->timestart != 0 ? userdate($rec->timestart) : '')."
    '.( $rec->timelastattempt != 0 ? userdate($rec->timelastattempt) : '').'
    '.( $rec->timefinish != 0 ? userdate($rec->timefinish) : '').'
    '.round($rec->score * 100).'
    '.$rec->attempts.'
    '; + //Preview + if( ($gamekind == 'cross') or ($gamekind == 'sudoku') or ($gamekind == 'hangman') or ($gamekind == 'cryptex')){ + echo "\r\nwwwroot}/mod/game/preview.php?action=preview&attemptid={$rec->id}&gamekind=$gamekind"; + echo '&update='.$update."&q={$game->id}\">"; + echo ''.get_string( 'preview', 'game').''; + } + echo '
    '; + if( ($gamekind == 'cross') or ($gamekind == 'sudoku') or ($gamekind == 'hangman') or ($gamekind == 'cryptex') ){ + echo "\r\nwwwroot}/mod/game/preview.php?action=solution&attemptid={$rec->id}&gamekind={$gamekind}&update=$update&&q={$game->id}\">"; + echo ''.get_string( 'showsolution', 'game').''; + } + echo '
    \r\n"; + } + } + + function game_ondeleteattempt( $game) + { + global $CFG, $DB; + + $attemptid = required_param('attemptid', PARAM_INT); + + $attempt = $DB->get_record( 'game_attempts', array( 'id' => $attemptid)); + + switch( $game->gamekind) + { + case 'bookquiz': + $DB->delete_records( 'game_bookquiz_chapters', array( 'attemptid' => $attemptid)); + break; + } + $DB->delete_records( 'game_queries', array( 'attemptid' => $attemptid)); + $DB->delete_records( 'game_attempts', array( 'id' => $attemptid)); + } diff --git a/snakes/1/dice1.png b/snakes/1/dice1.png new file mode 100644 index 0000000000000000000000000000000000000000..95eb0f066149ab96b2eecf4a6f3bd179c2beb4fd GIT binary patch literal 52307 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 E0dlI~kN^Mx literal 0 HcmV?d00001 diff --git a/snakes/1/dice2.png b/snakes/1/dice2.png new file mode 100644 index 0000000000000000000000000000000000000000..7d83164f0df2d516e59663a9418fab30e8b3a056 GIT binary patch literal 53409 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 literal 0 HcmV?d00001 diff --git a/snakes/1/dice4.png b/snakes/1/dice4.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c870026b074430b7f5d0941f4ef2b669d9b983 GIT binary patch literal 52442 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 Pmx^A!VxU<9yB+o)Dq%kS literal 0 HcmV?d00001 diff --git a/snakes/1/dice5.png b/snakes/1/dice5.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad2551db0a430db6b633bd22f2c90f106254fbc GIT binary patch literal 52681 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la01.png b/snakes/1/la01.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdfd908e2d5bdfd60b069620f9711a011e019d0 GIT binary patch literal 1877 zcmZvcS5y<&7KTHSCM5(Zp-BdjB2jTDp-DG@(t8a^qJYUD7!r`7gUAJyL8%fD1XPGX z7z`b3vm^XRUMg!#NLof9pGcx}!Z@L`YT$004;CSX(+D zROG?#72rEK6^$%k9TYIu$`k7nb_I(Mj6ea*kYSfmN;a6lt0-qwATm0<4`l=Z@NsM` z&0M3VmI)5%V{Y;Zh!D&qRPGizUCy;d4tR}wpz!)vOXWG_sJ~HkotBoo6{zMv@H6j~ zrA^!OpYq$aMPJuaglUHhCTgdSlnFYMPmC~#7uP4&UIq3)n#IhQ>VUd zr-o>)&sNnDD*`9Cj(>QMhiCTaJTN?~xdrBVA-RYhkBtr5O(Hc#AruxR?HsbiRg`B; znp2VJ{gNB$g(Au~DXGedI;a9bd{5wyRwupc|B3(`Z<^8ojE5~c^`hTbT~zmlO@L5~xH`OJab0%iheID~I*!qR%W)8H3g zU=q+&z#IVivYhh3wOf2ax%^TTxc>0n53)Zm1-Md_c!AlMym6eJ56$TizvQ*Sjlt&r zKg8~46#Qm9&*WNJnBQi$iAf3%f}-qr7Ax4o7iRY;YsKn&?Zp?^pu!&J%?e zq81D;kNMiIfJclJrYQY6Z*GHa(#Z6eCdLW|@3$^cORp`VRin*qCu-6=SNEr2b-1&; zu(4iu9?c?eKyu4ebux1{a!+je4he~)oNAEh1Dy-sshtnQ$7!%&mRG*r{j>(R&pcsk zjUSvVYf?T>b+SgRl-p+fmJU2`Ff9CI`lKw(;D$so`ng!>*71z1ojgBb9zse191uK! zv|EC8|J=*$8*dpJV+v^jUuPXTM7JR^!szgE(|=u?o`u!O0N&C}c_|e@%JwS8ah~0R_|W;+3fv@^-r36euCjDswp)PZ**{ys~U7CTq_DnTIpUs*450wzFvY{y#N=e;Mo z|G);Xejg(T)#i!PVaj?==DPvSi8qp;CAH})7)<}U2QJeq6os-_b?7*Xke0r_`n%%2 zld{(0<)+Ybl0*(nI37txTWJJ~^I%pnE6BAqMx9_l$P8TfvRk#n$b3rcOkmycql zJb1qh3;sm%gWQ2c|6=;DSpQllU?W`FoC3U~cABh2;D!i$B>+=ix`!N)$ykpUO&@rI zF`{g#TkGvc(4kyChxnraX|zRML6{3xdca3M<66~2iVVKM$qLLZ?q^a{7;50jK;pc zo!lqG#H{@X{By@{lkhL&8Ljz5jcb;P2E1$nQD7-wBk-+g{E4&m5*u0{%u zqM0yo=50Jnc{w-zi%r6)4F-^Y7qx<0Hcp62Ft4bx;bTue&|%dp92% zL*#6I5*5yf?KWjc8W188Gcuh@QaT0BwP4!|9VP~Br<3<@EX8m#NNm0F)ltJLDmE;t u-5wh$3!OZJKMb6DEUXHFXGnk`uuwM`C767o? z-qBLGct~AD*?aQz2zQ_42EF9c1>~AO_{r3reP`!iP{^s9_EsYilAuz@d2oTLg2uj4 zQkME~@$@-b!SqKXjN4#FWpwV)Nux@w&}~S94VbZFs4_}JP;E-%*@=^v{q|iS;60Y9 zwVPNTv#|xrL0HLqPqJRi+FoCBYwFHhW9C>c4QA0F4ik8N1;yvLK4oRU=l!J}Mcr+D z6`k|qYtylMCVjXMOO$ixDIPf37>=&GM#kP#Kg2z#*R%V%cB`=tkI;&XPB(e0?cqw@ zAR3_OV&sYxISzo4j!}eJ1W?DAxtjRo*oHeDaMGGt)FEO1N-8&y%nHay z->gC-ZiK58&?B>t?s5mPineJs;~SD_G#W16kw5O?He769Et;doe8J@!+;*-x*pr-v zO}pPO0jaiwKsb(Eb!DS%B*=c^uPrgw|02Vc2#{~Cm)|unnI=Z+wV}r%WK*q~9xD+_ z%oaQ2ct833q5uyNF#S<#B)4SSTi&2Okk5LS6(YK?#)d9HM32j|TS=n;XnVY?F)p;4 zsqC!9I2OS>HAyn^MZHd{{2VgdD}^{uIN00j%#>{l+A?w+efle7ng81gHmk@dUoPBh z6`o|`Rk~(j6|5cz;Jk1Rekk&G*FDjx4}sI zQ3fbynKjEa=fYycAB6+xnCXw>f9VP&l+!~!TU&e;3iObPBZ5JLvjq$>3GeUS(^Csx zuYzEI|}#}n8u?B2UE*V4dn@A5`$pVc@43-g@zq~4HS*n?=_KrPIz>GC?mdW;*NnPCE$>x128 zyq$5PfS(bQ$V@#1tRE>IIN_5TT3+dW$IA z>VMYM)ch;~^aNf(9B~K;3wN$ljMS)LkWR+eJ_$F-_A>Hyv<)m9ZDeA7E#f|`Xl@NI zDB{6%m!r;(1d|NqDPhaE^lCK2D9&46S}XG^Bf{3+GfW0is2tWx@3P{FALq3xRCI7PdH86Y4X>30eR!Qa zw0GheN)Bx(@d9;VZ?x(8EMDmUdEpQTpltEsgMGu=RP)t$ZT)mu*2}noluZp<@1plxy^*@$xI-6}qZoA2sDP~t$<@VYYv27MbLc?r87Kxw{}I1PDm zkVu|jQ|6LCw^{p>t`wa+D(EFCw`k%oFfn$)J2iV1r5+0c8#AmPf$@w@6vT-4ek3+>;W> zhMfUQIs@@1fBvA)@BI1G3&(K!3s1+_7i(BNy_Q$sjK@l-_x`Gq6n~EJ*Z0}kYhPNK z5N&U7?=80LM2yk5>TZ&3RHSfDyJ6n|VwAV@CaHz#;tAwt&!GU*V43&WQ*=CQ1Z#jV zMHTAK%+5x@KpQ$fM;yGD&Bp?Y4;~Y17TJuKe8H3RJfrN|^7SpM`=z8z3MnP8&&IHF zWoP}1P+3>M#JT$-&GC@E+3w17^D{zmJ*gvnaLGrTfv~<_$DL=q z7qsR;NLBo2hG{u6Z5|;PS5q6UTT3*MbsD7#>uMp*>0R-0aa~{_g_3jXNLWTuF>$^Y z6}aUN9e4L5Vr=m6@+s9Jo1{-+860;!YFC?D=BO-OBoU&R(ao2L zkW=C#x)=x^PH451?}Sn#P^}?5yHzZj zGoNVH&kr+h`;p&Uc|612=nwGK*i$lYpv8?gw>kVr-#*SQ@IvUW?z^8;Kg2hmbauY~J#7=BiC~i` zQ6U3E+k9eWW~7@84K8sMNM`J-FLq}UDC&k#$Rq# zTsWSfb$I$m90G!ZWPGe2vV+3hp`&AvU<$e9I;LLJh^@o0g)osB&cI^$y5(Yn6NJ+PstGQ};K=rU&ocu&gFrT4`@3agLS`7Y6>WS*y yd_n|zH>_yvO~aK}n?L`(zkTQD>hKXGKVay8p3z;lWdC>@2kzW9(!y#uME@JzVvHC7 literal 0 HcmV?d00001 diff --git a/snakes/1/la03.png b/snakes/1/la03.png new file mode 100644 index 0000000000000000000000000000000000000000..a54f5c39a81b721546bef3d07fbe3601056fbfce GIT binary patch literal 4277 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la04.png b/snakes/1/la04.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb752a73623467f8d62d1b7d34c557b47c04beb GIT binary patch literal 5379 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la11.png b/snakes/1/la11.png new file mode 100644 index 0000000000000000000000000000000000000000..02e53404443106af1bbf59f56be519f2386334d3 GIT binary patch literal 3163 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la12.png b/snakes/1/la12.png new file mode 100644 index 0000000000000000000000000000000000000000..a86533ef5ab8b9ff25393273b6ab174aba4542ba GIT binary patch literal 20170 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 SrFb*|0000C1hX_F}fjgB@jInWfTVY12ttZ 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 WC9dz@0Du03pd_yav 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la21.png b/snakes/1/la21.png new file mode 100644 index 0000000000000000000000000000000000000000..389ea8e93b9cd741501fff6ff833b59ab7027028 GIT binary patch literal 3874 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la22.png b/snakes/1/la22.png new file mode 100644 index 0000000000000000000000000000000000000000..458eecce136b5af9bf6f91af0bb17743a390b85b GIT binary patch literal 31144 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 wV&oKF-+;0u2n6Cp@j`Y@)C$~_nmiEY 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 literal 0 HcmV?d00001 diff --git a/snakes/1/la24.png b/snakes/1/la24.png new file mode 100644 index 0000000000000000000000000000000000000000..33c1d35ff45311cae0bb72961cc8002ae1f4c8d1 GIT binary patch literal 66981 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