public function action_edit_image() { $name = $this->request->param('options'); if ($content_image = new Content_Image($name)) { $short_name = substr($name, 0, strlen($name) - 4); $this->xml_content_image = $this->xml_content->appendChild($this->dom->createElement('image')); $this->xml_content_image->setAttribute('name', $name); $this->xml_content_image->appendChild($this->dom->createElement('URL', 'user_content/images/' . $name)); $tags_node = $this->xml_content_image->appendChild($this->dom->createElement('tags')); if (count($_POST)) { $_POST['name'] = URL::title($_POST['name'], '-', TRUE); $post = new Validation($_POST); $post->filter('trim'); $post->rule('Valid::not_empty', 'name'); $form_data = $post->as_array(); if ($form_data['name'] != $short_name) { $post->rule('Content_Image::image_name_available', 'name'); } // Check for form errors if ($post->validate()) { // No form errors, edit image $new_image_data = array(); foreach ($form_data['tag'] as $nr => $tag_name) { if (!isset($new_image_data[$tag_name])) { $new_image_data[$tag_name] = array(); } $new_image_data[$tag_name][] = $form_data['tag_value'][$nr]; } $content_image->set_data(array_merge($new_image_data, array('name' => $form_data['name'] . '.jpg'))); if ($form_data['name'] != $short_name) { // If the image name have changed, we need to change the URL also // Save the message for the new URL $_SESSION['content']['image']['message'] = 'Image data saved'; // Redirect to the new name $this->redirect('/admin/images/edit_image/' . $form_data['name'] . '.jpg'); } $this->add_message('Image data saved'); $this->set_formdata(array('name' => $short_name)); $image_data = $content_image->get_data(); foreach ($image_data as $tag_name => $tag_values) { foreach ($tag_values as $tag_value) { $tag_node = $tags_node->appendChild($this->dom->createElement('tag', $tag_value)); $tag_node->setAttribute('name', $tag_name); } if (!count($tag_values)) { $tag_node = $tags_node->appendChild($this->dom->createElement('tag')); $tag_node->setAttribute('name', $tag_name); } } } else { // Something is wrong. Fill form with unsaved data and push error $this->set_formdata(array('name' => $form_data['name'])); foreach ($form_data['tag'] as $nr => $tag_name) { if ($tag_name != '') { $tag_node = $tags_node->appendChild($this->dom->createElement('tag', $form_data['tag_value'][$nr])); $tag_node->setAttribute('name', $tag_name); } } $this->add_form_errors($post->errors()); } } else { $this->set_formdata(array('name' => $short_name)); $image_data = $content_image->get_data(); foreach ($image_data as $tag_name => $tag_values) { foreach ($tag_values as $tag_value) { $tag_node = $tags_node->appendChild($this->dom->createElement('tag', $tag_value)); $tag_node->setAttribute('name', $tag_name); } if (!count($tag_values)) { $tag_node = $tags_node->appendChild($this->dom->createElement('tag')); $tag_node->setAttribute('name', $tag_name); } } } if (isset($_SESSION['content']['image']['message'])) { $this->add_message($_SESSION['content']['image']['message']); unset($_SESSION['content']['image']['message']); } } else { $this->redirect(); } }