Exemplo n.º 1
0
 function merge_selections($selections)
 {
     $this->tense = safe_get("selected-mood-tense", $selections);
     if (!$this->tense) {
         $this->tense = "person-3";
     }
     if ($this->tense === "random") {
         $this->tense = PICK(self::$tenses);
     }
 }
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
    $defs = array_map("trim", $defs);
    if ($pick_db["obj_number"] === "plural") {
        $defs = array_map("pluralize", $defs);
        $defs = flatten($defs);
        $art = "[the|some]";
    } else {
        $art = "[a[n]|the]";
    }
    if (!$def_expr) {
        $def_expr = make_expr($defs);
    }
    $correct = [capitalize(implode(" ", [$pron[0], $be[0], "in (the)", $defs[0]]))];
    $expr = "{*" . implode("} {", array_map("make_expr", [$pron, $be])) . "} {(in|at) " . make_expr($art) . " {$def_expr}}";
    error_log($expr);
    return ["correct" => $correct, "expr" => $expr];
}, "answer0-tooltip" => "English translation", "answer0-language" => "en"], ["help" => "Translate this into English.", "selections" => ["number" => PICK("number")->l("la"), "gender" => PICK("gender")->l("la"), "word" => NULL], "sentence" => [["spart" => "verb", "language" => "la", "name" => "sum", "path" => ["indicative/present/active/person-3", get_pick("number")]], ["spart" => "noun", "language" => "la", "attr" => $df_exclude, "store_word" => "word", "path" => ["nominative", PICK("gender"), get_pick("number")]], $OP_COLON, $OP_PARAGRAPH, $OP_USER_INPUT], "answer0" => function ($pick_db, $db) {
    $number = $pick_db["number"];
    $gender = $pick_db["gender"];
    $word = $pick_db["word"];
    $pron = ["singular" => ["there", "it", "he", "she"], "plural" => ["there", "they"]];
    $pron = $pron[$number];
    $be = ["singular" => ["is"], "plural" => ["are"]];
    $be = $be[$number];
    $path = PATH($word, "nominative/{$gender}/{$number}");
    $defs = [];
    $def_expr = NULL;
    foreach ($word->definitions() as $def) {
        if ($def->lang() !== "en") {
            continue;
        }
        $_path = $def->path();
Exemplo n.º 4
0
        return "subjunctive";
    }
    return "indicative";
}], "choices0-tooltip" => "Which mood?", "choices0-language" => "en"]]], "subjunctive-infinitives" => ["name" => "Subjunctive practice", "category" => "Grammar", "lang" => "la", "stage" => 24, "options" => function () {
    global $OP_USER_INPUT;
    return [["help" => function (&$pick_db, $db) {
        $word = $pick_db["word"];
        $pick_db["word"]->read_paths();
        $path = $pick_db["path"] = PATH($word);
        foreach ($pick_db as $k => $v) {
            if ($k === "word" or $k === "path") {
                continue;
            }
            #error_log("$k = $v".var_export($v,true));
            $path->add2($v);
        }
        #error_log(var_export($path->get(),1));
        $pick_db["form"] = $path->get();
        $path = implode(" ", array_map("format_path", array_reverse(explode("/", (string) $path))));
        $word_name = display_word_name($word);
        return "What is the {$path} for {$word_name}.";
    }, "selections" => ["word" => function ($_, $db, $path) {
        $s = $db->searcher()->spart("verb")->only_without_attr(ATTR("irregular"))->only_without_attr(ATTR("template"));
        $s->stmt .= " AND EXISTS (SELECT 1 FROM forms WHERE forms.word_id = words.word_id AND form_tag != '' AND form_value != '') AND NOT EXISTS (SELECT 1 FROM attributes WHERE attr_tag = 'conjugation' AND attr_value like '%deponent%' AND word_id = words.word_id)";
        return $s->rand();
    }, "tense" => PICK(["imperfect", "pluperfect"]), "mood" => PICK(["indicative", "indicative", "indicative", "subjunctive", "subjunctive", "subjunctive", "subjunctive", "subjunctive"]), "number" => PICK(["singular", "plural"]), "person" => "person-3", "voice" => "active"], "sentence" => [$OP_USER_INPUT], "answer0" => function ($pick_db) {
        return array_map("format_word", explode("\n", $pick_db["form"]));
    }, "answer0-tooltip" => "Enter form"], make_chart(RWORD2("la", "verb"), null, ["participle", "infinitive", "supine", "imperative", "passive", "person-1", "person-2", "present", "perfect", "future", "future-perfect"])];
}], "013" => ["name" => "Subjunctive matching", "lang" => "la", "category" => "Grammar", "n_questions" => 1, "options" => function () {
    return [make_matching(["Pluperfect Subjunctive" => "portāvisset", "Pluperfect Indicative" => "discēderat", "Imperfect Indicative" => "veniēbat", "Imperfect Subjunctive" => "prōmitteret"])];
}]]);