function getForm($params) { if (isset($params['ryform_action']) && $params['ryform_action']) { $res = $this->doAction($params); return $res; } if (@$params['validate'] == $this->name) { return array(DATA_FORM_VALUES, $_POST); } if (isset($params['ryform_parent'])) { $parent_ryform_name = $params['ryform_parent'] . '/'; } else { $parent_ryform_name = ''; } $action = _url(ryzom_get_params(), array('validate' => $this->name)); $ret = ''; $ret .= '<form action="' . $action . '" method="POST">' . "\n"; if (!$this->getTemplate()) { $ret .= ' <table width="100%" cellpadding="0" cellspacing="0">' . "\n"; $ret .= ' ' . _s('t header', '<td height="24px">' . _t('parameter') . '</td><td>' . _t('value') . '</td><td></td>') . "\n"; $tmpl = ''; } else { $tmpl = $this->getTemplate(); } $i = 0; foreach ($this->defines as $def_id => $def) { if ($def->name == 'name') { $def->name = '_name'; } $deffullname = $def->name; $url_params = ryzom_get_params(); $type = $def->type; $infos = $def->infos; $value = $def->value !== NULL ? $def->value : $def->defaultValue; if (!is_object($value) && !is_array($value)) { $str_value = _h(strval($value)); } else { $str_value = ''; } if ($def->hidden) { $type = DEF_TYPE_HIDDEN; } $hidden = false; $input = ''; switch ($type) { case DEF_TYPE_HIDDEN: $input = '<input type="hidden" name="' . $def->name . '" value="' . $str_value . '" />' . "\n"; $hidden = true; break; case DEF_TYPE_TEXT: $input = '<input style="width:250px" type="text" name="' . $def->name . '" value="' . $str_value . '" size="25' . (_user()->ig ? '0' : '') . '" />'; break; case DEF_TYPE_NAMEID: $input = '<input style="width:250px" type="text" name="' . $def->name . '" value="' . getNameId($str_value) . '" size="25' . (_user()->ig ? '0' : '') . '" />'; break; case DEF_TYPE_ID: case DEF_TYPE_INT: case DEF_TYPE_FLOAT: $input = '<input style="width:100px" type="text" name="' . $def->name . '" value="' . $str_value . '" size="10' . (_user()->ig ? '0' : '') . '" />'; break; case DEF_TYPE_BOOL: $input = '<select name="' . $def->name . '">' . "\n"; if ($value) { $input .= '<option selected="selected" value="on">' . _t('yes') . '</option>' . "\n" . '<option value="off">' . _t('no') . '</option>'; } else { $input .= '<option value="on">' . _t('yes') . '</option>' . "\n" . '<option selected="selected" value="off">' . _t('no') . '</option>'; } $input .= '</select>'; break; case DEF_TYPE_OPTION_FUNCTION: case DEF_TYPE_OPTION: if ($type == DEF_TYPE_OPTION) { $options = $def->params; } else { if (is_array($def->defaultValue)) { $options = call_user_func_array($def->params, $def->defaultValue); } else { $options = call_user_func($def->params); } } $input = '<select name="' . $def->name . '">' . "\n"; $options_html = ''; foreach ($options as $option => $text) { $option = strval($option); if ($option && $option[0] === '<' && $option[1] === '/') { $options_html .= '</optgroup>'; } else { if ($option && $option[0] === '<') { $options_html .= '<optgroup label="' . $text . '">'; } else { if ($value !== NULL and strval($value) == $option) { $options_html .= '<option selected="selected" value="' . $option . '">' . $text . '</option>' . "\n"; } else { $options_html .= '<option value="' . $option . '">' . $text . '</option>' . "\n"; } } } } $input .= $options_html; $input .= '</select>'; break; case DEF_TYPE_COMBO_FUNCTION: case DEF_TYPE_COMBO: if ($type == DEF_TYPE_COMBO) { $options = $def->params; } else { if (is_array($def->defaultValue)) { $options = call_user_func_array($def->params, $def->defaultValue); } else { $options = call_user_func($def->params); } } if (_user()->ig) { // TODO : try to do it with lua } else { // HTML 4 $input .= '<input style="width:400px" type="text" id="' . $def->name . '" name="' . $def->name . '" value="' . $str_value . '" /> <select onChange="combo(this, \'' . $def->name . '\')" onMouseOut="comboInit(this, \'' . $def->name . '\')" >'; $options_html = ''; $have_selected = false; foreach ($options as $option => $text) { if ($option && $option[0] === '<' && $option[1] === '/') { $options_html .= '</optgroup>'; } else { if ($option && $option[0] === '<') { $options_html .= '<optgroup label="' . $text . '">'; } else { if ($value and $value == $option) { $have_selected = true; $options_html .= '<option selected="selected" value="' . $option . '">' . $text . '</option>' . "\n"; } else { $options_html .= '<option value="' . $option . '">' . $text . '</option>' . "\n"; } } } } if ($have_selected) { $input .= '<option value=""></option>'; } else { $input .= '<option selected="selected" value=""></option>'; } $input .= $options_html; $input .= '</select>'; } break; case DEF_TYPE_TEXTAREA: if (!$value) { $value = ""; } $input = '<pre>' . ($type == DEF_TYPE_BBCODE ? '<font color="orange">- BBCode -</font><br />' : '') . '<textarea name="' . $def->name . '" rows="3">' . _h($value) . '</textarea></pre>'; break; case DEF_TYPE_TRAD: $base = ''; $param = $def->name; $value = array_merge(array('en' => '', 'fr' => '', 'de' => '', 'ru' => '', 'es' => ''), $value); $base = ryzom_get_param('select_base', ''); $edit = $display = $input_header = ''; foreach (array('en', 'fr', 'de', 'ru', 'es') as $lang) { if (_user()->lang == $lang) { $edit = _i($lang == 'en' ? API_URL . 'data/img/lang/us.png' : API_URL . 'data/img/lang/' . $lang . '.png') . ' <textarea style="width: 90%" rows="3" name="' . $param . '[' . $lang . ']">' . _h($value[$lang]) . '</textarea>'; } if (!$base && $value[$lang] || $base == $lang) { $base = $lang; $display = strtoupper($lang) . ' = <font color="orange">' . str_replace("\n", '<br />', _h($value[$lang])) . '</font>'; } $input .= '<input type="hidden" name="' . $param . '[' . $lang . ']" value="' . $value[$lang] . '" />'; $input_header .= _l(_i($lang == 'en' ? API_URL . 'data/img/lang/us.png' : API_URL . 'data/img/lang/' . $lang . '.png'), $url_params, array('select_base' => $lang)) . ' '; } $input = $input_header . $input . ' ' . $display . '<br />' . $edit; break; case DEF_TYPE_RYFORM: case DEF_TYPE_RYFORMS_ARRAY: $savedRyform = $value; if (is_array($savedRyform)) { $to_clean = array(); foreach ($savedRyform as $id => $ryform) { if (!is_object($ryform)) { $to_clean[] = $id; } } foreach ($to_clean as $id) { unset($savedRyform[$id]); } $savedRyform = array_values($savedRyform); } else { if (is_object($savedRyform)) { $savedRyform = array($savedRyform); } else { $savedRyform = array(); } } $input .= '<table width="100%" cellspacing="0" cellpadding="0" >'; if ($savedRyform) { foreach ($savedRyform as $id => $ryform) { if (!is_object($ryform)) { p('!!! ERROR !!!', $ryform); continue; } $ryform->id = $id + 1; if (!isset($ryform->formName) || !$ryform->formName) { $ryform->formName = 'Element ' . $id; } if (count($savedRyform) > 1) { $display_id = '<font size="12px" style="font-weight: bold; font-size: 14px" color="#FFAA55">' . strval(intval($id) + 1) . '</font>'; } else { $display_id = ''; } $script_up = $id != 0 ? _l(_i('16/arrow_up', _t('up')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . $id, 'ryform_action' => 'up')) . ' ' : ''; $script_down = $id != count($savedRyform) - 1 ? _l(_i('16/arrow_down', _t('down')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . $id, 'ryform_action' => 'down')) . ' ' : ''; $icon = isset(self::$ryformsIcons[get_class($ryform)]) ? self::$ryformsIcons[get_class($ryform)] : _i('32/brick'); $input .= _s('t row ' . $id % 2, '<td width="36px">' . _l($def->type == DEF_TYPE_RYFORM ? _i('16/arrow_redo', _t('change')) : _i('16/add', _t('add')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . strval(intval($id) + 1), 'ryform_action' => 'list')) . ' ' . $display_id . '</td>' . '<td width="10px">' . $script_up . $script_down . '</td>' . '<td ><table width="100%"><tr> <td width="40px">' . $icon . '</td> <td valign="middle" width="300px"><font size="12px" style="font-size: 13px;font-weight: bold;" color="#FFAA55">' . _l($ryform->formName, $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . $id, 'ryform_action' => 'edit')) . ' ' . '</font><br />' . _t(get_class($ryform) . '_short_description') . '</td> <td align="left" valign="middle" bgcolor="#000000">' . $ryform->getHtmlRepr() . '</td> </tr></table><td width="70px" align="right">' . _l(_i('16/script_edit', _t('edit')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . $id, 'ryform_action' => 'edit')) . ' ' . _l(_i('16/script_code', _t('edit_source')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . $id, 'ryform_action' => 'source')) . ' ' . _l(_i('16/script_delete', _t('del')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':' . $id, 'ryform_action' => 'del')) . '</td><td> </td>'); } } $input .= '</table>'; if (count($savedRyform) == 0 || $def->type != DEF_TYPE_RYFORM) { if (is_string($def->params)) { $infos = _l(_i('16/add', _t('add')), $url_params, array('new_ryform' => $def->params, 'ryform_name' => $parent_ryform_name . $deffullname . ':0', 'ryform_action' => 'add')); } else { if (count($def->params) == 1) { $infos = _l(_i('16/add', _t('add')), $url_params, array('new_ryform' => $def->params[0], 'ryform_name' => $parent_ryform_name . $deffullname . ':0', 'ryform_action' => 'add')); } else { $infos = _l(_i('16/add', _t('add')), $url_params, array('ryform_name' => $parent_ryform_name . $deffullname . ':0', 'ryform_action' => 'list')); } } if ($type == DEF_TYPE_RYFORMS_ARRAY) { $infos .= ' ' . _l(_i('16/application_form_add', _t('multiadd')), $url_params, array('ryform_name' => $deffullname, 'ryform_action' => 'list_multiadd')); } } break; case DEF_TYPE_FUNCTION: if (is_array($def->defaultValue)) { list($result_type, $value) = call_user_func_array($def->params, $def->defaultValue); } else { list($result_type, $value) = call_user_func($def->params); } if ($result_type == DATA_HTML_FORM) { return array(DATA_HTML_FORM, $value); } else { unset($url_params[$deffullname . '_action']); $input = $value; } break; default: $input = '<input type="hidden" name="' . $def->name . '" value="' . $value . '" />' . $value . "\n"; $hidden = true; } if ($hidden) { $ret .= $input; } else { if ($tmpl) { $tmpl = str_replace('{' . $def->name . '}', '<font ' . (_user()->ig ? 'color="orange" size="11"' : 'style="color:orange;"') . '>' . _t($def->prefixTrad . $def->name) . '</font>', $tmpl); $tmpl = str_replace('{' . $def->name . '.input}', $input, $tmpl); $tmpl = str_replace('{' . $def->name . '.infos}', $infos, $tmpl); } else { $ret .= _s('t row ' . strval($i % 2), '<td height="32px" width="200px"> ' . (!$def->optional ? '*' : '') . ($def->superAdmin ? '##' : '') . ($def->admin ? '#' : '') . _t($def->prefixTrad . $def->name) . '</td><td valign="center">' . $input . '</td><td>' . $infos . '</td>') . "\n"; } $i++; } } if ($tmpl) { $tmpl = str_replace('{submit.input}', '<input type="submit" value="' . _t('submit') . '" />', $tmpl); $ret .= $tmpl; $ret .= '<table width="100%" cellspacing="0" cellpadding="0" ><tr>' . _s('t row ' . strval($i % 2), '<td height="32px"> ' . _t('required_fields') . '</td><td></td><td align="middle"><input type="submit" value="' . _t('submit') . '" /></td>') . '</tr></table>'; } else { $ret .= _s('t row ' . strval($i % 2), '<td height="32px"> ' . _t('required_fields') . '</td><td></td><td><input type="submit" value="' . _t('submit') . '" /></td>'); $ret .= '</table>'; } $ret .= '</form><br />'; return array(DATA_HTML_FORM, $ret . "\n"); }
// require 'samlSpMetadata.php'; // require 'samlIdpMetadata.php'; // require 'saml-lib.php'; // require 'localUserManagement.php'; $token = spi_sessionhandling_getResponse(); $binding = $_GET["binding"]; $RelayStateURL = $_GET["RelayState"]; error_log("binding = " . $binding); error_log("RelayState = " . $RelayStateURL); $idpEntityID = getIssuer($token); if (!isset($idpMetadata[$idpEntityID])) { $error = "400 No IdP configured for " . $idpEntityID; header($_SERVER["SERVER_PROTOCOL"] . " " . $error); echo $error; exit; } $nameId = getNameId($token); $sessionIndex = getSessionIndex($token); $idpTargetUrl = $idpMetadata[$idpEntityID]["SingleLogOutUrl"]; $id = randomhex(42); $issueInstant = gmdate("Y-m-d\\TH:i:s\\Z"); // Really simple impl for now - just use the URL itself $relayState = urlencode($RelayStateURL); $logoutRequest = "<samlp:LogoutRequest " . "xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" " . "ID=\"" . $id . "\" " . "Version=\"2.0\" " . "IssueInstant=\"" . $issueInstant . "\"> " . "<saml:Issuer " . "xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">" . $nameId["SPNameQualifier"] . "</saml:Issuer>" . "<saml:NameID " . "xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" " . "NameQualifier=\"" . $nameId["NameQualifier"] . "\" " . "SPNameQualifier=\"" . $nameId["SPNameQualifier"] . "\" " . "Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\">" . $nameId["NameID"] . "</saml:NameID>" . "<samlp:SessionIndex " . "xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">" . $sessionIndex . "</samlp:SessionIndex>" . "</samlp:LogoutRequest>"; error_log("Logout request = " . $logoutRequest); $encodedLogoutRequest = urlencode(base64_encode(gzdeflate($logoutRequest))); error_log("Encoded request = " . $encodedLogoutRequest); $redirectUrl = $idpTargetUrl . "?SAMLRequest=" . $encodedLogoutRequest . "&RelayState=" . $relayState; error_log("Redirect URL = " . $redirectUrl); header("Location: " . $redirectUrl); exit;