echo $id; ?> )}); $('#word'+id+'_value_pron' ).keypress(function(e){if (e.which == 13)dict.word_add_pron(<?php echo $id; ?> )}); $('#word'+id+'_value_templ').keypress(function(e){if (e.which == 13)dict.word_run_templ(<?php echo $id; ?> )}); var names = <?php global $mysqli; $stmt = $mysqli->prepare("\n\t\t\t\t\t\t\t\t\tSELECT word_name FROM words\n\t\t\t\t\t\t\t\t\tWHERE word_id in (\n\t\t\t\t\t\t\t\t\t\tSELECT word_id FROM attributes\n\t\t\t\t\t\t\t\t\t\tWHERE attr_tag = 'template' AND attr_value = 'true'\n\t\t\t\t\t\t\t\t\t) AND word_spart = (?)\n\t\t\t\t\t\t\t\t"); $res = []; sql_getmany($stmt, $res, ["s", $w->speechpart()]); echo json_encode($res); ?> ; var lock=false; var last = [$('#word'+id+'_value_templ').val()]; $('#word'+id+'_value_templ').autocomplete({ lookup: names, }); var id2vals = <?php echo "{" . $id . ":[" . $id2val . "]}"; ?> ; var dependencies = <?php echo "{" . $id . ":{" . $dependency . "}}"; ?>
<table style="border-spacing: 8px 2px;"> <tr><th>Select</th> <?php if ($master) { echo "<th>UserName</th>"; } ?> <th>Name</th><th>Score/Grade</th><th>Date</th></tr> <?php global $sql_stmts; $quizzes = []; $quizzes_data = []; if ($master) { sql_getmany(sql_stmt("all quizzes"), $quizzes, []); } else { sql_getmany(sql_stmt("user_id->quiz_id reversed"), $quizzes, ["i", $suid]); } foreach ($quizzes as &$q) { $q = QUIZ($q); $quizzes_data[$q->id()] = $q->completed(); ?> <tr> <td><input name="quizzes" type="radio" value="<?php echo $q->id(); ?> "></td> <?php if ($master) { echo "<td>" . $q->username() . "</td>"; } ?>
function all($order_by = NULL) { global $mysqli; if (count($this->args) === 1) { $this->args = []; } if ($order_by !== NULL) { $this->stmt .= " ORDER BY word_{$order_by}"; } if ($this->limit_values !== NULL) { list($start, $limit) = $this->limit_values; $this->stmt .= " LIMIT {$start}, {$limit}"; } $value = $this->stmt; $this->stmt = $mysqli->prepare($this->stmt); if (!$this->stmt) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; echo "\nStatement was: " . var_export($value, 1); return; } #error_log($value); sql_getmany($this->stmt, $this->map, $this->args); $this->stmt->close(); #var_dump($this->map, $this->args); #echo "\nStatement was: " . var_export($value, 1); if ($this->map) { foreach ($this->map as &$w) { $w = WORD($this->db, $w); } } return $this->map; }
function attrs() { global $sql_stmts; if ($this->issql and $this->_id !== NULL) { $added = []; # id's returned sql_getmany(sql_stmt("word_id->attr_tag"), $added, ["i", $this->_id]); foreach ($added as $attr) { $cont = FALSE; foreach ($this->_attrs as $_attr) { if (ISPATH($_attr) ? $_attr->tag() == $attr : $_attr == $attr) { $cont = TRUE; break; } } if (!$cont) { $this->_attrs[] = ATTR($this, $attr); } } } return $this->_attrs; }
} foreach ($res as &$r) { $r = ["correct" => $r->word()->id() === $pick_db["word"]->id(), "value" => ((string) $r->path() ? "(" . $r->path() . ") " : "") . str_replace("\n", ", ", $r->value())]; } return $res; }, "choices0-tooltip" => "Pick correct definition"]]], "random-definitions-stage28-29-fr" => ["name" => "Stage 28–29 Vocabulary (FR)", "category" => "Vocabulary", "lang" => "la", "options" => [["help" => "Choose a correct definition for the given word", "selections" => ["word" => function ($_, $db, $path) { $s = $db->searcher(); $s->stmt .= "\n\t\t\t\t\t\tWHERE word_id IN (\n\t\t\t\t\t\t\tSELECT word_id FROM definitions\n\t\t\t\t\t\t\tWHERE def_lang = 'en'\n\t\t\t\t\t\t\tAND def_type IS NULL\n\t\t\t\t\t\t)\n\t\t\t\t\t\tAND word_lang = 'la'\n\t\t\t\t\t\tAND word_id NOT IN (\n\t\t\t\t\t\t\tSELECT word_id FROM attributes\n\t\t\t\t\t\t\tWHERE attr_tag = 'template' OR attr_tag = 'hidden'\n\t\t\t\t\t\t)\n\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\tSELECT attr_value FROM attributes\n\t\t\t\t\t\t\tWHERE word_id = words.word_id\n\t\t\t\t\t\t\tAND attr_tag = 'clc-stage' \n\t\t\t\t\t\t) IN (28,29)"; $s->args = []; return $s->rand(); }], "sentence" => [$OP_LQUOTE, function ($pick_db) { return format_word($pick_db["word"]->name()); }, $OP_RQUOTE, $OP_COLON, $OP_USER_INPUT], "answer0-language" => "en", "answer0" => function ($pick_db, $db) { global $mysqli; $query = $mysqli->prepare("\n\t\t\t\t\tSELECT DISTINCT def_id FROM definitions\n\t\t\t\t\tWHERE def_lang = 'en'\n\t\t\t\t\tAND def_type IS NULL\n\t\t\t\t\tAND word_id = (?)\n\t\t\t\t"); $res = NULL; sql_getmany($query, $res, ["i", $pick_db["word"]->id()]); $query->close(); if (!$res) { return NULL; } $ret = []; $ret2 = []; foreach ($res as $r) { $ret = array_merge($ret, explode("\n", definition(defaultDB(), $r)->value())); } foreach ($ret as $r) { $ret2 = array_merge($ret2, array_map("trim", explode(",", $r))); } return ["correct" => explode(",", $ret[0]), "acceptable" => $ret2]; }, "answer0-tooltip" => "Type correct definition"]]], "009" => ["name" => "Synonyms", "lang" => "la", "category" => "Vocabulary", "n_questions" => "auto", "options" => [make_matching(["cædō" => "interficiō", "exeō" => "discēdō", "pulsō" => "verberō", "volō" => "cupiō"]), make_matching(["turba" => "multitūdō", "mīles" => "arma", "imperātor" => "rēx"])]]]);
} $db = defaultDB(); $s = $db->searcher(); $s->stmt .= "\n\tWHERE word_id IN (\n\t\tSELECT word_id FROM definitions\n\t\tWHERE def_lang = 'en'\n\t\tAND def_type IS NULL\n\t)\n\tAND word_lang = '{$la}'\n\tAND word_id NOT IN (\n\t\tSELECT word_id FROM attributes\n\t\tWHERE attr_tag = 'template' OR attr_tag = 'hidden'\n\t)\n\tORDER BY RAND() LIMIT 1"; $s->args = []; $word = $s->rand(); $query = $mysqli->prepare("\n\tSELECT DISTINCT def_id FROM definitions\n\tWHERE def_lang = 'en'\n\tAND def_type IS NULL\n\tAND word_id = (?)\n\tORDER BY rand()\n\tLIMIT 1\n"); $res0 = NULL; sql_getmany($query, $res0, ["i", $word->id()]); $query->close(); if (!$res0) { exit('An error occurred'); } $query = $mysqli->prepare("\n\tSELECT DISTINCT def_id FROM definitions\n\tWHERE def_lang = 'en'\n\tAND def_type IS NULL\n\tAND word_id != (?)\n\tAND def_value != ''\n\tAND def_value != (?)\n\tAND word_id in (\n\t\tSELECT word_id FROM words WHERE word_lang = '{$la}'\n\t)\n\tAND word_id NOT IN (\n\t\tSELECT word_id FROM attributes\n\t\tWHERE attr_tag = 'template' OR attr_tag = 'hidden'\n\t)\n\tORDER BY RAND() LIMIT 4\n"); $res1 = NULL; sql_getmany($query, $res1, ["is", $word->id(), definition($db, $res0[0])->value()]); $query->close(); if (!$res1) { exit('An error occurred'); } #$res1 = choose_n_unique($res1, 4); $res = array_merge($res0, $res1); $options = []; foreach ($res as &$r) { $options[] = str_replace("\n", ", ", definition($db, $r)->value()); } $correct = $options[0]; shuffle($options); $indices = array_keys($options); shuffle($indices); $correct_index = array_values(array_filter($indices, function ($i) use($options, $correct) {
function which3($lang, $spart, $key, $N = NULL, $given = NULL, $rand = NULL, $name = NULL) { global $OP_MULTIPLE_CHOICE; global $OP_PARAGRAPH; global $OP_LPAREN; global $OP_RPAREN; global $OP_LQUOTE; global $OP_RQUOTE; $selections = []; $path = []; $mgr = defaultDB()->get_mgr($lang, $spart); $given = PATH($mgr, $given); $_gender = null; if ($N === NULL) { $N = count($mgr->key2values[$key]); } $selections["answers"] = PICK($N, $key, safe_get($key, $rand))->l($lang); $recurse = function ($mgr) use(&$_gender, $spart, $given, &$recurse, &$path, $rand, &$selections, $lang) { foreach ($mgr->simple_keys as $k) { if ($given->key_exists($k)) { $path[] = $given->key_value($k); } else { if ($k === "gender" and $spart === "verb") { $_gender = make_pick(PICK($k, safe_get($k, $rand))->l($lang), $k); } else { $path[] = make_pick(PICK($k, safe_get($k, $rand))->l($lang), $k); } } } foreach ($mgr->recursive_keys as $k) { if ($given->key_exists($k)) { $path[] = $given->key_value($k); $recurse($mgr->level[$k][$given->key_value($k)]); } } }; $recurse($mgr); $answers = []; $selections[$key] = function ($pick_db) { error_log(var_export($pick_db, 1)); return $pick_db["answers"][0]; }; for ($v = 0; $v < $N; $v++) { $answers[] = ["correct" => function ($pick_db) use($v) { return safe_get($pick_db["answers"][$v], $pick_db); }, "value" => function ($pick_db) use($v) { return $pick_db["answers"][$v]; }]; } $ret = ["help" => "What {$key} is this word?", "selections" => $selections, "sentence" => [["lang" => $lang, "speechpart" => $spart, "path" => $path, "attr" => ["!template" => NULL, "!hidden" => NULL], "store_word" => "word", "store" => "result"], function (&$pick_db) use($key) { global $mysqli; $query = $mysqli->prepare("\n\t\t\t\t\tSELECT form_tag FROM forms\n\t\t\t\t\tWHERE word_id = (?)\n\t\t\t\t\tAND form_value = (?)\n\t\t\t\t"); $res = NULL; sql_getmany($query, $res, ["is", $pick_db["word"]->id(), $pick_db["result"]]); $query->close(); foreach ($res as $tag) { $p = PATH($pick_db["word"], $tag); $v = $p->key_value($key); $pick_db[$v] = TRUE; } return FALSE; // No word }, $OP_PARAGRAPH, $OP_MULTIPLE_CHOICE], "choices0" => $answers, "choices0-tooltip" => "What {$key}?", "choices0-language" => "en"]; if ($name !== null) { $ret["sentence"][0]["name"] = $name; } if ($_gender !== null) { $ret["sentence"][0]["verb-gender"] = $_gender; } return $ret; }
$stmt->close(); $stmt = $mysqli->prepare("CREATE TABLE {$table2} like {$table}"); sql_exec($stmt, []); $stmt->close(); $stmt = $mysqli->prepare("INSERT {$table2} SELECT * FROM {$table}"); sql_exec($stmt, []); $stmt->close(); } $stmt = $mysqli->prepare("SELECT MAX({$column}) FROM {$table2}"); sql_getone($stmt, $max_id, []); $stmt->close(); $stmt = $mysqli->prepare("SELECT {$column} FROM {$table2} ORDER BY {$order}"); sql_getmany($stmt, $ids, []); $stmt->close(); $stmt = $mysqli->prepare("SELECT word_name FROM {$table2} ORDER BY {$order}"); sql_getmany($stmt, $names, []); $stmt->close(); $safe = $max_id + 1; if ($safe < 1000) { $safe = 1000; } echo $max_id . "," . $safe . "<br>"; foreach ($names as $id => $name) { //if($e)echo ($id+1)." “".$name."”<br>"; } if ($e) { echo "<br>"; } $last = 0; function move($old, $new, $table2, $column) {
if ($forms) { //$searcher = $searcher->form_includes($forms); $op = " AND ("; foreach ($forms as $f) { $stmt .= $op . "form_value LIKE CONCAT('%',?,'%')"; $searcher->args[0] .= "s"; $searcher->args[] .= $f; $op = " OR "; } if ($op === " OR ") { $stmt .= ")"; } } $value = $stmt; error_log($value); $stmt = $mysqli->prepare($stmt); if (!$stmt) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; echo "\nStatement was: " . var_export($value, 1); } $_start = microtime(true); $list = sql_getmany($stmt, $searcher->map, $searcher->args); error_log("-- Took " . (microtime(true) - $_start) . "s"); $stmt->close(); } else { $list = []; } $res = vec_norm(array_map(function ($e) { return ["data" => $e, "value" => $e, "display" => format_word($e)]; }, $list)); echo json_encode($res);
$_ = ""; foreach (explode(",", $_GET["spart"]) as $l) { if (!preg_match("/^[a-zA-Z0-9]+\$/", $l)) { continue; } $stmt .= "{$_} word_spart = '{$l}'"; $_ = " OR "; } $stmt .= ")"; $op = " AND "; } if ($op === " AND ") { $stmt .= ")"; } else { $op = " WHERE "; } if ($attr_t) { $stmt .= "{$op} attr_tag = '" . explode("=", $attr)[0] . "'"; $stmt .= "AND attr_value LIKE '%" . explode("=", $attr)[1] . "%'"; } elseif ($attr) { $stmt .= "{$op} attr_tag LIKE '%" . explode("=", $attr)[0] . "%'"; } $stmt .= " {$group} ORDER BY attr_tag, attr_value"; //echo $stmt; $stmt = $mysqli->prepare($stmt); if (!$stmt) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; } $res = []; sql_getmany($stmt, $res, []); echo json_encode(array_values($res));
if ($table2 != $table) { $stmt = $mysqli->prepare("DROP TABLE IF EXISTS {$table2}"); sql_exec($stmt, []); $stmt->close(); $stmt = $mysqli->prepare("CREATE TABLE {$table2} like {$table}"); sql_exec($stmt, []); $stmt->close(); $stmt = $mysqli->prepare("INSERT {$table2} SELECT * FROM {$table}"); sql_exec($stmt, []); $stmt->close(); } $stmt = $mysqli->prepare("SELECT MAX({$column}) FROM {$table2}"); sql_getone($stmt, $max_id, []); $stmt->close(); $stmt = $mysqli->prepare("SELECT {$column} FROM {$table2}"); sql_getmany($stmt, $_ids, []); $stmt->close(); $safe = $max_id + 1; $ids = []; foreach ($_ids as $id) { $ids[$id] = $id; } foreach ($ids as $id) { if ($e) { echo "{$id} "; } } if ($e) { echo "<br>"; } $last = 0;