Example #1
0
 /**
  * Pre-Ouput content
  *
  * @access 	public
  * @return 	string
  */
 public function pre_output($input, $params)
 {
     $parse_tags = !isset($params['allow_tags']) ? 'n' : $params['allow_tags'];
     $content_type = !isset($params['content_type']) ? 'html' : $params['content_type'];
     // If this is the admin, show only the source
     // @TODO This is hacky, there will be times when the admin wants to see a preview or something
     if (defined('ADMIN_THEME')) {
         return $input;
     }
     // If this isn't the admin and we want to allow tags,
     // let it through. Otherwise we will escape them.
     if ($parse_tags == 'y') {
         $content = $this->CI->parser->parse_string($input, array(), true);
     } else {
         $this->CI->load->helper('text');
         $content = escape_tags($input);
     }
     // Not that we know what content is there, what format should we treat is as?
     switch ($content_type) {
         case 'md':
             $this->CI->load->helper('markdown');
             return parse_markdown($content);
         case 'html':
             return $content;
         default:
             return strip_tags($content);
     }
 }
Example #2
0
 public function parse_markdown($string)
 {
     $string = str_replace('_', '\\_', $string);
     $string = parse_markdown($string);
     $string = str_replace('\\_', '_', $string);
     return $string;
 }
Example #3
0
 /**
  * Create page chunks
  *
  * @access 	public
  * @param 	array 	$input The sanitized $_POST
  * @return 	bool
  */
 public function create($input)
 {
     $chunk_slugs = $input['chunk_slug'] ? array_values($input['chunk_slug']) : array();
     $chunk_bodies = $input['chunk_body'] ? array_values($input['chunk_body']) : array();
     $chunk_types = $input['chunk_type'] ? array_values($input['chunk_type']) : array();
     $page->chunks = array();
     $chunk_bodies_count = count($input['chunk_body']);
     for ($i = 0; $i < $chunk_bodies_count; $i++) {
         $page->chunks[] = (object) array('id' => $i, 'slug' => !empty($chunk_slugs[$i]) ? $chunk_slugs[$i] : '', 'type' => !empty($chunk_types[$i]) ? $chunk_types[$i] : '', 'body' => !empty($chunk_bodies[$i]) ? $chunk_bodies[$i] : '');
     }
     if ($page->chunks) {
         // get rid of the old
         $this->delete_by('page_id', $input['id']);
         // And add the new ones
         $i = 1;
         foreach ($page->chunks as $chunk) {
             $this->insert(array('slug' => preg_replace('/[^a-zA-Z0-9_-\\s]/', '', $chunk->slug), 'page_id' => $input['id'], 'body' => $chunk->body, 'parsed' => $chunk->type == 'markdown' ? parse_markdown($chunk->body) : '', 'type' => $chunk->type, 'sort' => $i++));
         }
         return TRUE;
     }
     return FALSE;
 }
