. * --------------------------------------------------------------------- */ namespace Glpi\Features; if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } use CommonDBConnexity; use Toolbox; /** * Clonable objects **/ trait Clonable { /** * Get relations class to clone along with current eleemnt * * @return CommonDBTM::class[] */ abstract public function getCloneRelations() :array; public function post_clone($source, $history) { parent::post_clone($source, $history); $clone_relations = $this->getCloneRelations(); foreach ($clone_relations as $classname) { if (!is_a($classname, CommonDBConnexity::class, true)) { Toolbox::logWarning( sprintf( 'Unable to clone elements of class %s as it does not extends "CommonDBConnexity"', $classname ) ); continue; } $override_input[$classname::getItemField($this->getType())] = $this->getID(); $relation_items = $classname::getItemsAssociatedTo($this->getType(), $source->getID()); foreach ($relation_items as $relation_item) { $relation_item->clone($override_input, $history); } } } }