public function copy_contents($template) { $artefactcopies = array(); // Correspondence between original artefact ids and id of the copy $this->set('numcolumns', $template->get('numcolumns')); $this->set('numrows', $template->get('numrows')); $this->set('layout', $template->get('layout')); if ($template->get('owner') == 0 && $template->get('type') == 'portfolio') { $this->set('description', ''); } else { $this->set('description', $this->copy_description($template, $artefactcopies)); } $this->set('tags', $template->get('tags')); $this->set('columnsperrow', $template->get('columnsperrow')); $blocks = get_records_array('block_instance', 'view', $template->get('id')); $numcopied = array('blocks' => 0); if ($blocks) { foreach ($blocks as $b) { safe_require('blocktype', $b->blocktype); $oldblock = new BlockInstance($b->id, $b); if ($oldblock->copy($this, $template, $artefactcopies)) { $numcopied['blocks']++; } } } // Go back and fix up artefact references in the new artefacts so // they also point to new artefacts. if ($artefactcopies) { foreach ($artefactcopies as $oldid => $copyinfo) { $a = artefact_instance_from_id($copyinfo->newid); $a->update_artefact_references($this, $template, $artefactcopies, $oldid); $a->commit(); } } $numcopied['artefacts'] = count($artefactcopies); return $numcopied; }