Example #4
0
 /**
  * Edit blog post
  *
  * @access public
  * @param int $id the ID of the blog post to edit
  * @return void
  */
 public function edit($id = 0)
 {
     $id or redirect('admin/blog');
     $post = $this->blog_m->get($id);
     $post->keywords = Keywords::get_string($post->keywords);
     // If we have a useful date, use it
     if ($this->input->post('created_on')) {
         $created_on = strtotime(sprintf('%s %s:%s', $this->input->post('created_on'), $this->input->post('created_on_hour'), $this->input->post('created_on_minute')));
     } else {
         $created_on = $post->created_on;
     }
     $this->form_validation->set_rules(array_merge($this->validation_rules, array('title' => array('field' => 'title', 'label' => 'lang:blog_title_label', 'rules' => 'trim|htmlspecialchars|required|max_length[100]|callback__check_title[' . $id . ']'), 'slug' => array('field' => 'slug', 'label' => 'lang:blog_slug_label', 'rules' => 'trim|required|alpha_dot_dash|max_length[100]|callback__check_slug[' . $id . ']'))));
     if ($this->form_validation->run()) {
         // They are trying to put this live
         if ($post->status != 'live' and $this->input->post('status') == 'live') {
             role_or_die('blog', 'put_live');
         }
         $author_id = empty($post->display_name) ? $this->current_user->id : $post->author_id;
         $result = $this->blog_m->update($id, array('title' => $this->input->post('title'), 'slug' => $this->input->post('slug'), 'category_id' => $this->input->post('category_id'), 'keywords' => Keywords::process($this->input->post('keywords')), 'intro' => $this->input->post('intro'), 'body' => $this->input->post('body'), 'status' => $this->input->post('status'), 'created_on' => $created_on, 'comments_enabled' => $this->input->post('comments_enabled'), 'author_id' => $author_id, 'type' => $this->input->post('type'), 'parsed' => $this->input->post('type') == 'markdown' ? parse_markdown($this->input->post('body')) : ''));
         if ($result) {
             $this->session->set_flashdata(array('success' => sprintf(lang('blog_edit_success'), $this->input->post('title'))));
             // They are trying to put this live
             if ($post->status != 'live' and $this->input->post('status') == 'live') {
                 // Fire an event, we're posting a new blog!
                 Events::trigger('blog_article_published', $id);
             }
         } else {
             $this->session->set_flashdata('error', $this->lang->line('blog_edit_error'));
         }
         // Redirect back to the form or main page
         $this->input->post('btnAction') == 'save_exit' ? redirect('admin/blog') : redirect('admin/blog/edit/' . $id);
     }
     // Go through all the known fields and get the post values
     foreach ($this->validation_rules as $key => $field) {
         if (isset($_POST[$field['field']])) {
             $post->{$field}['field'] = set_value($field['field']);
         }
     }
     $post->created_on = $created_on;
     $this->template->title($this->module_details['name'], sprintf(lang('blog_edit_title'), $post->title))->append_metadata($this->load->view('fragments/wysiwyg', $this->data, TRUE))->append_js('jquery/jquery.tagsinput.js')->append_js('module::blog_form.js')->append_css('jquery/jquery.tagsinput.css')->set('post', $post)->build('admin/form');
 }
Example #5
0
 /**
  * Update an existing comment
  *
  * @access public
  * @param int $id The ID of the comment to update
  * @param array $input The array containing the data to update
  * @return void
  */
 public function update($id, $input)
 {
     $this->load->helper('date');
     return parent::update($id, array('name' => isset($input['name']) ? ucwords(strtolower(strip_tags($input['name']))) : '', 'email' => isset($input['email']) ? strtolower($input['email']) : '', 'website' => isset($input['website']) ? prep_url(strip_tags($input['website'])) : '', 'comment' => htmlspecialchars($input['comment'], NULL, FALSE), 'parsed' => parse_markdown(htmlspecialchars($input['comment'], NULL, FALSE))));
 }
Example #6
0
 /**
  * Create a new comment
  *
  * @param type $module The module that has a comment-able model.
  * @param int $id The id for the respective comment-able model of a module.
  */
 public function create($module = 'home', $id = 0)
 {
     // Set the comment data
     $comment = $_POST;
     // Logged in? in which case, we already know their name and email
     if ($this->ion_auth->logged_in()) {
         $comment['user_id'] = $this->current_user->id;
         $comment['name'] = $this->current_user->display_name;
         $comment['email'] = $this->current_user->email;
         if (isset($this->current_user->website)) {
             $comment['website'] = $this->current_user->website;
         }
     } else {
         $this->validation_rules[0]['rules'] .= '|required';
         $this->validation_rules[1]['rules'] .= '|required';
     }
     // Set the validation rules
     $this->form_validation->set_rules($this->validation_rules);
     $comment['module'] = $module;
     $comment['module_id'] = $id;
     $comment['is_active'] = (bool) (isset($this->current_user->group) && $this->current_user->group == 'admin' or !$this->settings->moderate_comments);
     // Validate the results
     if ($this->form_validation->run()) {
         // ALLOW ZEH COMMENTS!? >:D
         $result = $this->_allow_comment();
         foreach ($comment as &$data) {
             // Remove {pyro} tags and html
             $data = escape_tags($data);
         }
         // Run Akismet or the crazy CSS bot checker
         if ($result['status'] !== true) {
             $this->session->set_flashdata('comment', $comment);
             $this->session->set_flashdata('error', $result['message']);
         } else {
             // Save the comment
             if ($comment_id = $this->comments_m->insert($comment)) {
                 // Approve the comment straight away
                 if (!$this->settings->moderate_comments or isset($this->current_user->group) && $this->current_user->group == 'admin') {
                     $this->session->set_flashdata('success', lang('comments.add_success'));
                     // Add an event so third-party devs can hook on
                     Events::trigger('comment_approved', $comment);
                 } else {
                     $this->session->set_flashdata('success', lang('comments.add_approve'));
                 }
                 $comment['comment_id'] = $comment_id;
                 // If markdown is allowed we will parse the body for the email
                 if (Settings::get('comment_markdown')) {
                     $comment['comment'] = parse_markdown($comment['comment']);
                 }
                 // Send the notification email
                 $this->_send_email($comment);
             } else {
                 $this->session->set_flashdata('error', lang('comments.add_error'));
             }
         }
     } else {
         $this->session->set_flashdata('error', validation_errors());
         // Loop through each rule
         foreach ($this->validation_rules as $rule) {
             if ($this->input->post($rule['field']) !== FALSE) {
                 $comment[$rule['field']] = escape_tags($this->input->post($rule['field']));
             }
         }
         $this->session->set_flashdata('comment', $comment);
     }
     // If for some reason the post variable doesnt exist, just send to module main page
     $redirect_to = $this->input->post('redirect_to') ? $this->input->post('redirect_to') : $module;
     if ($redirect_to == 'pages') {
         $redirect_to = 'home';
     }
     redirect($redirect_to);
 }
