$artefact = param_integer('artefact');
$a = artefact_instance_from_id($artefact);
$type = $a->get('artefacttype');
// Set correct redirect when user clicks Cancel button...
if ($type == 'languagediploma' || $type == 'languageexperience') {
    // Find language diploma's or linguistic experience's parent for redirect...
    $sql = 'SELECT aeo.id, aeo.artefact
		FROM {artefact_europass_otherlanguage} aeo 
		JOIN {artefact_europass_' . $type . '} ar ON ar.languageid = aeo.id
		WHERE ar.id = ? AND ar.artefact = ?';
    $parent = get_record_sql($sql, array($id, $artefact));
    $goto = 'viewcomposite.php?id=' . $parent->id . '&artefact=' . $parent->artefact;
} else {
    $goto = 'languages.php';
}
$tabs = PluginArtefactEuropass::composite_tabs();
define('EUROPASS_SUBPAGE', $tabs[$type]);
if ($a->get('owner') != $USER->get('id')) {
    throw new AccessDeniedException(get_string('notartefactowner', 'error'));
}
$elements = call_static_method(generate_artefact_class_name($type), 'get_addform_elements');
$elements['submit'] = array('type' => 'submitcancel', 'value' => array(get_string('save'), get_string('cancel')), 'goto' => get_config('wwwroot') . 'artefact/europass/' . $goto);
$elements['compositetype'] = array('type' => 'hidden', 'value' => $type);
$cform = array('name' => 'add' . $type, 'plugintype' => 'artefact', 'pluginname' => 'europass', 'elements' => $elements, 'successcallback' => 'langcompositeformedit_submit');
$a->populate_form($cform, $id, $type);
$compositeform = pieform($cform);
$smarty = smarty();
$smarty->assign('compositeform', $compositeform);
$smarty->assign('composite', $type);
$smarty->assign('PAGEHEADING', TITLE);
$smarty->assign('SUBPAGENAV', PluginArtefactEuropass::submenu_items());
function langcompositeformedit_submit(Pieform $form, $values)
{
    global $SESSION;
    $tabs = PluginArtefactEuropass::composite_tabs();
    $goto = get_config('wwwroot') . 'artefact/europass/';
    if (isset($tabs[$values['compositetype']])) {
        if ($values['compositetype'] == 'languagediploma' || $values['compositetype'] == 'languageexperience') {
            // Find language diploma's or linguistic experience's parent for redirect...
            $sql = 'SELECT aeo.id, aeo.artefact
				FROM {artefact_europass_otherlanguage} aeo 
				JOIN {artefact_europass_' . $values['compositetype'] . '} ar ON ar.languageid = aeo.id
				WHERE ar.id = ? AND ar.artefact = ?';
            $parent = get_record_sql($sql, array($values['id'], $values['artefact']));
            $goto .= 'viewcomposite.php?id=' . $parent->id . '&artefact=' . $parent->artefact;
            if ($values['compositetype'] == 'languagediploma') {
                $okmsg = get_string('languagediplomasaved', 'artefact.europass');
                $errmsg = get_string('languagediplomasavefailed', 'artefact.europass');
            } else {
                $okmsg = get_string('languageexperiencesaved', 'artefact.europass');
                $errmsg = get_string('languageexperiencesavefailed', 'artefact.europass');
            }
        } else {
            $goto .= $tabs[$values['compositetype']] . '.php';
            $okmsg = get_string('languagesaved', 'artefact.europass');
            $errmsg = get_string('languagesavefailed', 'artefact.europass');
        }
    }
    try {
        call_static_method(generate_artefact_class_name($values['compositetype']), 'process_compositeform', $form, $values);
    } catch (Exception $e) {
        $SESSION->add_error_msg($errmsg);
        redirect($goto);
    }
    $SESSION->add_ok_msg($okmsg);
    redirect($goto);
}