public function def_save_node(&$data, $node, $update_type = 0) { $prev_title = $node->title; $new_node_name = $node->name; if ($update_type != self::UPDATE_TYPE_NONE) { $node->title = trim(_POST('_title')); if ($node->title == '') { $data['errors']['_title'] = Loc::get('forms/validators/required'); } } if ($update_type == self::UPDATE_TYPE_ALL) { $new_node_name = strtolower(trim(_POST('_name'))); if ($new_node_name == '') { $new_node_name = Cms::title_to_name($node->title); } if ($node->title != '' && $new_node_name == '') { $data['errors']['_name'] = Loc::get('forms/validators/required'); } if ($new_node_name != '') { if (!Cms::node_name_is_valid($new_node_name)) { $data['errors']['_name'] = Loc::get('cms/admin/node/invalid_name'); } elseif (!$node->parent_node) { $data['errors']['_name'] = Loc::get('cms/admin/node/not_found_dunno', array($path_prepend)); } else { foreach ($node->parent_node->childs as $nd) { if ($nd->name == $new_node_name && $nd->id != $node->id) { $data['errors']['_name'] = Loc::get('cms/admin/node/exists'); break; } } } } } foreach ($node->accessors as $name => $opts) { if (isset($node->editable_fields[$name]['type']) && $node->editable_fields[$name]['type'] == 'keyvalue') { $do_trim = isset($node->editable_fields[$name]['trim']) && $node->editable_fields[$name]['trim']; $list = $node->{$name} == '' ? array() : SJson::deserialize($node->{$name}); $new_list = array(); for ($i = 0; $i < count($list); $i++) { if (!inPOST("{$name}_rm_{$i}")) { $key = trim(_POST("{$name}_k_{$i}")); if ($key != '') { $value = _POST("{$name}_v_{$i}"); if ($do_trim) { $value = trim($value); } $new_list[$key] = $value; } } } $key = trim(_POST("{$name}_nk")); if ($key != '') { $value = _POST("{$name}_nv"); if ($do_trim) { $value = trim($value); } $new_list[$key] = $value; } $node->{$name} = SJson::serialize($new_list); } elseif (inPOST($name)) { $node->{$name} = _POST($name); } } if (!isset($data['errors']) || !count($data['errors'])) { Node::lock(); $was_new_node = $node->is_new(); if (!$node->position) { $node->position = Node::get_max_position($node->path) + 1; } if ($update_type == self::UPDATE_TYPE_ALL && $new_node_name != $node->name) { $node->rename($new_node_name); $name_updated = true; } else { $node->save(); $name_updated = false; } Node::unlock(); $data['info'] = Loc::get('cms/admin/saved'); if ($node->title != $prev_title || $name_updated) { if ($was_new_node) { $_SESSION['s.cms.admin.just-saved'] = true; header('Location: ' . ROOT . "admin/module.php?node_id={$node->id}"); exit; } $data['extra']['update_tree'] = true; } $data['extra']['select_node'] = $node->id; } }