Example #7
0
 /**
  * Edit blog post
  *
  * @param int $id The ID of the blog post to edit
  */
 public function edit($id = 0)
 {
     $id or redirect('admin/blog');
     $post = $this->blog_m->get($id);
     // They are trying to put this live
     if ($post->status != 'live' and $this->input->post('status') == 'live') {
         role_or_die('blog', 'put_live');
     }
     // If we have keywords before the update, we'll want to remove them from keywords_applied
     $old_keywords_hash = trim($post->keywords) != '' ? $post->keywords : null;
     $post->keywords = Keywords::get_string($post->keywords);
     // If we have a useful date, use it
     if ($this->input->post('created_on')) {
         $created_on = strtotime(sprintf('%s %s:%s', $this->input->post('created_on'), $this->input->post('created_on_hour'), $this->input->post('created_on_minute')));
     } else {
         $created_on = $post->created_on;
     }
     // Load up streams
     $this->load->driver('Streams');
     $stream = $this->streams->streams->get_stream('blog', 'blogs');
     $stream_fields = $this->streams_m->get_stream_fields($stream->id, $stream->stream_namespace);
     // Get the validation for our custom blog fields.
     $blog_validation = $this->streams->streams->validation_array($stream->stream_slug, $stream->stream_namespace, 'new');
     $blog_validation = array_merge($this->validation_rules, array('title' => array('field' => 'title', 'label' => 'lang:global:title', 'rules' => 'trim|htmlspecialchars|required|max_length[100]|callback__check_title[' . $id . ']'), 'slug' => array('field' => 'slug', 'label' => 'lang:global:slug', 'rules' => 'trim|required|alpha_dot_dash|max_length[100]|callback__check_slug[' . $id . ']')));
     // Merge and set our validation rules
     $this->form_validation->set_rules(array_merge($this->validation_rules, $blog_validation));
     $hash = $this->input->post('preview_hash');
     if ($this->input->post('status') == 'draft' and $this->input->post('preview_hash') == '') {
         $hash = $this->_preview_hash();
     } elseif ($this->input->post('status') == 'live') {
         $hash = '';
     }
     if ($this->form_validation->run()) {
         $author_id = empty($post->display_name) ? $this->current_user->id : $post->author_id;
         $extra = array('title' => $this->input->post('title'), 'slug' => $this->input->post('slug'), 'category_id' => $this->input->post('category_id'), 'keywords' => Keywords::process($this->input->post('keywords'), $old_keywords_hash), 'body' => $this->input->post('body'), 'status' => $this->input->post('status'), 'created_on' => $created_on, 'updated_on' => $created_on, 'created' => date('Y-m-d H:i:s', $created_on), 'updated' => date('Y-m-d H:i:s', $created_on), 'comments_enabled' => $this->input->post('comments_enabled'), 'author_id' => $author_id, 'type' => $this->input->post('type'), 'parsed' => $this->input->post('type') == 'markdown' ? parse_markdown($this->input->post('body')) : '', 'preview_hash' => $hash);
         if ($this->streams->entries->update_entry($id, $_POST, 'blog', 'blogs', array('updated'), $extra)) {
             $this->session->set_flashdata(array('success' => sprintf(lang('blog:edit_success'), $this->input->post('title'))));
             // Blog article has been updated, may not be anything to do with publishing though
             Events::trigger('post_updated', $id);
             // They are trying to put this live
             if ($post->status != 'live' and $this->input->post('status') == 'live') {
                 // Fire an event, we're posting a new blog!
                 Events::trigger('post_published', $id);
             }
         } else {
             $this->session->set_flashdata('error', lang('blog:edit_error'));
         }
         // Redirect back to the form or main page
         $this->input->post('btnAction') == 'save_exit' ? redirect('admin/blog') : redirect('admin/blog/edit/' . $id);
     }
     // Go through all the known fields and get the post values
     foreach ($this->validation_rules as $key => $field) {
         if (isset($_POST[$field['field']])) {
             $post->{$field}['field'] = set_value($field['field']);
         }
     }
     $post->created_on = $created_on;
     // Set Values
     $values = $this->fields->set_values($stream_fields, $post, 'edit');
     // Run stream field events
     $this->fields->run_field_events($stream_fields, array(), $values);
     $this->template->title($this->module_details['name'], sprintf(lang('blog:edit_title'), $post->title))->append_metadata($this->load->view('fragments/wysiwyg', array(), true))->append_js('jquery/jquery.tagsinput.js')->append_js('module::blog_form.js')->set('stream_fields', $this->streams->fields->get_stream_fields($stream->stream_slug, $stream->stream_namespace, $values, $post->id))->append_css('jquery/jquery.tagsinput.css')->set('post', $post)->build('admin/form');
 }
