$sourceClause = $sourceId ? "and sourceId = {$sourceId}" : '';
$count = Model::factory('Definition')->where_raw("status = 0 {$sourceClause} and binary internalRep like '%{$search}%'")->count();
if ($count > $MAX_AFFECTED) {
    if ($realRun) {
        FlashMessage::add("{$count} definiții se potrivesc, numai {$MAX_AFFECTED} au fost modificate.", 'info');
    } else {
        FlashMessage::add("{$count} definiții se potrivesc, maxim {$MAX_AFFECTED} vor fi modificate.");
    }
}
$defs = Model::factory('Definition')->where_raw("status = 0 {$sourceClause} and binary internalRep like '%{$search}%'")->order_by_asc('id')->limit($MAX_AFFECTED)->find_many();
$searchResults = SearchResult::mapDefinitionArray($defs);
foreach ($defs as $def) {
    $def->internalRep = str_replace($search, $replace, $def->internalRep);
    $ambiguousMatches = array();
    $def->internalRep = AdminStringUtil::internalizeDefinition($def->internalRep, $def->sourceId, $ambiguousMatches);
    $def->htmlRep = AdminStringUtil::htmlize($def->internalRep, $def->sourceId);
    // Complete or un-complete the abbreviation review
    if (!count($ambiguousMatches) && $def->abbrevReview == ABBREV_AMBIGUOUS) {
        $def->abbrevReview = ABBREV_REVIEW_COMPLETE;
    } else {
        if (count($ambiguousMatches) && $def->abbrevReview == ABBREV_REVIEW_COMPLETE) {
            $def->abbrevReview = ABBREV_AMBIGUOUS;
        }
    }
    if ($realRun) {
        $def->save();
    }
}
if ($realRun) {
    util_redirect("index.php");
}
$modified = 0;
$ambiguousDefinitions = 0;
$ambiguities = 0;
foreach ($dbResult as $row) {
    $def = Definition::get_by_id($row['id']);
    $ambiguousMatches = array();
    // Remove existing hash signs
    $newRep = str_replace('#', '', $def->internalRep);
    $newRep = AdminStringUtil::internalizeDefinition($newRep, $def->sourceId, $ambiguousMatches);
    if (count($ambiguousMatches) || $newRep !== $def->internalRep) {
        print "{$def->id} {$newRep}\n";
    }
    if ($newRep !== $def->internalRep) {
        $modified++;
        $def->internalRep = $newRep;
        $def->htmlRep = AdminStringUtil::htmlize($newRep, $def->sourceId);
    }
    if (count($ambiguousMatches)) {
        $def->abbrevReview = ABBREV_AMBIGUOUS;
        $ambiguousDefinitions++;
        $ambiguities += count($ambiguousMatches);
        print "  AMBIGUOUS:";
        foreach ($ambiguousMatches as $match) {
            print " [{$match['abbrev']}]@{$match['position']}";
        }
        print "\n";
    } else {
        $def->abbrevReview = ABBREV_REVIEW_COMPLETE;
    }
    $def->save();
    $i++;
     }
 }
 if ($errorMessage) {
     smarty_assign('lexemNames', $lexemNames);
     smarty_assign('sourceId', $sourceId);
     smarty_assign('def', $def);
     FlashMessage::add($errorMessage);
     smarty_assign('previewDivContent', AdminStringUtil::htmlize($def, $sourceId));
 } else {
     $definition = Model::factory('Definition')->create();
     $definition->displayed = 0;
     $definition->status = ST_PENDING;
     $definition->userId = session_getUserId();
     $definition->sourceId = $sourceId;
     $definition->internalRep = $def;
     $definition->htmlRep = AdminStringUtil::htmlize($def, $sourceId);
     $definition->lexicon = AdminStringUtil::extractLexicon($definition);
     $definition->abbrevReview = count($ambiguousMatches) ? ABBREV_AMBIGUOUS : ABBREV_REVIEW_COMPLETE;
     $definition->save();
     log_userLog("Added definition {$definition->id} ({$definition->lexicon})");
     $ldms = array();
     foreach ($lexemNames as $lexemName) {
         $lexemName = addslashes(AdminStringUtil::formatLexem($lexemName));
         if ($lexemName) {
             $matches = Lexem::loadByExtendedName($lexemName);
             if (count($matches) >= 1) {
                 foreach ($matches as $match) {
                     LexemDefinitionMap::associate($match->id, $definition->id);
                     log_userLog("Associating with lexem {$match->id} ({$match->form})");
                 }
             } else {
Exemple #4
0
function assertAbbreviations($typed, $internal, $html, $sourceId)
{
    assertEquals($internal, AdminStringUtil::markAbbreviations($typed, $sourceId));
    assertEquals($html, AdminStringUtil::htmlize($internal, $sourceId));
}
// any string that won't occur naturally in a definition
$def = null;
$ids = db_getArray(sprintf('select id from Definition where status != %d and abbrevReview = %d', ST_DELETED, ABBREV_AMBIGUOUS));
if (count($ids)) {
    $defId = $ids[array_rand($ids, 1)];
    $def = Definition::get_by_id($defId);
    // Collect the positions of ambiguous abbreviations
    $matches = array();
    AdminStringUtil::markAbbreviations($def->internalRep, $def->sourceId, $matches);
    usort($matches, 'positionCmp');
    // Inject our marker around each ambiguity and htmlize the definition
    $s = $def->internalRep;
    foreach ($matches as $m) {
        $s = substr($s, 0, $m['position']) . " {$MARKER} " . substr($s, $m['position'], $m['length']) . " {$MARKER} " . substr($s, $m['position'] + $m['length']);
    }
    $s = AdminStringUtil::htmlize($s, $def->sourceId);
    // Split the definition into n ambiguities and n+1 bits of text between the ambiguities
    $text = array();
    $ambiguities = array();
    while (($p = strpos($s, $MARKER)) !== false) {
        $chunk = trim(substr($s, 0, $p));
        $s = trim(substr($s, $p + strlen($MARKER)));
        if (count($text) == count($ambiguities)) {
            $text[] = $chunk;
        } else {
            $ambiguities[] = $chunk;
        }
    }
    $text[] = trim($s);
    SmartyWrap::assign('text', $text);
    SmartyWrap::assign('ambiguities', $ambiguities);
<?php

/* Htmlizes the definition and comment, then builds the SimilarRecord */
require_once "../../phplib/util.php";
util_assertModerator(PRIV_EDIT);
util_assertNotMirror();
$definitionId = util_getRequestParameter('definitionId');
$definitionInternalRep = util_getRequestParameter('definitionInternalRep');
$commentInternalRep = util_getRequestParameter('commentInternalRep');
$sourceId = util_getRequestParameter('sourceId');
$lexemIds = util_getRequestCsv('lexemIds');
$d = Definition::get_by_id($definitionId);
$d->internalRep = AdminStringUtil::internalizeDefinition($definitionInternalRep, $sourceId);
$d->htmlRep = AdminStringUtil::htmlize($d->internalRep, $sourceId);
$d->sourceId = $sourceId;
$commentInternalRep = AdminStringUtil::internalizeDefinition($commentInternalRep, $sourceId);
$commentHtmlRep = AdminStringUtil::htmlize($commentInternalRep, $sourceId);
$sim = SimilarRecord::create($d, $lexemIds);
$data = $sim->getJsonFriendly();
$data['htmlRep'] = $d->htmlRep;
$data['commentHtmlRep'] = $commentHtmlRep;
print json_encode($data);
        } else {
            $number = 0;
        }
        $query = Model::factory('Definition')->where('sourceId', $scribanSrc->id)->where('status', 0);
        if (ctype_digit($line)) {
            $query = $query->where('id', $line);
        } else {
            if ($number) {
                $query = $query->where_raw("lexicon = '{$line}' and (internalRep rlike '^@{$number}) ' or internalRep rlike '^@\\*{$number}) ')");
            } else {
                $query = $query->where('lexicon', $line);
            }
        }
        $defs = $query->find_many();
        if (count($defs) != 1) {
            printf("Am găsit %d definiții pentru [%s]\n", count($defs), $line);
        } else {
            if (strpos(substr($defs[0]->internalRep, 0, 10), $symbol) !== false) {
                printf("Definiția pentru [%s] conține deja simbolul [%s]\n", $line, $symbol);
            } else {
                if ($defs[0]->internalRep[0] != '@') {
                    printf("Definiția pentru [%s] nu începe cu [@]\n", $line);
                } else {
                    $defs[0]->internalRep = '@' . $symbol . substr($defs[0]->internalRep, 1);
                    $defs[0]->htmlRep = AdminStringUtil::htmlize($defs[0]->internalRep, $scribanSrc->id, $errors);
                    $defs[0]->save();
                }
            }
        }
    }
}
Exemple #8
0
 static function saveTree($meanings, $lexem)
 {
     $seenMeaningIds = array();
     // Keep track of the previous meaning ID at each level. This allows us to populate the parentId field
     $meaningStack = array();
     $displayOrder = 1;
     foreach ($meanings as $tuple) {
         $m = $tuple->id ? self::get_by_id($tuple->id) : Model::factory('Meaning')->create();
         $m->parentId = $tuple->level ? $meaningStack[$tuple->level - 1] : 0;
         $m->displayOrder = $displayOrder++;
         $m->breadcrumb = $tuple->breadcrumb;
         $m->userId = session_getUserId();
         $m->lexemId = $lexem->id;
         $m->internalRep = $tuple->internalRep;
         $m->htmlRep = AdminStringUtil::htmlize($m->internalRep, 0);
         $m->internalEtymology = $tuple->internalEtymology;
         $m->htmlEtymology = AdminStringUtil::htmlize($m->internalEtymology, 0);
         $m->internalComment = $tuple->internalComment;
         $m->htmlComment = AdminStringUtil::htmlize($m->internalComment, 0);
         $m->save();
         $meaningStack[$tuple->level] = $m->id;
         $sourceIds = StringUtil::explode(',', $tuple->sourceIds);
         MeaningSource::updateList(array('meaningId' => $m->id), 'sourceId', $sourceIds);
         $meaningTagIds = StringUtil::explode(',', $tuple->meaningTagIds);
         MeaningTagMap::updateList(array('meaningId' => $m->id), 'meaningTagId', $meaningTagIds);
         foreach ($tuple->relationIds as $type => $lexemIdString) {
             if ($type) {
                 $lexemIds = StringUtil::explode(',', $lexemIdString);
                 Relation::updateList(array('meaningId' => $m->id, 'type' => $type), 'lexemId', $lexemIds);
             }
         }
         $seenMeaningIds[] = $m->id;
     }
     self::deleteNotInSet($seenMeaningIds, $lexem->id);
 }
Exemple #9
0
function handleLexemActions()
{
    $lexemId = util_getRequestParameter('lexemId');
    $lexem = Lexem::get_by_id($lexemId);
    $associateDefinitionId = util_getRequestParameter('associateDefinitionId');
    if ($associateDefinitionId) {
        LexemDefinitionMap::associate($lexem->id, $associateDefinitionId);
        util_redirect("lexemEdit.php?lexemId={$lexem->id}");
    }
    $dissociateDefinitionId = util_getRequestParameter('dissociateDefinitionId');
    if ($dissociateDefinitionId) {
        LexemDefinitionMap::dissociate($lexem->id, $dissociateDefinitionId);
        util_redirect("lexemEdit.php?lexemId={$lexem->id}");
    }
    $createDefinition = util_getRequestParameter('createDefinition');
    $miniDefTarget = util_getRequestParameter('miniDefTarget');
    if ($createDefinition) {
        $def = Model::factory('Definition')->create();
        $def->userId = session_getUserId();
        $def->sourceId = Source::get_by_shortName('Neoficial')->id;
        $def->lexicon = $lexem->formNoAccent;
        $def->internalRep = '@' . mb_strtoupper(AdminStringUtil::internalize($lexem->form, false)) . '@ v. @' . $miniDefTarget . '.@';
        $def->htmlRep = AdminStringUtil::htmlize($def->internalRep, $def->sourceId);
        $def->status = Definition::ST_ACTIVE;
        $def->save();
        LexemDefinitionMap::associate($lexem->id, $def->id);
        util_redirect("lexemEdit.php?lexemId={$lexem->id}");
    }
    $deleteLexem = util_getRequestParameter('deleteLexem');
    if ($deleteLexem) {
        $homonyms = Model::factory('Lexem')->where('formNoAccent', $lexem->formNoAccent)->where_not_equal('id', $lexem->id)->find_many();
        $lexem->delete();
        SmartyWrap::assign('lexem', $lexem);
        SmartyWrap::assign('homonyms', $homonyms);
        SmartyWrap::displayAdminPage('admin/lexemDeleted.tpl');
        exit;
    }
    $cloneLexem = util_getRequestParameter('cloneLexem');
    if ($cloneLexem) {
        $newLexem = $lexem->cloneLexem();
        log_userLog("Cloned lexem {$lexem->id} ({$lexem->form}), new id is {$newLexem->id}");
        util_redirect("lexemEdit.php?lexemId={$newLexem->id}");
    }
    $mergeLexem = util_getRequestParameter('mergeLexem');
    $mergeLexemId = util_getRequestParameter('mergeLexemId');
    if ($mergeLexem) {
        $other = Lexem::get_by_id($mergeLexemId);
        if ($lexem->form != $other->form) {
            FlashMessage::add('Nu pot unifica lexemele deoarece accentele diferă. Rezolvați diferența și încercați din nou.');
            util_redirect("lexemEdit.php?lexemId={$lexem->id}");
        }
        $defs = Definition::loadByLexemId($lexem->id);
        foreach ($defs as $def) {
            LexemDefinitionMap::associate($other->id, $def->id);
        }
        // Add lexem models from $lexem to $other if the form is the same. Exclude T-type models.
        $displayOrder = count($other->getLexemModels());
        foreach ($lexem->getLexemModels() as $lm) {
            if ($lm->modelType != 'T' && !$other->hasModel($lm->modelType, $lm->modelNumber)) {
                $lm->lexemId = $other->id;
                $lm->displayOrder = ++$displayOrder;
                $lm->save();
            }
        }
        // Add meanings from $lexem to $other and renumber their displayOrder and breadcrumb
        // displayOrders are generated sequentially regardless of level.
        // Breadcrumbs follow levels so only their first part changes.
        $counter = Model::factory('Meaning')->where('lexemId', $other->id)->count();
        $numRoots = Model::factory('Meaning')->where('lexemId', $other->id)->where('parentId', 0)->count();
        $meanings = Model::factory('Meaning')->where('lexemId', $lexem->id)->order_by_asc('displayOrder')->find_many();
        foreach ($meanings as $m) {
            $m->lexemId = $other->id;
            $m->displayOrder = ++$counter;
            $parts = explode('.', $m->breadcrumb, 2);
            $parts[0] += $numRoots;
            $m->breadcrumb = implode('.', $parts);
            $m->save();
        }
        // Add images and image tags from $lexem to $other
        $visuals = Visual::get_all_by_lexemeId($lexem->id);
        foreach ($visuals as $v) {
            $v->lexemeId = $other->id;
            $v->save();
        }
        $visualTags = VisualTag::get_all_by_lexemeId($lexem->id);
        foreach ($visualTags as $vt) {
            $vt->lexemeId = $other->id;
            $vt->save();
        }
        $lexem->delete();
        util_redirect("lexemEdit.php?lexemId={$other->id}");
    }
}
Exemple #10
0
<?php

define('FILE_NAME', __DIR__ . '/../../corectii DEXOnline.txt');
require_once __DIR__ . '/../../phplib/util.php';
util_assertModerator(PRIV_EDIT);
util_assertNotMirror();
$id = util_getRequestParameter('id');
$def = Definition::get_by_id($id);
assert($def);
$lines = file(FILE_NAME);
$lines = array_slice($lines, 1);
// First line contains the column descriptions
foreach ($lines as $line) {
    $parts = explode("\t", trim($line));
    assert(count($parts) == 4);
    list($id, $wrong, $right, $code) = $parts;
    if ($id == $def->id) {
        $def->internalRep = $right;
        $def->htmlRep = AdminStringUtil::htmlize($right, $def->sourceId);
        $def->lexicon = AdminStringUtil::extractLexicon($def);
        $def->save();
        break;
        // I know. Shut up.
    }
}
            }
        }
    }
} else {
    $lexems = Model::factory('Lexem')->select('Lexem.*')->join('LexemDefinitionMap', 'Lexem.id = lexemId')->where('definitionId', $definitionId)->find_many();
}
if ($commentContents) {
    if (!$comment) {
        $comment = Model::factory('comment')->create();
        $commend->status = ST_ACTIVE;
        $comment->definitionId = $definitionId;
    }
    $newContents = AdminStringUtil::internalizeDefinition($commentContents, $sourceId);
    if ($newContents != $comment->contents) {
        $comment->contents = $newContents;
        $comment->htmlContents = AdminStringUtil::htmlize($comment->contents, $sourceId);
        if (!$preserveCommentUser) {
            $comment->userId = session_getUserId();
        }
    }
} else {
    if ($comment) {
        // User wiped out the existing comment, set status to DELETED.
        $comment->status = ST_DELETED;
        $comment->userId = session_getUserId();
    }
}
if (($acceptButton || $moveButton) && !$hasErrors) {
    // The only difference between these two is that but_move also changes the
    // status to Active
    if ($moveButton) {
Exemple #12
0
<?php

require_once "../../phplib/util.php";
$internalRep = util_getRequestParameter('internalRep');
$sourceId = util_getRequestParameter('sourceId');
$reallyInternalRep = AdminStringUtil::internalizeDefinition($internalRep, $sourceId);
$htmlRep = AdminStringUtil::htmlize($reallyInternalRep, $sourceId);
echo $htmlRep;