/** * Copy attributes from one model to another. If the attributes are relations, then only copy when it is a * HAS_ONE variant. In the case that the relation is an OwnedModel, take special consideration for CurrencyValue * CustomField, and MultipleValuesCustomField models. If it is owned and not one of those 3, then it should just * copy the OwnedModel nonRelation attributes. An example of that would be Address or Email * @param RedBeanModel $model * @param RedBeanModel $copyToModel - model to copy attribute values from $model to */ public static function copy(RedBeanModel $model, RedBeanModel $copyToModel) { $copyToModel->setIsCopied(); foreach ($model->attributeNames() as $attributeName) { if ($attributeName == 'owner') { continue; } $isReadOnly = $model->isAttributeReadOnly($attributeName); if (!$model->isRelation($attributeName) && !$isReadOnly) { static::copyNonRelation($model, $attributeName, $copyToModel); } elseif ($model->isRelation($attributeName) && !$isReadOnly && $model->isRelationTypeAHasOneVariant($attributeName)) { static::copyRelation($model, $attributeName, $copyToModel); } } if ($model instanceof OwnedSecurableItem) { static::copyRelation($model, 'owner', $copyToModel); } static::resolveExplicitPermissions($model, $copyToModel); }