public function to_array($template_ids = false) { $out = parent::to_array(); if (PerchUtil::count($template_ids) && in_array('postURL', $template_ids)) { $API = new PerchAPI(1.0, 'perch_blog'); $Posts = new PerchBlog_Posts($API); $Post = $Posts->find($this->postID()); if (is_object($Post)) { $out['postURL'] = $Post->postURL(); } } if ($out['commentDynamicFields'] != '') { $dynamic_fields = PerchUtil::json_safe_decode($out['commentDynamicFields'], true); if (PerchUtil::count($dynamic_fields)) { foreach ($dynamic_fields as $key => $value) { $out['perch_' . $key] = $value; } } $out = array_merge($dynamic_fields, $out); } return $out; }
<?php $HTML = $API->get('HTML'); // Try to update $Settings = $API->get('Settings'); if ($Settings->get('perch_blog_update')->val() != '5.0') { PerchUtil::redirect($API->app_path() . '/update/'); } $Blog = new PerchBlog_Posts($API); $Paging = $API->get('Paging'); $Paging->set_per_page(15); $Categories = new PerchCategories_Categories(); $categories = $Categories->get_for_set('blog'); $Sections = new PerchBlog_Sections($API); $sections = $Sections->all(); $Lang = $API->get('Lang'); $posts = array(); $filter = 'all'; if (isset($_GET['category']) && $_GET['category'] != '') { $filter = 'category'; $category = $_GET['category']; } if (isset($_GET['section']) && $_GET['section'] != '') { $filter = 'section'; $section = $_GET['section']; } if (isset($_GET['status']) && $_GET['status'] != '') { $filter = 'status'; $status = $_GET['status']; } switch ($filter) {
<?php $HTML = $API->get('HTML'); $Paging = $API->get('Paging'); $Paging->set_per_page(20); $Comments = new PerchBlog_Comments($API); $Posts = new PerchBlog_Posts($API); $Form = $API->get('Form'); if ($Form->posted() && $Form->validate()) { $comments = $Form->find_items('comment-', true); if (PerchUtil::count($comments)) { $status = $_POST['commentStatus']; foreach ($comments as $commentID) { $Comment = $Comments->find($commentID); if ($status == 'DELETE') { // was the comment live? If so update the post's comment count. if ($Comment->commentStatus() == 'LIVE') { $Post = $Posts->find($Comment->postID()); if ($Post) { $Post->update_comment_count(); } } $Comment->delete(); } else { $Comment->set_status($status); } } } } $pending_comment_count = $Comments->get_count('PENDING'); $comments = array();
<?php $Blogs = new PerchBlog_Blogs($API); $Posts = new PerchBlog_Posts($API); $message = false; $Authors = new PerchBlog_Authors(); $Author = $Authors->find_or_create($CurrentUser); $HTML = $API->get('HTML'); if (!$CurrentUser->has_priv('perch_blog.post.create')) { PerchUtil::redirect($API->app_path()); } if (isset($_GET['id']) && $_GET['id'] != '') { $postID = (int) $_GET['id']; $Post = $Posts->find($postID, true); $details = $Post->to_array(); $template = $Post->postMetaTemplate(); } $Blog = false; if (PERCH_RUNWAY) { if ($Post) { $Blog = $Post->get_blog(); } else { if (PerchUtil::get('blog')) { $Blog = $Blogs->find((int) PerchUtil::get('blog')); } } } if (!$Blog) { $Blog = $Blogs->find(1); } $Sections = new PerchBlog_Sections();
public function receive_new_comment($SubmittedForm) { $input = $SubmittedForm->data; if ($input['postID']) { $Posts = new PerchBlog_Posts(); $Post = $Posts->find((int) $input['postID']); if (is_object($Post)) { $data = array(); $data['postID'] = $Post->id(); $data['commentDateTime'] = date('Y-m-d H:i:s'); foreach ($this->static_fields as $field) { if (!isset($data[$field])) { if (isset($input[$field]) && $input[$field] != '') { $data[$field] = trim($input[$field]); } } } // dynamic fields $dynamic_fields = array(); foreach ($input as $field => $val) { if (!isset($data[$field])) { $dynamic_fields[$field] = trim($val); } } $data['commentDynamicFields'] = PerchUtil::json_safe_encode($dynamic_fields); // Anti-spam $Settings = $this->api->get('Settings'); $akismetAPIKey = $Settings->get('perch_blog_akismet_key')->val(); $spam = false; $antispam = $SubmittedForm->get_antispam_values(); $environment = $_SERVER; $spam_data = array(); $spam_data['fields'] = $antispam; $spam_data['environment'] = $environment; $data['commentSpamData'] = PerchUtil::json_safe_encode($spam_data); $data['commentIP'] = ip2long($_SERVER['REMOTE_ADDR']); $spam = $this->_check_for_spam($antispam, $environment, $akismetAPIKey); if ($spam) { $data['commentStatus'] = 'SPAM'; } else { $Users = new PerchUsers(); $CurrentUser = $Users->get_current_user(); if (is_object($CurrentUser) && $CurrentUser->logged_in()) { $data['commentStatus'] = 'LIVE'; } else { $data['commentStatus'] = 'PENDING'; } } foreach ($data as $key => $val) { switch ($key) { case 'commentHTML': if (!class_exists('\\Netcarver\\Textile\\Parser', false) && class_exists('Textile', true)) { // sneaky autoloading hack } if (PERCH_HTML5) { $Textile = new \Netcarver\Textile\Parser('html5'); } else { $Textile = new \Netcarver\Textile\Parser(); } if (PERCH_RWD) { $val = $Textile->setDimensionlessImages(true)->textileRestricted($val); } else { $val = $Textile->textileRestricted($val); } if (defined('PERCH_XHTML_MARKUP') && PERCH_XHTML_MARKUP == false) { $val = str_replace(' />', '>', $val); } break; case 'commentURL': if (!parse_url($val, PHP_URL_SCHEME)) { $val = 'http://' . $val; } if (!parse_url($val, PHP_URL_SCHEME)) { $val = ''; } $val = strtolower($val); break; case 'commentEmail': $val = strtolower($val); break; } $data[$key] = $val; } $r = $this->create($data); $Post->update_comment_count(); if (is_object($r) && $r->commentStatus() == 'PENDING') { $this->_notify_author_of_comment($Post, $r); } return $r; } } PerchUtil::debug($SubmittedForm); }
$cats = $db->get_rows('SELECT * FROM ' . PERCH_DB_PREFIX . 'blog_categories'); if (PerchUtil::count($cats)) { foreach ($cats as $cat) { $dynfields = '[]'; if ($cat['categoryDynamicFields']) { $dynfields = $cat['categoryDynamicFields']; } $NewCat = $Core_Categories->create(array('setID' => $Set->id(), 'catParentID' => 0, 'catTitle' => $cat['categoryTitle'], 'catSlug' => $cat['categorySlug'], 'catPath' => '/blog/' . $cat['categorySlug'] . '/', 'catDynamicFields' => $dynfields)); if (is_object($NewCat)) { $db->update(PERCH_DB_PREFIX . 'blog_categories', array('categoryCoreID' => $NewCat->id()), 'categoryID', $cat['categoryID']); } } } } } $Posts = new PerchBlog_Posts($API); $posts = $Posts->all($Paging); if (PerchUtil::count($posts)) { foreach ($posts as $Post) { $Post->import_legacy_categories(); $Post->index(); } } if ($Paging->is_last_page()) { $Sections = new PerchBlog_Sections($API); $Sections->update_post_counts(); $Posts->update_category_counts(); $Authors = new PerchBlog_Authors($API); $Authors->update_post_counts(); $Settings->set('perch_blog_update', '5.0'); }
<?php include 'PerchBlog_Posts.class.php'; include 'PerchBlog_Post.class.php'; include 'PerchBlog_Authors.class.php'; include 'PerchBlog_Author.class.php'; include 'PerchBlog_Comments.class.php'; include 'PerchBlog_Comment.class.php'; $API = new PerchAPI(1, 'perch_blog'); $Lang = $API->get('Lang'); $Posts = new PerchBlog_Posts($API); $posts = $Posts->get_recent(5); $Comments = new PerchBlog_Comments($API); $comment_count = $Comments->get_count(); $comments = array(); $comments['Pending'] = $Comments->get_count('PENDING'); $comments['Live'] = $Comments->get_count('LIVE'); $comments['Rejected'] = $Comments->get_count('REJECTED'); $comments['Spam'] = $Comments->get_count('SPAM'); ?> <div class="widget"> <h2> <?php echo $Lang->get('Blog'); ?> <a href="<?php echo PerchUtil::html(PERCH_LOGINPATH . '/addons/apps/perch_blog/edit/'); ?> " class="add button"><?php echo $Lang->get('Add Post'); ?>
function perch_blog_author_for_post($id_or_slug, $opts = array(), $return = false) { $id_or_slug = rtrim($id_or_slug, '/'); $default_opts = array('template' => 'author.html', 'skip-template' => false, 'split-items' => false, 'cache' => true); if (is_array($opts)) { $opts = array_merge($default_opts, $opts); } else { $opts = $default_opts; } if ($opts['skip-template'] || $opts['split-items']) { $return = true; } $cache = false; if ($opts['cache']) { $cache_key = 'perch_blog_author_for_post' . md5($id_or_slug . serialize($opts)); $cache = PerchBlog_Cache::get_static($cache_key, 10); } if ($cache) { if ($return) { return $cache; } echo $cache; return ''; } $API = new PerchAPI(1.0, 'perch_blog'); $BlogPosts = new PerchBlog_Posts($API); if (is_numeric($id_or_slug)) { $Post = $BlogPosts->find($id_or_slug); } else { $Post = $BlogPosts->find_by_slug($id_or_slug); } if (is_object($Post)) { $Authors = new PerchBlog_Authors(); $Author = $Authors->find($Post->authorID()); if (is_object($Author)) { if ($opts['skip-template']) { return $Author->to_array(); } $Template = $API->get('Template'); $Template->set('blog/' . $opts['template'], 'blog'); $r = $Template->render($Author); if ($r != '') { PerchBlog_Cache::save_static($cache_key, $r); } if ($return) { return $r; } echo $r; } } return false; }
public function import_from_wp($wordpress_file, $format = "textile", $callback = false, $sectionID = 1) { $out = array(); // LOAD XML $xml = simplexml_load_file(PerchUtil::file_path(PERCH_PATH . '/addons/apps/' . $this->api->app_id . '/import_data/' . $wordpress_file)); // AUTHORS $Authors = new PerchBlog_Authors($this->api); foreach ($xml->channel->children('wp', true) as $tag) { if ($tag->getName() == 'author') { $data = array(); $data['authorEmail'] = (string) $tag->author_email; $data['authorSlug'] = PerchUtil::urlify((string) $tag->author_display_name); $data['authorGivenName'] = (string) $tag->author_first_name; $data['authorFamilyName'] = (string) $tag->author_last_name; $data['authorImportRef'] = (string) $tag->author_login; if ($data['authorGivenName'] == '') { $data['authorGivenName'] = (string) $tag->author_login; } $Author = $Authors->find_or_create_by_email((string) $tag->author_email, $data); if ($Author) { $out[] = array('type' => 'success', 'messages' => array('Author ' . (string) $tag->author_display_name, 'Successfully imported')); } } } // POSTS $Posts = new PerchBlog_Posts($this->api); $Template = $this->api->get('Template'); $Template->set('blog/post.html', 'blog'); foreach ($xml->channel->item as $item) { $post = array(); $post['postTitle'] = (string) $item->title; $post['postTags'] = ''; $post['postLegacyURL'] = parse_url((string) $item->link, PHP_URL_PATH); $post_type = false; foreach ($item->children('wp', true) as $tag) { $tagName = $tag->getName(); switch ($tagName) { case 'post_id': $post['postImportID'] = (string) $tag; break; case 'post_type': $post_type = (string) $tag; break; case 'post_date_gmt': $val = strtotime((string) $tag); if ($val) { $post['postDateTime'] = date('Y-m-d H:i:s', $val); } break; case 'post_date': $val = strtotime((string) $tag); if ($val) { $post['postDateTime'] = date('Y-m-d H:i:s', $val); } break; case 'comment_status': $val = (string) $tag; if ($val == 'open') { $post['postAllowComments'] = '1'; } else { $post['postAllowComments'] = '0'; } break; case 'post_name': $post['postSlug'] = (string) $tag; break; case 'status': $val = (string) $tag; $post['postStatus'] = 'Draft'; if ($val == 'publish') { $post['postStatus'] = 'Published'; } break; } } // if it's not of type 'post', skip. if ($post_type != 'post') { continue; } // At this point, check we don't already have the post (as we know have the postImportID to identify it) if (isset($post['postImportID'])) { $Post = $Posts->find_by_importID($post['postImportID']); if (is_object($Post)) { $out[] = array('type' => 'success', 'messages' => array('Post ' . $Post->postTitle(), 'Already imported')); continue; } } foreach ($item->children('dc', true) as $tag) { $tagName = $tag->getName(); switch ($tagName) { case 'creator': $val = (string) $tag; $Author = $Authors->get_one_by('authorImportRef', $val); if (is_object($Author)) { $post['authorID'] = $Author->id(); } break; } } foreach ($item->children('content', true) as $tag) { $tagName = $tag->getName(); switch ($tagName) { case 'encoded': $raw = (string) $tag; if ($format == 'textile') { $html = PerchUtil::text_to_html($raw); $post['postDescRaw'] = $raw; $post['postDescHTML'] = $html; } else { $post['postDescRaw'] = $raw; $post['postDescHTML'] = $raw; } break; } } foreach ($item->children('excerpt', true) as $tag) { $tagName = $tag->getName(); switch ($tagName) { case 'encoded': $raw = (string) $tag; $html = PerchUtil::text_to_html($raw); $fields = array(); $fields['excerpt'] = array(); if ($format == 'textile') { $fields['excerpt']['raw'] = $raw; $fields['excerpt']['processed'] = $html; } else { $fields['excerpt']['raw'] = $html; $fields['excerpt']['processed'] = $html; } $post['postDynamicFields'] = PerchUtil::json_safe_encode($fields); break; } } // Callbacks if ($callback) { $post = call_user_func($callback, $post, $Template); } // Section $post['sectionID'] = $sectionID; // Create the post $Post = $Posts->create($post, $Template); if (is_object($Post)) { $out[] = array('type' => 'success', 'messages' => array('Post ' . $Post->postTitle(), 'Successfully imported')); // CATEGORIES AND TAGS $Categories = new PerchCategories_Categories(); $Tags = new PerchBlog_Tags($this->api); $postTags = array(); $cat_ids = array(); foreach ($item->category as $category) { $attributes = $category->attributes(); $slug = (string) $attributes['nicename']; $label = (string) $category; switch ((string) $attributes['domain']) { case 'post_tag': $Tag = $Tags->find_or_create($slug, $label); if (is_object($Tag)) { $postTags[] = $Tag->tagSlug(); $out[] = array('type' => 'success', 'messages' => array('Tag ' . $Tag->tagSlug(), 'Successfully imported')); } break; case 'category': PerchUtil::debug("Find or create {$slug}", 'notice'); $Category = $Categories->find_or_create('blog/' . $slug . '/', $label); if (is_object($Category)) { $cat_ids[] = $Category->id(); $out[] = array('type' => 'success', 'messages' => array('Category ' . $label, 'Successfully imported')); } break; } } if (PerchUtil::count($postTags)) { $post['postTags'] = implode(', ', $postTags); } if (PerchUtil::count($cat_ids)) { $fields['categories'] = $cat_ids; $post['postDynamicFields'] = PerchUtil::json_safe_encode($fields); } $Post->Template = $Template; $Post->update($post); $Post->index($Template); // COMMENTS $Comments = new PerchBlog_Comments($this->api); foreach ($item->children('wp', true) as $tag) { $tagName = $tag->getName(); if ($tagName == 'comment') { if ((string) $tag->comment_type == 'pingback') { continue; // this is a pingback, so skip it. } $html = PerchUtil::text_to_html((string) $tag->comment_content); $comment = array(); $comment['postID'] = $Post->id(); $comment['commentName'] = (string) $tag->comment_author; $comment['commentEmail'] = (string) $tag->comment_author_email; $comment['commentURL'] = (string) $tag->comment_author_url; $comment['commentIP'] = ip2long((string) $tag->comment_author_IP); $comment['commentDateTime'] = date('Y-m-d H:i:s', strtotime((string) $tag->comment_date_gmt)); $comment['commentHTML'] = $html; $comment['commentSpamData'] = ''; $comment['commentDynamicFields'] = ''; if ((string) $tag->comment_approved == '1') { $comment['commentStatus'] = 'LIVE'; $Comment = $Comments->create($comment); $out[] = array('type' => 'success', 'messages' => array('Comment from ' . $comment['commentName'], 'Successfully imported')); } } } $Post->update_comment_count(); } } return $out; }
<?php $Blog = new PerchBlog_Posts($API); $Authors = new PerchBlog_Authors($API); $HTML = $API->get('HTML'); $Form = $API->get('Form'); $message = false; if (!$CurrentUser->has_priv('perch_blog.post.delete')) { PerchUtil::redirect($API->app_path()); } if (isset($_GET['id']) && $_GET['id'] != '') { $Post = $Blog->find($_GET['id'], true); } if (!is_object($Post)) { PerchUtil::redirect($API->app_path()); } $Form->set_name('delete'); if ($Form->submitted()) { if (is_object($Post)) { $Post->delete(); $Blog->update_category_counts(); $Authors->update_post_counts(); if ($Form->submitted_via_ajax) { echo $API->app_path() . '/'; exit; } else { PerchUtil::redirect($API->app_path() . '/'); } } else { $message = $HTML->failure_message('Sorry, that post could not be deleted.'); }
<?php $HTML = $API->get('HTML'); // Try to update $Settings = $API->get('Settings'); if ($Settings->get('perch_blog_update')->val() != '5.0.1') { PerchUtil::redirect($API->app_path() . '/update/'); } $Posts = new PerchBlog_Posts($API); $Blogs = new PerchBlog_Blogs($API); $blogs = $Blogs->all(); if (!PerchUtil::count($blogs)) { $Posts->attempt_install(); $blogs = $Blogs->all(); } $Paging = $API->get('Paging'); $Paging->set_per_page(15); $Blog = false; if (PERCH_RUNWAY) { if (PerchUtil::get('blog')) { $Blog = $Blogs->get_one_by('blogSlug', PerchUtil::get('blog')); } } if (!$Blog) { $Blog = $Blogs->find(1); } $Categories = new PerchCategories_Categories(); $categories = $Categories->get_for_set($Blog->setSlug()); $Sections = new PerchBlog_Sections($API); $sections = $Sections->get_by('blogID', (int) $Blog->id()); $Lang = $API->get('Lang');