Example #8
0
 /**
  * Pre Save
  *
  * Process before saving to database. We have a dummy
  * value in the form so this gets processed, but we
  * ignore it and grab all the chunk inputs.
  *
  * @access	public
  * @param	array
  * @return	string
  */
 public function pre_save($raw_input, $field, $stream, $row_id, $input)
 {
     $this->CI->load->model('page_chunk_m');
     $slugs = array('chunk_slug', 'chunk_class', 'chunk_body', 'chunk_type');
     foreach ($slugs as $slug) {
         if (!isset($input[$slug])) {
             $input[$slug] = null;
         }
     }
     $chunk_slugs = $input['chunk_slug'] ? array_values($input['chunk_slug']) : array();
     $chunk_class = $input['chunk_class'] ? array_values($input['chunk_class']) : array();
     $chunk_bodies = $input['chunk_body'] ? array_values($input['chunk_body']) : array();
     $chunk_types = $input['chunk_type'] ? array_values($input['chunk_type']) : array();
     $chunks = array();
     $chunk_bodies_count = count($chunk_bodies);
     for ($i = 0; $i < $chunk_bodies_count; $i++) {
         $chunks[] = (object) array('slug' => !empty($chunk_slugs[$i]) ? $chunk_slugs[$i] : '', 'class' => !empty($chunk_class[$i]) ? $chunk_class[$i] : '', 'type' => !empty($chunk_types[$i]) ? $chunk_types[$i] : '', 'body' => !empty($chunk_bodies[$i]) ? $chunk_bodies[$i] : '');
     }
     // No matter what, we are going to need to get rid of
     // old page chunks.
     $this->CI->page_chunk_m->delete_by('page_id', ci()->page_id);
     // If we have chunks, let's go ahead and add them.
     if ($chunks) {
         $i = 1;
         foreach ($chunks as $chunk) {
             $this->CI->page_chunk_m->insert(array('slug' => preg_replace('/[^a-zA-Z0-9_-]/', '', $chunk->slug), 'class' => preg_replace('/[^a-zA-Z0-9_-\\s]/', '', $chunk->class), 'page_id' => ci()->page_id, 'body' => $chunk->body, 'parsed' => $chunk->type == 'markdown' ? parse_markdown($chunk->body) : '', 'type' => $chunk->type, 'sort' => $i++));
         }
     }
     return '*';
 }
