public function action_edit_field() { $field_id = $this->request->param('options'); xml::to_XML(array('field' => array('@id' => $field_id, '$content' => User::get_data_field_name($field_id))), $this->xml_content); if (count($_POST) && isset($_POST['field_name'])) { $post = new Validation($_POST); $post->filter('trim'); $post->rule('Valid::not_empty', 'field_name'); if ($post->validate()) { $post_values = $post->as_array(); if ($post_values['field_name'] != User::get_data_field_name($field_id) && !User::field_name_available($post_values['field_name'])) { $post->add_error('field_name', 'User::field_name_available'); } } // Retry if ($post->validate()) { $post_values = $post->as_array(); User::update_field($field_id, $post_values['field_name']); $this->add_message('Field ' . $post_values['field_name'] . ' updated'); $this->set_formdata(array('field_name' => $post_values['field_name'])); } else { $this->add_error('Fix errors and try again'); $this->add_form_errors($post->errors()); $this->set_formdata(array_intersect_key($post->as_array(), $_POST)); } } else { $this->set_formdata(array('field_name' => User::get_data_field_name($field_id))); } }
public function action_user() { $formdata = array(); if (isset($_GET['id'])) { $user = new User($_GET['id'], FALSE, FALSE, 'default', FALSE); if (!$user->logged_in()) { $this->redirect(); } } $this->list_available_data_fields(); if (!empty($_POST) && isset($_POST['username']) && isset($_POST['password'])) { $post = new Validation($_POST); $post->filter('trim'); $post->filter('strtolower', 'username'); $post->rule('Valid::not_empty', 'username'); if (isset($user)) { if ($_POST['username'] != $user->get_username()) { $post->rule('User::username_available', 'username'); } } else { $post->rule('User::username_available', 'username'); } if (!isset($user)) { $post->rule('Valid::not_empty', 'password'); } if (isset($_POST['do_add_field'])) { // Add another user data field and save no data, but repopulate the form fields if (!isset($_SESSION['detail_fields'])) { $_SESSION['detail_fields'] = array(); } $_SESSION['detail_fields'][] = $_POST['add_field']; // Reconstruct the form data to repopulate the form $formdata = array(); $counter = 0; $post_values = $post->as_array(); foreach ($post_values as $field => $data) { if (substr($field, 0, 8) == 'fieldid_') { foreach ($data as $data_piece) { $counter++; $formdata['field_' . substr($field, 8) . '_' . $counter] = trim($data_piece); } } elseif ($field == 'username') { $formdata[$field] = $post_values[$field]; } } } else { // Check for form errors if ($post->validate()) { // No form errors, add the user! $post_values = $post->as_array(); // Erase the empty data fields foreach ($post_values as $key => $value) { if (substr($key, 0, 8) == 'fieldid_' && is_array($value)) { foreach ($value as $nr => $value_piece) { if ($value_piece == '') { unset($post_values[$key][$nr]); } } } } // Organize the field data and set the session fields $fields = $_SESSION['detail_fields'] = array(); foreach ($post_values as $key => $value) { if (substr($key, 0, 6) == 'field_') { list($foobar, $field_id, $field_nr) = explode('_', $key); $fields[User::get_data_field_name($field_id)][] = $value; } } if (!isset($_GET['id'])) { // Actually add the user User::new_user($post_values['username'], $post_values['password'], $fields); $this->add_message('User ' . $post_values['username'] . ' added'); } elseif (isset($user)) { $user->set_user_data(array_merge($fields, array('username' => $post_values['username'], 'password' => $post_values['password'])), TRUE); $this->add_message('User data saved'); } } else { // Form errors detected! $this->add_error('Fix errors and try again'); $this->add_form_errors($post->errors()); $formdata = array(); $counter = 0; $post_values = $post->as_array(); foreach ($post_values as $field => $data) { if (substr($field, 0, 8) == 'fieldid_') { foreach ($data as $data_piece) { $counter++; $formdata['field_' . substr($field, 8) . '_' . $counter] = trim($data_piece); } } elseif ($field == 'username') { $formdata[$field] = $post_values[$field]; } } } } } if (isset($user)) { $formdata = array('username' => $user->get_username()); $counter = 0; foreach ($user->get_user_data() as $field => $data) { foreach ($data as $data_piece) { $counter++; $formdata['field_' . User::get_data_field_id($field) . '_' . $counter] = $data_piece; } } } if (!empty($_SESSION['detail_fields'])) { foreach ($_SESSION['detail_fields'] as $field_id) { $counter = 1; while (isset($formdata['field_' . $field_id . '_' . $counter])) { $counter++; } $formdata['field_' . $field_id . '_' . $counter] = ''; } } $this->set_formdata($formdata); }