/** * Different from __clone(). We save the object to the database to assign it an ID. We also clone its descendants, * relations, sources and tags. **/ public function cloneMeaning($newLexemId, $newParentId) { $clone = $this->parisClone(); $clone->lexemId = $newLexemId; $clone->parentId = $newParentId; $clone->save(); // Clone its tags $mtms = MeaningTagMap::get_all_by_meaningId($this->id); foreach ($mtms as $mtm) { $mtmClone = $mtm->parisClone(); $mtmClone->meaningId = $clone->id; $mtmClone->save(); } // Clone its sources $mss = MeaningSource::get_all_by_meaningId($this->id); foreach ($mss as $ms) { $msClone = $ms->parisClone(); $msClone->meaningId = $clone->id; $msClone->save(); } // Clone its relations $relations = Relation::get_all_by_meaningId($this->id); foreach ($relations as $r) { $rc = $r->parisClone(); $rc->meaningId = $clone->id; $rc->save(); } // Clone its children $children = Meaning::get_all_by_parentId($this->id); foreach ($children as $child) { $child->cloneMeaning($newLexemId, $clone->id); } }
function goodForVariant($meanings) { if (empty($meanings)) { return true; } if (count($meanings) > 1) { return false; } $m = $meanings[0]; $mss = MeaningSource::get_all_by_meaningId($m->id); $relations = Relation::get_all_by_meaningId($m->id); return count($mss) && !$m->internalRep && !$m->internalEtymology && !$m->internalComment && empty($relations); }