Example #9
0
 /**
  * Update an existing comment
  *
  * @param int $id The ID of the comment to update
  * @param array $input The array containing the data to update
  * @return void
  */
 public function update($id, $input, $skip_validation = false)
 {
     return parent::update($id, array('user_name' => isset($input['user_name']) ? ucwords(strtolower(strip_tags($input['user_name']))) : '', 'user_email' => isset($input['user_email']) ? strtolower($input['user_email']) : '', 'user_website' => isset($input['user_website']) ? prep_url(strip_tags($input['user_website'])) : '', 'comment' => htmlspecialchars($input['comment'], null, false), 'parsed' => parse_markdown(htmlspecialchars($input['comment'], null, false))));
 }
Example #10
0
 /**
  * Edit news post
  *
  * @param int $id The ID of the news post to edit
  */
 public function edit($id = 0)
 {
     $id or redirect('admin/news');
     $post = $this->news_m->get($id);
     // They are trying to put this live
     if ($post->status != 'live' and $this->input->post('status') == 'live') {
         role_or_die('news', 'put_live');
     }
     // If we have keywords before the update, we'll want to remove them from keywords_applied
     $old_keywords_hash = trim($post->keywords) != '' ? $post->keywords : null;
     $post->keywords = Keywords::get_string($post->keywords);
     // If we have a useful date, use it
     if ($this->input->post('created_on')) {
         $created_on = strtotime(sprintf('%s %s:%s', $this->input->post('created_on'), $this->input->post('created_on_hour'), $this->input->post('created_on_minute')));
     } else {
         $created_on = $post->created_on;
     }
     // Load up streams
     $this->load->driver('Streams');
     $stream = $this->streams->streams->get_stream('news', 'news');
     $stream_fields = $this->streams_m->get_stream_fields($stream->id, $stream->stream_namespace);
     // Get the validation for our custom news fields.
     $news_validation = $this->streams->streams->validation_array($stream->stream_slug, $stream->stream_namespace, 'new');
     $news_validation = array_merge($this->validation_rules, array('title' => array('field' => 'title', 'label' => 'lang:global:title', 'rules' => 'trim|htmlspecialchars|required|max_length[100]|callback__check_title[' . $id . ']'), 'slug' => array('field' => 'slug', 'label' => 'lang:global:slug', 'rules' => 'trim|required|alpha_dot_dash|max_length[100]|callback__check_slug[' . $id . ']')));
     // Upload image validation
     if ($_FILES) {
         $allowed = array('.jpg', '.jpeg', '.gif', '.png');
         $upload_key = array_keys($_FILES);
         if (!empty($_FILES[$upload_key[0]]['name']) && $_FILES[$upload_key[0]]['error'] == UPLOAD_ERR_OK) {
             $ext = strtolower(strrchr($_FILES[$upload_key[0]]['name'], '.'));
             if (!in_array($ext, $allowed)) {
                 $this->form_validation->set_error('Invalid image file extension. Allowed extension are .jpg, .jpeg, .png, .gif');
             }
         }
     }
     // Merge and set our validation rules
     $this->form_validation->set_rules(array_merge($this->validation_rules, $news_validation));
     $hash = $this->input->post('preview_hash');
     if ($this->input->post('status') == 'draft' and $this->input->post('preview_hash') == '') {
         $hash = $this->_preview_hash();
     } elseif ($this->input->post('status') == 'live') {
         $hash = '';
     }
     if ($this->form_validation->run()) {
         $author_id = empty($post->display_name) ? $this->current_user->id : $post->author_id;
         $extra = array('title' => $this->input->post('title'), 'slug' => $this->input->post('slug'), 'category_id' => $this->input->post('category_id'), 'keywords' => Keywords::process($this->input->post('keywords'), $old_keywords_hash), 'body' => $this->input->post('body'), 'status' => $this->input->post('status'), 'created_on' => $created_on, 'updated_on' => $created_on, 'created' => date('Y-m-d H:i:s', $created_on), 'updated' => date('Y-m-d H:i:s', $created_on), 'comments_enabled' => $this->input->post('comments_enabled'), 'author_id' => $author_id, 'type' => $this->input->post('type'), 'parsed' => $this->input->post('type') == 'markdown' ? parse_markdown($this->input->post('body')) : '', 'preview_hash' => $hash);
         if ($this->streams->entries->update_entry($id, $_POST, 'news', 'news', array('updated'), $extra)) {
             // Upload image
             if ($_FILES) {
                 $upload_key = array_keys($_FILES);
                 if (!empty($_FILES[$upload_key[0]]['name']) && $_FILES[$upload_key[0]]['error'] == UPLOAD_ERR_OK) {
                     $tmp_name = $_FILES[$upload_key[0]]['tmp_name'];
                     $ext = strtolower(strrchr($_FILES[$upload_key[0]]['name'], '.'));
                     $file_name = 'IMG_' . date('Ymd_His') . $ext;
                     if (@move_uploaded_file($tmp_name, $this->_news_base_file_dir . '/' . $file_name)) {
                         @unlink($this->_news_base_file_dir . '/' . $post->image);
                         $this->db->update('news', array('image' => $file_name), array('id' => $id));
                     }
                 }
             }
             $this->session->set_flashdata(array('success' => sprintf(lang('news:edit_success'), $this->input->post('title'))));
             // news article has been updated, may not be anything to do with publishing though
             Events::trigger('post_updated', $id);
             // They are trying to put this live
             if ($post->status != 'live' and $this->input->post('status') == 'live') {
                 // Fire an event, we're posting a new news!
                 Events::trigger('post_published', $id);
             }
         } else {
             $this->session->set_flashdata('error', lang('news:edit_error'));
         }
         // Redirect back to the form or main page
         $this->input->post('btnAction') == 'save_exit' ? redirect('admin/news') : redirect('admin/news/edit/' . $id);
     }
     // Go through all the known fields and get the post values
     foreach ($this->validation_rules as $key => $field) {
         if (isset($_POST[$field['field']])) {
             $post->{$field}['field'] = set_value($field['field']);
         }
     }
     if (file_exists(UPLOAD_PATH . 'news/' . $post->image) && is_file(UPLOAD_PATH . 'news/' . $post->image)) {
         $image = $this->_news_base_file_dir . '/' . $post->image;
         $this->load->model('files/image_m');
         $post->image = $this->_news_base_file_url . '/' . $post->image;
         $post->thumb = $this->image_m->resize($image, 100, 100, 'crop');
     }
     $post->created_on = $created_on;
     // Set Values
     $values = $this->fields->set_values($stream_fields, $post, 'edit');
     // Run stream field events
     $this->fields->run_field_events($stream_fields, array(), $values);
     $this->template->title($this->module_details['name'], sprintf(lang('news:edit_title'), $post->title))->append_metadata($this->load->view('fragments/wysiwyg', array(), true))->append_js('jquery/jquery.tagsinput.js')->append_js('module::news_form.js')->set('stream_fields', $this->streams->fields->get_stream_fields($stream->stream_slug, $stream->stream_namespace, $values, $post->id))->append_css('jquery/jquery.tagsinput.css')->set('post', $post)->build('admin/form');
 }
