Пример #1
0
$hasInvariableModel = false;
$dbResult = db_execute("select canonical, modelNumber, count(*) as c " . "from Lexem " . "join LexemModel on lexemId = Lexem.id " . "join ModelType on modelType = code " . "where modelType != 'T' " . "and reverse like '{$reverseSuffix}%' " . "group by canonical, modelNumber " . "order by c desc", PDO::FETCH_ASSOC);
foreach ($dbResult as $row) {
    $modelType = $row['canonical'];
    $modelNumber = $row['modelNumber'];
    $count = $row['c'];
    if (!count($models) || $count / $numLabeled >= 0.05) {
        if ($modelType == 'V' || $modelType == 'VT') {
            $m = Model::factory('FlexModel')->where('modelType', 'V')->where('number', $modelNumber)->find_one();
            $models[] = $m;
            $models[] = FlexModel::create('VT', $modelNumber, '', $m->exponent);
        } else {
            if ($modelType == 'A' || $modelType == 'MF') {
                $m = Model::factory('FlexModel')->where('modelType', 'A')->where('number', $modelNumber)->find_one();
                $models[] = $m;
                $models[] = FlexModel::create('MF', $modelNumber, '', $m->exponent);
            } else {
                $models[] = Model::factory('FlexModel')->where('modelType', $modelType)->where('number', $modelNumber)->find_one();
            }
        }
        $hasInvariableModel = $hasInvariableModel || $modelType == 'I';
    }
}
// Always add the Invariable model
if (!$hasInvariableModel) {
    $models[] = Model::factory('FlexModel')->where('modelType', 'I')->where('number', '1')->find_one();
}
$modelTypes = array();
foreach ($models as $m) {
    $modelTypes[] = ModelType::get_by_code($m->modelType);
}
Пример #2
0
$lexemModelIds = util_getRequestParameter('lexemModelId');
$cloneButton = util_getRequestParameter('cloneButton');
$errorMessages = array();
if ($cloneButton) {
    // Disallow duplicate model numbers
    $m = FlexModel::loadCanonicalByTypeNumber($modelType, $newModelNumber);
    if ($m) {
        $errorMessages[] = "Modelul {$modelType}{$newModelNumber} există deja.";
    }
    if (!$newModelNumber) {
        $errorMessages[] = "Numărul modelului nu poate fi vid.";
    }
    if (!count($errorMessages)) {
        // Clone the model
        $model = Model::factory('FlexModel')->where('modelType', $modelType)->where('number', $modelNumber)->find_one();
        $cloneModel = FlexModel::create($modelType, $newModelNumber, "Clonat după {$modelType}{$modelNumber}", $model->exponent);
        $cloneModel->save();
        // Clone the model descriptions
        $mds = Model::factory('ModelDescription')->where('modelId', $model->id)->order_by_asc('inflectionId')->order_by_asc('variant')->order_by_asc('applOrder')->find_many();
        foreach ($mds as $md) {
            $newMd = Model::factory('ModelDescription')->create();
            $newMd->copyFrom($md);
            $newMd->modelId = $cloneModel->id;
            $newMd->save();
        }
        // Clone the participle model
        if ($modelType == 'V') {
            $pm = ParticipleModel::loadByVerbModel($modelNumber);
            $clonePm = Model::factory('ParticipleModel')->create();
            $clonePm->verbModel = $newModelNumber;
            $clonePm->adjectiveModel = $pm->adjectiveModel;