Esempio n. 1
0
 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>&nbsp;&nbsp;' . _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>&nbsp;&nbsp;' . _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;
 }
Esempio n. 2
0
 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) . ')'));
 }