Example #11
0
 /**
  * Markdown
  *
  * Takes content and formats it with the Markdown Library.
  *
  * Usage:
  * {{ format:markdown }}
  *   Formatted **text**
  * {{ /format:markdown }}
  *
  * Outputs: <p>Formatted <strong>text</strong></p>
  *
  * @return string The HTML generated by the Markdown Library.
  */
 public function markdown()
 {
     $this->load->helper('markdown');
     $content = $this->attribute('content', $this->content());
     return parse_markdown(trim($content));
 }
Example #12
0
 /**
  * Update a Page
  *
  * @access public
  * @param int $id The ID of the page to update
  * @param array $input The data to update
  * @return void
  */
 public function update($id = 0, $input = array(), $chunks = array())
 {
     $this->db->trans_start();
     if (!empty($input['is_home'])) {
         // Remove other homepages
         $this->db->where('is_home', 1)->update($this->_table, array('is_home' => 0));
     }
     parent::update($id, array('title' => $input['title'], 'slug' => $input['slug'], 'uri' => NULL, 'parent_id' => $input['parent_id'], 'layout_id' => $input['layout_id'], 'css' => $input['css'], 'js' => $input['js'], 'meta_title' => $input['meta_title'], 'meta_keywords' => $input['meta_keywords'], 'meta_description' => $input['meta_description'], 'restricted_to' => $input['restricted_to'], 'rss_enabled' => (int) (!empty($input['rss_enabled'])), 'comments_enabled' => (int) (!empty($input['comments_enabled'])), 'is_home' => (int) (!empty($input['is_home'])), 'status' => $input['status'], 'updated_on' => now()));
     $this->build_lookup($id);
     if ($chunks) {
         // Remove the old chunks
         $this->db->delete('page_chunks', array('page_id' => $id));
         // And add the new ones
         $i = 1;
         foreach ($chunks as $chunk) {
             $this->db->insert('page_chunks', array('page_id' => $id, 'sort' => $i++, 'slug' => preg_replace('/[^a-zA-Z0-9_-\\s]/', '', $chunk->slug), 'body' => $chunk->body, 'type' => $chunk->type, 'parsed' => $chunk->type == 'markdown' ? parse_markdown($chunk->body) : ''));
         }
     }
     // Wipe cache for this model, the content has changd
     $this->pyrocache->delete_all('page_m');
     $this->pyrocache->delete_all('navigation_m');
     $this->db->trans_complete();
     return $this->db->trans_status() === FALSE ? FALSE : TRUE;
 }
