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;
 }
예제 #2
0
<?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();
예제 #4
0
<?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');
}
예제 #7
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');
?>
예제 #8
0
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;
}
예제 #9
0
 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;
 }
예제 #10
0
<?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.');
    }
예제 #11
0
<?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');