Example #1
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);
 }