Example #13
0
 /**
  * Create a new comment
  *
  * @param type $module The module that has a comment-able model.
  * @param int $id The id for the respective comment-able model of a module.
  */
 public function create($module = null)
 {
     if (!$module or !$this->input->post('entry')) {
         show_404();
     }
     // Get information back from the entry hash
     // @HACK This should be part of the controllers lib, but controllers & libs cannot share a name
     $entry = unserialize($this->encrypt->decode($this->input->post('entry')));
     $comment = array('module' => $module, 'entry_id' => $entry['id'], 'entry_title' => $entry['title'], 'entry_key' => $entry['singular'], 'entry_plural' => $entry['plural'], 'uri' => $entry['uri'], 'comment' => $this->input->post('comment'), 'is_active' => (bool) (isset($this->current_user->group) and $this->current_user->group == 'admin' or !Settings::get('moderate_comments')));
     // Logged in? in which case, we already know their name and email
     if ($this->current_user) {
         $comment['user_id'] = $this->current_user->id;
         $comment['user_name'] = $this->current_user->display_name;
         $comment['user_email'] = $this->current_user->email;
         $comment['user_website'] = $this->current_user->website;
         if (isset($this->current_user->website)) {
             $comment['website'] = $this->current_user->website;
         }
     } else {
         $this->validation_rules[0]['rules'] .= '|required';
         $this->validation_rules[1]['rules'] .= '|required';
         $comment['user_name'] = $this->input->post('name');
         $comment['user_email'] = $this->input->post('email');
         $comment['user_website'] = $this->input->post('website');
     }
     // Set the validation rules
     $this->form_validation->set_rules($this->validation_rules);
     // Validate the results
     if ($this->form_validation->run()) {
         // ALLOW ZEH COMMENTS!? >:D
         $result = $this->_allow_comment();
         foreach ($comment as &$data) {
             // Remove {pyro} tags and html
             $data = escape_tags($data);
         }
         // Run Akismet or the crazy CSS bot checker
         if ($result['status'] !== true) {
             $this->session->set_flashdata('comment', $comment);
             $this->session->set_flashdata('error', $result['message']);
             $this->_repopulate_comment();
         } else {
             // Save the comment
             if ($comment_id = $this->comment_m->insert($comment)) {
                 // Approve the comment straight away
                 if (!$this->settings->moderate_comments or isset($this->current_user->group) and $this->current_user->group == 'admin') {
                     $this->session->set_flashdata('success', lang('comments:add_success'));
                     // Add an event so third-party devs can hook on
                     Events::trigger('comment_approved', $comment);
                 } else {
                     $this->session->set_flashdata('success', lang('comments:add_approve'));
                 }
                 $comment['comment_id'] = $comment_id;
                 // If markdown is allowed we will parse the body for the email
                 if (Settings::get('comment_markdown')) {
                     $comment['comment'] = parse_markdown($comment['comment']);
                 }
                 // Send the notification email
                 $this->_send_email($comment, $entry);
             } else {
                 $this->session->set_flashdata('error', lang('comments:add_error'));
                 $this->_repopulate_comment();
             }
         }
     } else {
         $this->session->set_flashdata('error', validation_errors());
         $this->_repopulate_comment();
     }
     // If for some reason the post variable doesnt exist, just send to module main page
     $uri = !empty($entry['uri']) ? $entry['uri'] : $module;
     // If this is default to pages then just send it home instead
     $uri === 'pages' and $uri = '/';
     redirect($uri);
 }
