_log($args);
global $wpdb;
/**
* algorithm
* 1. create post using wp_insert_post (insert tags also here itself)
* 2. use wp_create_categories() to create(not exists) and insert in the post
* 3. insert meta values
*/
include_once ABSPATH . 'wp-admin/includes/taxonomy.php';
include_once ABSPATH . 'wp-admin/includes/image.php';
include_once ABSPATH . 'wp-admin/includes/file.php';
$post_struct = $args['post_data'];
$post_data = $post_struct['post_data'];
$new_custom = $post_struct['post_extras']['post_meta'];
$post_categories = explode(',', $post_struct['post_extras']['post_categories']);
$post_atta_img = $post_struct['post_extras']['post_atta_images'];
$post_upload_dir = $post_struct['post_extras']['post_upload_dir'];
$post_checksum = $post_struct['post_extras']['post_checksum'];
$post_featured_img = $post_struct['post_extras']['featured_img'];
$upload = wp_upload_dir();
// create dynamic url RegExp
$mwp_base_url = parse_url($post_upload_dir['url']);
$mwp_regexp_url = $mwp_base_url['host'] . $mwp_base_url['path'];
$rep = array(
'/',
'+',
'.',
':',
'?'
);
$with = array(
'\/',
'\+',
'\.',
'\:',
'\?'
);
$mwp_regexp_url = str_replace($rep, $with, $mwp_regexp_url);
// rename all src ../wp-content/ with hostname/wp-content/
$mmb_dot_url = '..' . $mmb_base_url['path'];
$mmb_dot_url = str_replace($rep, $with, $mmb_dot_url);
$dot_match_count = preg_match_all('/(]+href=\"([^"]+)\"[^>]*>)?(<\s*img.[^\/>]*src="([^"]*' . $mmb_dot_url . '[^\s]+\.(jpg|jpeg|png|gif|bmp))"[^>]*>)/ixu', $post_data['post_content'], $dot_get_urls, PREG_SET_ORDER);
if ($dot_match_count > 0) {
foreach ($dot_get_urls as $dot_url) {
$match_dot = '/' . str_replace($rep, $with, $dot_url[4]) . '/';
$replace_dot = 'http://' . $mmb_base_url['host'] . substr($dot_url[4], 2, strlen($dot_url[4]));
$post_data['post_content'] = preg_replace($match_dot, $replace_dot, $post_data['post_content']);
if ($dot_url[1] != '') {
$match_dot_a = '/' . str_replace($rep, $with, $dot_url[2]) . '/';
$replace_dot_a = 'http://' . $mmb_base_url['host'] . substr($dot_url[2], 2, strlen($dot_url[2]));
$post_data['post_content'] = preg_replace($match_dot_a, $replace_dot_a, $post_data['post_content']);
}
}
}
//to find all the images
$match_count = preg_match_all('/(]+href=\"([^"]+)\"[^>]*>)?(<\s*img.[^\/>]*src="([^"]+' . $mmb_regexp_url . '[^\s]+\.(jpg|jpeg|png|gif|bmp))"[^>]*>)/ixu', $post_data['post_content'], $get_urls, PREG_SET_ORDER);
if ($match_count > 0) {
$attachments = array();
$post_content = $post_data['post_content'];
foreach ($get_urls as $get_url_k => $get_url) {
// unset url in attachment array
foreach ($post_atta_img as $atta_url_k => $atta_url_v) {
$match_patt_url = '/' . str_replace($rep, $with, substr($atta_url_v['src'], 0, strrpos($atta_url_v['src'], '.'))) . '/';
if (preg_match($match_patt_url, $get_url[4])) {
unset($post_atta_img[$atta_url_k]);
}
}
if (isset($get_urls[$get_url_k][6])) { // url have parent, don't download this url
if ($get_url[1] != '') {
// change src url
$s_mmb_mp = '/' . str_replace($rep, $with, $get_url[4]) . '/';
$s_img_atta = wp_get_attachment_image_src($get_urls[$get_url_k][6]);
$s_mmb_rp = $s_img_atta[0];
$post_content = preg_replace($s_mmb_mp, $s_mmb_rp, $post_content);
// change attachment url
if (preg_match('/attachment_id/i', $get_url[2])) {
$mmb_mp = '/' . str_replace($rep, $with, $get_url[2]) . '/';
$mmb_rp = get_bloginfo('wpurl') . '/?attachment_id=' . $get_urls[$get_url_k][6];
$post_content = preg_replace($mmb_mp, $mmb_rp, $post_content);
}
}
continue;
}
$no_thumb = '';
if (preg_match('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', $get_url[4])) {
$no_thumb = preg_replace('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', '.' . $get_url[5], $get_url[4]);
} else {
$no_thumb = $get_url[4];
}
if(isset($upload['error']) && !empty($upload['error'])){
return array('error' => $upload['error']);
}
$file_name = basename($no_thumb);
$tmp_file = download_url($no_thumb);
if(is_wp_error($tmp_file)){
return array('error' => $tmp_file->get_error_message());
}
$attach_upload['url'] = $upload['url'] . '/' . $file_name;
$attach_upload['path'] = $upload['path'] . '/' . $file_name;
$renamed = @rename($tmp_file, $attach_upload['path']);
if ($renamed === true) {
$match_pattern = '/' . str_replace($rep, $with, $get_url[4]) . '/';
$replace_pattern = $attach_upload['url'];
$post_content = preg_replace($match_pattern, $replace_pattern, $post_content);
if (preg_match('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', $get_url[4])) {
$match_pattern = '/' . str_replace($rep, $with, preg_replace('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', '.' . $get_url[5], $get_url[4])) . '/';
$post_content = preg_replace($match_pattern, $replace_pattern, $post_content);
}
$attachment = array(
'post_title' => $file_name,
'post_content' => '',
'post_type' => 'attachment',
//'post_parent' => $post_id,
'post_mime_type' => 'image/' . $get_url[5],
'guid' => $attach_upload['url']
);
// Save the data
$attach_id = wp_insert_attachment($attachment, $attach_upload['path']);
$attachments[$attach_id] = 0;
// featured image
if ($post_featured_img != '') {
$feat_img_url = '';
if (preg_match('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', $post_featured_img)) {
$feat_img_url = substr($post_featured_img, 0, strrpos($post_featured_img, '.') - 8);
} else {
$feat_img_url = substr($post_featured_img, 0, strrpos($post_featured_img, '.'));
}
$m_feat_url = '/' . str_replace($rep, $with, $feat_img_url) . '/';
if (preg_match($m_feat_url, $get_url[4])) {
$post_featured_img = '';
$attachments[$attach_id] = $attach_id;
}
}
// set $get_urls value[6] - parent atta_id
foreach ($get_urls as $url_k => $url_v) {
if ($get_url_k != $url_k) {
$s_get_url = '';
if (preg_match('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', $url_v[4])) {
$s_get_url = substr($url_v[4], 0, strrpos($url_v[4], '.') - 8);
} else {
$s_get_url = substr($url_v[4], 0, strrpos($url_v[4], '.'));
}
$m_patt_url = '/' . str_replace($rep, $with, $s_get_url) . '/';
if (preg_match($m_patt_url, $get_url[4])) {
array_push($get_urls[$url_k], $attach_id);
}
}
}
$some_data = wp_generate_attachment_metadata($attach_id, $attach_upload['path']);
wp_update_attachment_metadata($attach_id, $some_data);
// changing href of a tag
if ($get_url[1] != '') {
$mmb_mp = '/' . str_replace($rep, $with, $get_url[2]) . '/';
if (preg_match('/attachment_id/i', $get_url[2])) {
$mmb_rp = get_bloginfo('wpurl') . '/?attachment_id=' . $attach_id;
$post_content = preg_replace($mmb_mp, $mmb_rp, $post_content);
}
}
} else {
@unlink($tmp_file);
return array('error' => "Cannot create attachment file in ".$attach_upload['path']." Please set correct permissions.");
}
@unlink($tmp_file);
}
$post_data['post_content'] = $post_content;
}
if (count($post_atta_img)) {
foreach ($post_atta_img as $img) {
$file_name = basename($img['src']);
if(isset($upload['error']) && !empty($upload['error'])){
return array('error' => $upload['error']);
}
$tmp_file = download_url($img['src']);
if(is_wp_error($tmp_file)){
return array('error' => $tmp_file->get_error_message());
}
$attach_upload['url'] = $upload['url'] . '/' . $file_name;
$attach_upload['path'] = $upload['path'] . '/' . $file_name;
$renamed = @rename($tmp_file, $attach_upload['path']);
if ($renamed === true) {
$atta_ext = end(explode('.', $file_name));
$attachment = array(
'post_title' => $file_name,
'post_content' => '',
'post_type' => 'attachment',
//'post_parent' => $post_id,
'post_mime_type' => 'image/' . $atta_ext,
'guid' => $attach_upload['url']
);
// Save the data
$attach_id = wp_insert_attachment($attachment, $attach_upload['path']);
wp_update_attachment_metadata($attach_id, wp_generate_attachment_metadata($attach_id, $attach_upload['path']));
$attachments[$attach_id] = 0;
// featured image
if ($post_featured_img != '') {
$feat_img_url = '';
if (preg_match('/-\d{3}x\d{3}\.[a-zA-Z0-9]{3,4}$/', $post_featured_img)) {
$feat_img_url = substr($post_featured_img, 0, strrpos($post_featured_img, '.') - 8);
} else {
$feat_img_url = substr($post_featured_img, 0, strrpos($post_featured_img, '.'));
}
$m_feat_url = '/' . str_replace($rep, $with, $feat_img_url) . '/';
if (preg_match($m_feat_url, $img['src'])) {
$post_featured_img = '';
$attachments[$attach_id] = $attach_id;
}
}
} else {
@unlink($tmp_file);
return array('error' => "Cannot create attachment file in ".$attach_upload['path']." Please set correct permissions.");
}
@unlink($tmp_file);
}
}
//Prepare post data and temporarily remove content filters before insert post
$user = $this->mmb_get_user_info( $args['username'] );
if($user && $user->ID){
$post_data['post_author'] = $user->ID;
}
//remove filter which can brake scripts or html
remove_filter('content_save_pre', 'wp_filter_post_kses');
//check for edit post
$post_result = 0;
if(isset($post_data['mwp_post_edit']) && $post_data['mwp_post_edit']){
if($post_data['mwp_match_by'] == 'title'){
$match_by = "post_title = '".$post_data['post_title']."'";
} else {
$match_by = "post_name = '".$post_data['post_name']."'";
}
$query = "SELECT ID FROM $wpdb->posts WHERE $match_by AND post_status NOT IN('inherit','auto-draft','draft') LIMIT 1";
$post_result = $wpdb->get_var($query);
}
if($post_result){
//update existing post
$post_data['ID'] = $post_result;
$post_id = wp_update_post($post_data);
//check for previous attachments
$atta_allimages =& get_children('post_type=attachment&post_parent=' . $post_id);
if (!empty($atta_allimages)) {
foreach ($atta_allimages as $image) {
wp_delete_attachment($image->ID);
}
}
} else {
if($post_data['mwp_post_edit'] && $post_data['mwp_force_publish']){
$post_id = wp_insert_post($post_data);
} elseif($post_data['mwp_post_edit'] && !$post_data['mwp_force_publish']) {
return array('error' => "Post not found.");
} else {
$post_id = wp_insert_post($post_data);
}
}
if (count($attachments)) {
foreach ($attachments as $atta_id => $featured_id) {
$result = wp_update_post(array(
'ID' => $atta_id,
'post_parent' => $post_id
));
if ($featured_id > 0) {
$new_custom['_thumbnail_id'] = array(
$featured_id
);
}
}
}
// featured image
if ($post_featured_img != '') {
$file_name = basename($post_featured_img);
if(isset($upload['error']) && !empty($upload['error'])){
return array('error' => $upload['error']);
}
$tmp_file = download_url($post_featured_img);
if(is_wp_error($tmp_file)){
return array('error' => $tmp_file->get_error_message());
}
$attach_upload['url'] = $upload['url'] . '/' . $file_name;
$attach_upload['path'] = $upload['path'] . '/' . $file_name;
$renamed = @rename($tmp_file, $attach_upload['path']);
if ($renamed === true) {
$atta_ext = end(explode('.', $file_name));
$attachment = array(
'post_title' => $file_name,
'post_content' => '',
'post_type' => 'attachment',
'post_parent' => $post_id,
'post_mime_type' => 'image/' . $atta_ext,
'guid' => $attach_upload['url']
);
// Save the data
$attach_id = wp_insert_attachment($attachment, $attach_upload['path']);
wp_update_attachment_metadata($attach_id, wp_generate_attachment_metadata($attach_id, $attach_upload['path']));
$new_custom['_thumbnail_id'] = array(
$attach_id
);
} else {
@unlink($tmp_file);
return array('error' => "Cannot create attachment file in ".$attach_upload['path']." Please set correct permissions.");
}
@unlink($tmp_file);
}
if ($post_id && is_array($post_categories)) {
//insert categories
$cat_ids = wp_create_categories($post_categories, $post_id);
}
//get current custom fields
$cur_custom = get_post_custom($post_id);
//check which values doesnot exists in new custom fields
$diff_values = array_diff_key($cur_custom, $new_custom);
if (is_array($diff_values))
foreach ($diff_values as $meta_key => $value) {
delete_post_meta($post_id, $meta_key);
}
//insert new post meta
foreach ($new_custom as $meta_key => $value) {
if (strpos($meta_key, '_mmb') === 0 || strpos($meta_key, '_edit') === 0) {
continue;
} else {
update_post_meta($post_id, $meta_key, $value[0]);
}
}
return $post_id;
}
function change_status($args)
{
global $wpdb;
$post_id = $args['post_id'];
$status = $args['status'];
$success = false;
if(in_array($status, array('draft', 'publish', 'trash'))){
$sql = "update ".$wpdb->prefix."posts set post_status = '$status' where ID = '$post_id'";
$success = $wpdb->query($sql);
}
return $success;
}
function get_posts($args){
global $wpdb;
$where='';
extract($args);
if(!empty($filter_posts))
{
$where.=" AND post_title LIKE '%".mysql_real_escape_string($filter_posts)."%'";
}
if(!empty($mwp_get_posts_date_from) && !empty($mwp_get_posts_date_to))
{
$where.=" AND post_date BETWEEN '".mysql_real_escape_string($mwp_get_posts_date_from)."' AND '".mysql_real_escape_string($mwp_get_posts_date_to)."'";
}
else if(!empty($mwp_get_posts_date_from) && empty($mwp_get_posts_date_to))
{
$where.=" AND post_date >= '".mysql_real_escape_string($mwp_get_posts_date_from)."'";
}
else if(empty($mwp_get_posts_date_from) && !empty($mwp_get_posts_date_to))
{
$where.=" AND post_date <= '".mysql_real_escape_string($mwp_get_posts_date_to)."'";
}
$post_array=array();
$post_statuses = array('publish', 'pending', 'private', 'future', 'draft', 'trash');
foreach ($args as $checkbox => $checkbox_val)
{
if($checkbox_val=="on") {
$post_array[]="'".str_replace("mwp_get_posts_","",$checkbox)."'";
}
}
if(!empty($post_array))
{
$where.=" AND post_status IN (".implode(",",$post_array).")";
}
$sql_query = "$wpdb->posts WHERE post_status!='auto-draft' AND post_status!='inherit' AND post_type='post' ".$where." ORDER BY post_date DESC";
$total = array();
$user_info = $this->getUsersIDs();
$post_cats=$this->getPostCats();
$post_tags=$this->getPostCats('post_tag');
$posts_total = $wpdb->get_results("SELECT count(*) as total_posts FROM ".$sql_query);
$total['total_num']=$posts_total[0]->total_posts;
$posts = array();
$posts_info = $wpdb->get_results("SELECT * FROM ".$sql_query." LIMIT 500");
foreach ( $posts_info as $post_info )
{
$cats=array();
foreach($post_cats[$post_info->ID] as $cat_array => $cat_array_val)
{
$cats[] = array('name' => $cat_array_val);
}
$tags=array();
foreach($post_tags[$post_info->ID] as $tag_array => $tag_array_val)
{
$tags[] = array('name' => $tag_array_val);
}
$posts[]=array(
'post_id'=>$post_info->ID,
'post_title'=>$post_info->post_title,
'post_name'=>$post_info->post_name,
'post_author'=>array('author_id'=>$post_info->post_author, 'author_name'=>$user_info[$post_info->post_author]),
'post_date'=>$post_info->post_date,
'post_modified'=>$post_info->post_modified,
'post_status'=>$post_info->post_status,
'post_type'=>$post_info->post_type,
'guid'=>$post_info->guid,
'post_password'=>$post_info->post_password,
'ping_status'=>$post_info->ping_status,
'comment_status'=>$post_info->comment_status,
'comment_count'=>$post_info->comment_count,
'cats'=>$cats,
'tags'=>$tags,
);
}
return array('posts' => $posts, 'total' => $total);
}
function delete_post($args){
global $wpdb;
if(!empty($args['post_id']) && !empty($args['action']))
{
if($args['action']=='delete')
{
$delete_query = "UPDATE $wpdb->posts SET post_status = 'trash' WHERE ID = ".$args['post_id'];
}
else if($args['action']=='delete_perm'){
$delete_query = "DELETE FROM $wpdb->posts WHERE ID = ".$args['post_id'];
}
else if($args['action']=='delete_restore'){
$delete_query = "UPDATE $wpdb->posts SET post_status = 'publish' WHERE ID = ".$args['post_id'];
}
$wpdb->get_results($delete_query);
return 'Post deleted.';
}
else
{
return 'No ID...';
}
}
function delete_posts($args){
global $wpdb;
extract($args);
if($deleteaction=='delete'){
$delete_query_intro = "DELETE FROM $wpdb->posts WHERE ID = ";
}elseif($deleteaction=='trash'){
$delete_query_intro = "UPDATE $wpdb->posts SET post_status = 'trash' WHERE ID = ";
}elseif($deleteaction=='draft'){
$delete_query_intro = "UPDATE $wpdb->posts SET post_status = 'draft' WHERE ID = ";
}elseif($deleteaction=='publish'){
$delete_query_intro = "UPDATE $wpdb->posts SET post_status = 'publish' WHERE ID = ";
}
foreach($args as $key=>$val){
if(!empty($val) && is_numeric($val))
{
$delete_query = $delete_query_intro.$val;
$wpdb->query($delete_query);
}
}
return "Post deleted";
}
function get_pages($args){
global $wpdb;
$where='';
extract($args);
if(!empty($filter_pages))
{
$where.=" AND post_title LIKE '%".mysql_real_escape_string($filter_pages)."%'";
}
if(!empty($mwp_get_pages_date_from) && !empty($mwp_get_pages_date_to))
{
$where.=" AND post_date BETWEEN '".mysql_real_escape_string($mwp_get_pages_date_from)."' AND '".mysql_real_escape_string($mwp_get_pages_date_to)."'";
}
else if(!empty($mwp_get_pages_date_from) && empty($mwp_get_pages_date_to))
{
$where.=" AND post_date >= '".mysql_real_escape_string($mwp_get_pages_date_from)."'";
}
else if(empty($mwp_get_pages_date_from) && !empty($mwp_get_pages_date_to))
{
$where.=" AND post_date <= '".mysql_real_escape_string($mwp_get_pages_date_to)."'";
}
$post_array=array();
$post_statuses = array('publish', 'pending', 'private', 'future', 'draft', 'trash');
foreach ($args as $checkbox => $checkbox_val)
{
if($checkbox_val=="on") {
$post_array[]="'".str_replace("mwp_get_pages_","",$checkbox)."'";
}
}
if(!empty($post_array))
{
$where.=" AND post_status IN (".implode(",",$post_array).")";
}
$sql_query = "$wpdb->posts WHERE post_status!='auto-draft' AND post_status!='inherit' AND post_type='page' ".$where.' ORDER BY post_date DESC';
$total = array();
$user_info = $this->getUsersIDs();
$posts_total = $wpdb->get_results("SELECT count(*) as total_posts FROM ".$sql_query);
$total['total_num']=$posts_total[0]->total_posts;
$posts = array();
$posts_info = $wpdb->get_results("SELECT * FROM ".$sql_query." LIMIT 500");
foreach ( $posts_info as $post_info )
{
$posts[]=array(
'post_id'=>$post_info->ID,
'post_title'=>$post_info->post_title,
'post_name'=>$post_info->post_name,
'post_author'=>array('author_id'=>$post_info->post_author, 'author_name'=>$user_info[$post_info->post_author]),
'post_date'=>$post_info->post_date,
'post_modified'=>$post_info->post_modified,
'post_status'=>$post_info->post_status,
'post_type'=>$post_info->post_type,
'guid'=>$post_info->guid,
'post_password'=>$post_info->post_password,
'ping_status'=>$post_info->ping_status,
'comment_status'=>$post_info->comment_status,
'comment_count'=>$post_info->comment_count
);
}
return array('posts' => $posts, 'total' => $total);
}
function delete_page($args){
global $wpdb;
if(!empty($args['post_id']) && !empty($args['action']))
{
if($args['action']=='delete')
{
$delete_query = "UPDATE $wpdb->posts SET post_status = 'trash' WHERE ID = ".$args['post_id'];
}
else if($args['action']=='delete_perm'){
$delete_query = "DELETE FROM $wpdb->posts WHERE ID = ".$args['post_id'];
}
else if($args['action']=='delete_restore'){
$delete_query = "UPDATE $wpdb->posts SET post_status = 'publish' WHERE ID = ".$args['post_id'];
}
$wpdb->get_results($delete_query);
return 'Page deleted.';
}
else
{
return 'No ID...';
}
}
function getPostCats($taxonomy = 'category')
{
global $wpdb;
$cats = $wpdb->get_results("SELECT p.ID AS post_id, $wpdb->terms.name
FROM $wpdb->posts AS p
INNER JOIN $wpdb->term_relationships ON ( p.ID = $wpdb->term_relationships.object_id )
INNER JOIN $wpdb->term_taxonomy ON ( $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->term_taxonomy.taxonomy = '".$taxonomy."' )
INNER JOIN $wpdb->terms ON ( $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id )");
foreach ( $cats as $post_val )
{
$post_cats[$post_val->post_id][] = $post_val->name;
}
return $post_cats;
}
function getUsersIDs()
{
global $wpdb;
$users_authors=array();
$users = $wpdb->get_results("SELECT ID as user_id, display_name FROM $wpdb->users WHERE user_status=0");
foreach ( $users as $user_key=>$user_val )
{
$users_authors[$user_val->user_id] = $user_val->display_name;
}
return $users_authors;
}
}
?>