function doAction($url_params) { if (!$url_params['ryform_name']) { return array(DATA_RYFORM_VALUE, array()); } $ret = ''; $ryforms = explode('/', $url_params['ryform_name']); $this_ryform_name = array_shift($ryforms); list($ryform_name, $ryform_pos) = explode(':', $this_ryform_name); if (!isset($this->defines[$ryform_name])) { return 'Bad ryform name'; } $def = $this->defines[$ryform_name]; if ($ryforms) { $action = 'edit'; $next_action = $url_params['ryform_action']; } else { $action = $url_params['ryform_action']; $next_action = ''; } switch ($action) { case 'list': if (isset($url_params['ryform_parent']) && $url_params['ryform_parent']) { $ryform_parent = $url_params['ryform_parent'] . '/'; } else { $ryform_parent = ''; } $ret .= '<table cellpadding="0" cellspacing="0" width="100%">'; foreach ($def->params as $id => $ryform) { if (is_array($ryform)) { $ret .= _s('t row 1', '<td height="28px" width="22px" bgcolor=' . ryzom_get_color_style('section') . '></td><td bgcolor=' . ryzom_get_color_style('section') . '>' . ryzom_font(_t('ryform_cat_' . $id), '', '12') . '</td><td bgcolor=' . ryzom_get_color_style('section') . '></td>'); foreach ($ryform as $subid => $subryform) { $ret .= _s('t row ' . $subid % 2, '<td width="22px" height="34px">' . self::$ryformsIcons[$subryform] . '</td><td> ' . _l(_t($subryform . '_short_description'), $url_params, array('ryform_name' => $ryform_parent . $url_params['ryform_name'], 'ryform_action' => 'add', 'new_ryform' => $subryform)) . '</td><td>' . $subryform . '</td>'); } } else { $ret .= _s('t row ' . $id % 2, '<td width="22px" height="34px">' . self::$ryformsIcons[$ryform] . '</td><td> ' . _l(_t($ryform . '_short_description'), $url_params, array('ryform_name' => $ryform_parent . $url_params['ryform_name'], 'ryform_action' => 'add', 'new_ryform' => $ryform)) . '</td><td>' . $ryform . '</td>'); } } $ret .= '</table>'; return array(DATA_HTML_FORM, $ret); break; case 'list_multiadd': // TODO /* unset($url_params[$deffullname.'_action']); $ret .= '<table cellpadding="5"><tr>'; foreach ($def->params as $ryform) { $ret .= '<td bgcolor="#000000">'._l($ryform, $url_params, array('ryform_action' => 'multiadd', 'new_ryform' => $ryform)).'</td>'; } $ret .= '</tr></table>'; return array(DATA_HTML_FORM, $ret);*/ break; case 'add': $new_ryform = ryzom_get_param('new_ryform'); $valid_ryform = false; if ($new_ryform) { if (is_string($def->params) && $new_ryform == $def->params || in_array($new_ryform, $def->params)) { $valid_ryform = true; } else { foreach ($def->params as $param) { if (is_array($param) && in_array($new_ryform, $param)) { $valid_ryform = true; } } } if (!$valid_ryform) { return array(DATA_HTML_FORM, 'Bad ryform'); } } else { $new_ryform = $def->params; } $ryform = new $new_ryform($new_ryform, ''); $ryform->preSerialization(); if ($def->type != DEF_TYPE_RYFORM) { p($def->value); if (!is_array($def->value)) { $savedRyform = array($def->value); } else { $savedRyform = $def->value; } if ($ryform_pos === 0) { $value = array_values(array_merge(array($ryform), $savedRyform)); } else { if ($ryform_pos !== NULL) { $begin = array_slice($savedRyform, 0, $ryform_pos); $end = array_slice($savedRyform, $ryform_pos, count($savedRyform) - $ryform_pos); $value = array_values(array_merge($begin, array($ryform), $end)); } else { $value[] = $ryform; } } p($ryform_name, $value); //return array(DATA_RYFORM_VALUE, array('stages' => array())); return array(DATA_RYFORM_VALUE, array($ryform_name => $value)); } else { p($ryform_name, $ryform); return array(DATA_RYFORM_VALUE, array($ryform_name => $ryform)); } break; case 'edit': $a_ryforms = $def->value; if (is_array($a_ryforms)) { $ryform = $a_ryforms[$ryform_pos]; } else { $ryform = $a_ryforms; } $ryform->postSerialization(); $validate = isset($url_params['validate']) && $url_params['validate']; $form = new ryForm('', $def->name); foreach ($ryform->getFormDefs() as $form_def) { $form->addDefine($form_def); $name = $form_def->name; // Init form with ryfom values if (property_exists($ryform, $name)) { $form->addValue($form_def->name, $ryform->{$name}); } } foreach ($ryform->getFormDefsExtraValues() as $def_name => $extra_values) { $form->addExtraValues($def_name, $extra_values); } $form->setTemplate($ryform->getTemplate()); list($result_type, $value) = $form->getForm(array('action' => $url_params['action'], 'script' => $url_params['script'], 'ryform_action' => $next_action, 'ryform_parent' => $this_ryform_name, 'ryform_name' => implode('/', $ryforms), 'validate' => $validate)); if ($result_type == DATA_HTML_FORM) { return array(DATA_HTML_FORM, $value); } else { if ($result_type == DATA_FORM_VALUES) { $value = $form->validateFormPost($value); } $ryform->setFormParams($value); $ryform->preSerialization(); } if (is_array($a_ryforms)) { $a_ryforms[$ryform_pos] = $ryform; } else { $a_ryforms = $ryform; } $value = array($ryform_name => $a_ryforms); return array(DATA_RYFORM_VALUE, $value); break; case 'del': $id = $ryform_pos; p($def->value); if (!is_array($def->value)) { $def->value = array(); } else { unset($def->value[$id]); } $value = array_values($def->value); return array(DATA_RYFORM_VALUE, array($ryform_name => $value)); break; case 'up': $a_ryforms = $def->value; if (!is_array($a_ryforms)) { ryzom_redirect(_url($url_params, array('ryform_action' => ''))); } $temp_ryform = $a_ryforms[$ryform_pos - 1]; $a_ryforms[$ryform_pos - 1] = $a_ryforms[$ryform_pos]; $a_ryforms[$ryform_pos] = $temp_ryform; $a_ryforms = array_values($a_ryforms); p($ryform_name, $a_ryforms); return array(DATA_RYFORM_VALUE, array($ryform_name => $a_ryforms)); break; case 'down': $a_ryforms = $def->value; if (!is_array($a_ryforms)) { ryzom_redirect(_url($url_params, array('ryform_action' => ''))); } $temp_ryform = $a_ryforms[$ryform_pos + 1]; $a_ryforms[$ryform_pos + 1] = $a_ryforms[$ryform_pos]; $a_ryforms[$ryform_pos] = $temp_ryform; $a_ryforms = array_values($a_ryforms); return array(DATA_RYFORM_VALUE, array($ryform_name => $a_ryforms)); break; case 'source': $a_ryforms = $def->value; if (is_array($a_ryforms)) { $ryform = $a_ryforms[$ryform_pos]; } else { $ryform = $a_ryforms; } $ryform->postSerialization(); $form = new ryForm('', $def->name); $form->addDefine(new ryFormDef('ryform_source', DEF_TYPE_TEXTAREA, '', base64_encode(serialize($ryform)))); $validate = isset($url_params['validate']) && $url_params['validate']; list($result_type, $value) = $form->getForm(array('ryform_action' => $next_action, 'ryform_parent' => $this_ryform_name, 'ryform_name' => implode('/', $ryforms), 'validate' => $validate)); if ($result_type == DATA_HTML_FORM) { return array(DATA_HTML_FORM, $value); } else { if ($result_type == DATA_FORM_VALUES) { $params = $form->validateFormPost($value); } else { $params = $value; } $ryform = unserialize(base64_decode($params['ryform_source'])); if (!is_object($ryform)) { unset($url_params['validate']); ryzom_redirect(_url($url_params, array('ryform_action' => '', 'message' => 'bad_paste'))); } $is_valid = false; p($def->params); foreach ($def->params as $id => $ryform_class) { if (is_array($ryform_class)) { if (in_array(get_class($ryform), array_values($ryform_class))) { $is_valid = true; } } else { if (get_class($ryform) == $ryform_class) { $is_valid = true; } } } if (!$is_valid) { p(get_class($ryform), $def->params); ryzom_redirect(_url($url_params, array($deffullname . '_action' => '', 'message' => 'not_valid_stage'))); return; } if (is_array($a_ryforms)) { $a_ryforms[$ryform_pos] = $ryform; } else { $a_ryforms = $ryform; } $value = array($ryform_name => $a_ryforms); return array(DATA_RYFORM_VALUE, $value); } return; break; } return $ret; }
function getForm($url_params) { $form = new ryForm($this->formName); $form_defs = $this->getFormDefs(); foreach ($form_defs as $def) { $form->addDefine($def); } return $form->getForm(_s('section', $this->formName . ' (' . get_class($this) . ')')); }