Example #14
0
 /**
  * Process before outputting
  *
  * @access  public
  * @param   array
  * @return  string
  */
 public function pre_output($input)
 {
     $CI =& get_instance();
     $CI->load->helper('markdown');
     return parse_markdown($input);
 }
Example #15
0
 /**
  * View topic
  * @access public
  * @param int $topic_id the topic id
  * @param var $option options for comments - add, delete
  * @param int $id the comment id
  * @return void
  */
 public function view($topic_id = 0, $option = NULL, $id = 0)
 {
     $created_now = now();
     $add_comment = $this->input->post('add_comment');
     if (!$topic_id or !($topic = $this->db->get_where('discussions', array('id' => $topic_id, 'type' => 'topic'))->first_row())) {
         // nothing here. better redirect.
         redirect('admin/discussion');
     }
     // add comment
     if ($option === 'add') {
         $this->form_validation->set_rules($this->add_comment_rules);
         if ($this->form_validation->run()) {
             $rqstObj = array('type' => 'comment', 'belongs_to' => $topic_id, 'desc' => $this->input->post('add_comment'), 'parsed' => parse_markdown($this->input->post('add_comment')), 'created_on' => $created_now, 'created_by' => $this->current_user->id, 'user_email' => $this->current_user->email, 'display_name' => $this->current_user->display_name);
             // insert in the same table with type comment
             $comment_id = $this->db->insert('discussions', $rqstObj);
             if ($comment_id) {
                 // go and update the main record
                 $this->db->where('id', $topic_id);
                 $update = $this->db->update('discussions', array('last_updated' => $created_now, 'tot_comments' => $topic->tot_comments + 1));
                 $this->session->set_flashdata('success', $this->lang->line('topic.comment_success'));
                 redirect('admin/discussion/view/' . $topic_id);
             } else {
                 // not OK. display error.
                 $this->session->set_flashdata('error', $this->lang->line('topic.comment_error'));
             }
         } else {
             // validation fails. get the fields and populate it again.
             foreach ($this->add_comment_rules as $key => $field) {
                 $field['field'] = set_value($field['field']);
             }
         }
     } else {
         if ($option === 'delete') {
             $query = $this->discussion_m->get_where('discussions', array('id' => $id, 'belongs_to' => $topic_id))->first_row();
             if (!$query or $this->current_user->id != $query->created_by) {
                 // prevent direct access via URL. only HE is authorized to delete the comment.
                 redirect('admin/discussion');
             }
             $hrc = $this->db->delete('discussions', array('belongs_to' => $topic_id, 'id' => $id));
             if ($hrc) {
                 $this->session->set_flashdata('success', $this->lang->line('topic.comment_delete_success'));
             } else {
                 $this->session->set_flashdata('error', $this->lang->line('topic.comment_delete_success'));
             }
             redirect('admin/discussion/view/' . $topic_id);
         }
     }
     // get the comments for the view page
     $comments = $this->discussion_m->get_comments($topic_id);
     $this->template->title($this->module_details['name'], $topic->title)->append_metadata($this->load->view('fragments/wysiwyg', $this->data, TRUE))->append_css('module::discussion.css')->set('topic', $topic)->set('add_comment', $add_comment)->set('comments', $comments)->build('admin/view_topic');
 }
Example #16
0
 /**
  * Set the README text for a version of this spark
  * @param string $version The version to set the readme for
  * @param string $readme The readme MARKDOWN
  */
 public function setVersionReadme($version, $readme)
 {
     $CI =& get_instance();
     $CI->load->spark('markdown/1.1');
     $CI->db->where('spark_id', $this->id);
     $CI->db->where('version', $version);
     $CI->db->update('versions', array('readme' => $readme, 'readme_html' => parse_markdown($readme)));
 }