Exemplo n.º 1
0
 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();
     }
 }
Exemplo n.º 2
0
 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);
     }
 }