public function action_edit_page() { $id = $this->request->param('options'); $content_page = new Content_Page($id); if ($content_page->get_page_id()) { $this->xml_content_page = $this->xml_content->appendChild($this->dom->createElement('page')); // Get all tags associated with pages and images $this->xml_content_tags = $this->xml_content->appendChild($this->dom->createElement('tags')); $tags = array(); foreach (Content_Page::get_tags() as $tag) { $tags[] = $tag; } foreach (Content_Image::get_tags() as $tag) { foreach ($tags as $tag_to_check) { if ($tag_to_check['name'] == $tag['name']) { break 2; } } $tags[] = $tag; } foreach ($tags as $tag) { $tag_node = $this->xml_content_tags->appendChild($this->dom->createElement('tag', $tag['name'])); $tag_node->setAttribute('id', $tag['id']); } if (count($_POST) && isset($_POST['URI']) && isset($_POST['name'])) { if ($_POST['URI'] == '') { $_POST['URI'] = $_POST['name']; } $_POST['URI'] = URL::title($_POST['URI'], '-', TRUE); $post = new Validation($_POST); $post->filter('trim'); $post->rule('Valid::not_empty', 'name'); if ($post->validate()) { $post_values = $post->as_array(); $current_page_data = $content_page->get_page_data(); if ($post_values['name'] != $current_page_data['name'] && !Content_Page::page_name_available($post_values['name'])) { $post->add_error('name', 'Content_Page::page_name_available'); } if ($post_values['URI'] != $current_page_data['URI'] && !Content_Page::page_URI_available($post_values['URI'])) { $post->add_error('URI', 'Content_Page::page_URI_available'); } } // Retry if ($post->validate()) { $tags = array(); foreach ($post_values['template_position'] as $nr => $template_position) { if ($post_values['tag_id'][$nr] > 0) { if (!isset($tags[$template_position])) { $tags[$template_position] = array(); } $tags[$template_position][] = $post_values['tag_id'][$nr]; } } $content_page->update_page_data($post_values['name'], $post_values['URI'], $tags); $this->add_message('Page "' . $post_values['name'] . '" updated'); $page_data = $content_page->get_page_data(); unset($page_data['tag_ids']); $this->set_formdata($page_data); } else { $this->add_error('Fix errors and try again'); $this->add_form_errors($post->errors()); // Fix template position data $tmp_node = $this->xml_content->appendChild($this->dom->createElement('tmp')); foreach ($post_values['template_position'] as $nr => $template_position) { $template_field_node = $tmp_node->appendChild($this->dom->createElement('template_field')); $template_field_node->setAttribute('id', $template_position); if ($post_values['tag_id'][$nr] > 0) { $tag_node = $template_field_node->appendChild($this->dom->createElement('tag')); $tag_node->setAttribute('id', $post_values['tag_id'][$nr]); } } unset($post_values['template_position'], $post_values['tag_id']); $this->set_formdata($post_values); } } else { $page_data = $content_page->get_page_data(); unset($page_data['tag_ids']); $this->set_formdata($page_data); } /** * Put the page data to the XML * */ $page_data = $content_page->get_page_data(); $page_data['template_fields'] = array(); foreach ($page_data['tag_ids'] as $template_field_id => $tag_ids) { $page_data['template_fields'][$template_field_id . 'template_field'] = array('@id' => $template_field_id); foreach ($tag_ids as $tag_id) { $page_data['template_fields'][$template_field_id . 'template_field'][$tag_id . 'tag'] = array('@id' => $tag_id); } } // Unset this, or it will cludge our XML unset($page_data['tag_ids']); // Set the page data to the page node xml::to_XML($page_data, $this->xml_content_page, NULL, 'id'); } else { $this->redirect(); } }
public function action_index() { $URI = $this->request->uri(); // Empty string defaults to 'welcome' if ($URI == '' || $URI == '/') { $URI = 'welcome'; } // Set the name of the template to use $this->xslt_stylesheet = 'generic'; // Initiate the page model $content_page = new Content_Page(Content_Page::get_page_id_by_uri($URI)); // Create the DOM node <page> $this->xml_content_page = $this->xml_content->appendChild($this->dom->createElement('page')); // And load the page data into it $page_data = $content_page->get_page_data(); foreach ($page_data['tag_ids'] as $template_field_id => $tag_ids) { // Get contents $contents = array(); foreach ($tag_ids as $tag_id) { foreach (Content_Content::get_contents_by_tag_id($tag_id) as $content) { if (!isset($contents[$content['id'] . 'content'])) { $contents[$content['id'] . 'content'] = array('@id' => $content['id'], 'raw' => $content['content'], 'tags' => array()); $counter = 0; foreach ($content['tags'] as $tag_name => $tag_values) { foreach ($tag_values as $tag_value) { $counter++; $contents[$content['id'] . 'content']['tags'][$counter . 'tag']['@name'] = $tag_name; if ($tag_value) { $contents[$content['id'] . 'content']['tags'][$counter . 'tag']['$value'] = $tag_value; } } } } } } // Get images $images = array(); $image_tags = array(); foreach ($tag_ids as $tag_id) { $image_tags[Tags::get_name_by_id($tag_id)] = TRUE; } $larger_counter = 0; foreach (Content_Image::get_images(NULL, $image_tags) as $image_name => $image_tags) { $image = array('@name' => $image_name, 'tags' => array()); $counter = 0; foreach ($image_tags as $tag_name => $tag_values) { if (count($tag_values)) { foreach ($tag_values as $tag_value) { $image['tags'][$counter . 'tag'] = array('@name' => $tag_name, '$value' => $tag_value); $counter++; } } else { $image['tags'][$counter . 'tag'] = array('@name' => $tag_name); $counter++; } } $images[$larger_counter . 'image'] = $image; $larger_counter++; } // Put it all in the $page_data for transport to the XML $page_data[$template_field_id . 'template_field'] = array('@id' => $template_field_id, 'contents' => $contents, 'images' => $images); } unset($page_data['tag_ids']); xml::to_XML($page_data, $this->xml_content_page, NULL, array('id', 'template_field_id')); // We need to put some HTML in from our transformator // The reason for all this mess is that we must inject this directly in to the DOM, or else the <> will get destroyed $XPath = new DOMXpath($this->dom); foreach ($XPath->query('/root/content/page/template_field/contents/content/raw') as $raw_content_node) { $html_content = call_user_func(Kohana::$config->load('content.content_transformator'), $raw_content_node->nodeValue); $html_node = $raw_content_node->parentNode->appendChild($this->dom->createElement('html')); xml::xml_to_DOM_node($html_content, $html_node); } }