public function __construct($post_type = 'place') { $this->post_type = $post_type; $this->nonce = 'et_nonce_' . $post_type; /** * add places metabox */ if (ae_user_can('edit_posts')) { add_action('add_meta_boxes', array($this, 'add_meta_boxes')); $this->add_action('save_post', 'save_meta_fields'); if (basename($_SERVER['SCRIPT_FILENAME']) == 'post.php' && isset($_GET['action']) && $_GET['action'] == 'edit' || basename($_SERVER['SCRIPT_FILENAME']) == 'post-new.php' && (isset($_GET['post_type']) && $_GET['post_type'] == $this->post_type)) { add_action('admin_head', array($this, 'add_meta_script')); add_filter('wp_dropdown_users', array($this, 'wp_dropdown_users')); } } }
/** * delete post from site * @param int $ID post id want to delete * @param bool $force_delete defautl is false * @author Dakachi * @since version 1.0 */ public function delete($ID, $force_delete = false) { if (!ae_user_can('edit_others_posts')) { global $user_ID; $post = get_post($ID); if ($user_ID != $post->post_author) { return new WP_Error('permission_deny', __("You do not have permission to delete post.", 'aecore-class-ae-post-backend')); } } if ($force_delete) { $result = wp_delete_post($ID, true); } else { $result = wp_trash_post($ID); } if ($result) { do_action('et_delete_' . $this->post_type, $ID); } return $this->convert($result); }
/** * validate data */ public function validate_data($data) { global $user_ID; if (is_wp_error($data)) { return $data; } $require_fields = apply_filters('fre_project_required_fields', array('et_budget', 'project_category')); if (!current_user_can('manage_options')) { if (isset($data['renew']) && !isset($data['et_payment_package']) && $this->disable_plan) { return new WP_Error('empty_package', __("Cannot create a place with an empty package.", 'projects-backend')); } if (!isset($data['post_content']) || $data['post_content'] == '') { return new WP_Error('ad_empty_content', __("You should enter short description for your place.", 'projects-backend')); } if (!isset($data['post_title']) || $data['post_title'] == '') { return new WP_Error('ad_empty_content', __("Your place should have a title.", 'projects-backend')); } if (!isset($data['project_category']) && in_array('project_category', $require_fields) && !is_admin()) { return new WP_Error('invalid_category', __("Your project should has a category!", 'projects-backend')); } if (!isset($data['et_budget']) && in_array('et_budget', $require_fields)) { return new WP_Error('invalid_budget', __("Your have to enter a budget for your requirement!", 'projects-backend')); } } if (in_array('et_budget', $require_fields) && $data['et_budget'] <= 0) { return new WP_Error('budget_less_than_zero', __("Your budget have to greater than zero!", 'projects-backend')); } /** * unsert featured et_featured param if user cannot edit others posts */ if (!ae_user_can('edit_others_posts')) { unset($data['et_featured']); // unset($data['post_status']); unset($data['et_expired_date']); unset($data['post_views']); } /** * check payment package is valid or not * set up featured if this package is featured */ if (isset($data['et_payment_package'])) { /** * check package plan exist or not */ global $ae_post_factory; $package = $ae_post_factory->get('pack'); $plan = $package->get($data['et_payment_package']); if (!$plan) { return new WP_Error('invalid_plan', __("You have selected an invalid plan.", 'projects-backend')); } /** * if user can not edit others posts the et_featured will no be unset and check, * this situation should happen when user edit/add post in backend. * Force to set featured post */ if (!isset($data['et_featured']) || !$data['et_featured']) { $data['et_featured'] = 0; if (isset($plan->et_featured) && $plan->et_featured) { $data['et_featured'] = 1; } } } /** * check max category options, filter ad category */ $max_cat = ae_get_option('max_cat', 3); if ($max_cat && !current_user_can('edit_others_posts')) { /** * check max category user can set for a place */ $num_of_cat = count($data['project_category']); if ($max_cat < $num_of_cat) { for ($i = $max_cat; $i < $num_of_cat; $i++) { unset($data['place_category'][$i]); } } } return apply_filters('fre_project_validate_data', $data); }
/** * update userdata and user metadata to an database # used wp_update_user , wp_authenticate, email_exists ,get_userdata # used update_user_meta # used AE_Users function convert * @param array $user data # wordpress user fields data # user custom meta data * @return user object after insert # wp_error object if user data invalid * @author Dakachi * @since 1.0 */ public function update($user_data) { global $current_user, $user_ID; /** * prevent user edit other user profile */ if (!ae_user_can('edit_users') && $user_data['ID'] != $user_ID) { return new WP_Error('denied', __("Permission Denied!", ET_DOMAIN)); } /** * check user password if have new password update */ if (isset($user_data['new_password']) && !empty($user_data['new_password'])) { $validate = $this->check_password($user_data); if ($validate) { $user_data['user_pass'] = $user_data['new_password']; } else { return new WP_Error('wrong_pass', __("Old password does not match!", ET_DOMAIN)); } if ($user_data['new_password'] !== $user_data['renew_password']) { return new WP_Error('pass_mismatch', __("Retype password is not equal.", ET_DOMAIN)); } } if (isset($user_data['user_email'])) { $email = $user_data['user_email']; /** * current user also update his email */ if ($user_ID == $user_data['ID'] && $email != $current_user->user_email) { if (email_exists($email)) { return new WP_Error('email_existed', __("This email is already used. Please enter a new email.", ET_DOMAIN)); } } } // don't allow upgrade from common user to admin if (!ae_user_can('edit_users')) { unset($user_data['role']); unset($user_data['user_login']); } /** * Set data for ban/unban user */ if (isset($user_data['do']) && $user_data['do'] == 'ban') { $user_data['banned'] = true; $user_data[$this->meta_ban_expired] = date(get_option('date_format'), strtotime($user_data['expired'])); $user_data[$this->meta_ban_note] = strip_tags($user_data['reason']); } elseif (isset($user_data['do']) && $user_data['do'] == 'unban') { $user_data['banned'] = false; $user_data[$this->meta_ban_expired] = ""; $user_data[$this->meta_ban_note] = ""; } /** * insert user */ $result = wp_update_user($user_data); if ($result != false && !is_wp_error($result)) { /** * update user meta data */ foreach ($this->meta_data as $key => $value) { // update if meta data exist if (isset($user_data[$value])) { $usermeta = $this->ae_filter_usermeta($user_data[$value]); update_user_meta($result, $value, $usermeta); } } // hook to add custom do_action('ae_update_user', $result, $user_data); /** * get user data and return a full profile */ $result = $this->convert(get_userdata($result)); } if (isset($user_data['do'])) { switch ($user_data['do']) { case 'profile': $result->msg = __("Your profile has been saved successfully!", ET_DOMAIN); break; case 'changepass': $result->msg = __("Your password has been changed successfully!", ET_DOMAIN); break; case 'ban': $blogname = get_bloginfo('name'); $email = $this->get_ban_email_content($result); $this->send_email($result->user_email, $email['subject'], $email['message']); $result->msg = __("User has been banned!", ET_DOMAIN); break; default: $result->msg = __("User's data update successfully!", ET_DOMAIN); break; } } else { $result->msg = __("User's data update successfully!", ET_DOMAIN); } return $result; }
/** * update userdata and user metadata to an database # used wp_update_user , wp_authenticate, email_exists ,get_userdata # used update_user_meta # used AE_Users function convert * @param array $user data # wordpress user fields data # user custom meta data * @return user object after insert # wp_error object if user data invalid * @author Dakachi * @since 1.0 */ public function update($user_data) { global $current_user, $user_ID; /** * prevent user edit other user profile */ if (!ae_user_can('edit_users') && $user_data['ID'] != $user_ID) { return new WP_Error('denied', __("Permission Denied!", 'aecore-class-ae-users-backend')); } /** * check user password if have new password update */ if (isset($user_data['new_password']) && !empty($user_data['new_password'])) { $validate = $this->check_password($user_data); if ($validate) { $user_data['user_pass'] = $user_data['new_password']; } else { return new WP_Error('wrong_pass', __("Old password does not match!", 'aecore-class-ae-users-backend')); } if ($user_data['new_password'] !== $user_data['renew_password']) { return new WP_Error('pass_mismatch', __("Retype password is not equal.", 'aecore-class-ae-users-backend')); } } if (isset($user_data['user_email'])) { $email = $user_data['user_email']; /** * current user also update his email */ if ($user_ID == $user_data['ID'] && $email != $current_user->user_email) { if (email_exists($email)) { return new WP_Error('email_existed', __("This email is already used. Please enter a new email.", 'aecore-class-ae-users-backend')); } } } // don't allow upgrade from common user to admin if (!ae_user_can('edit_users')) { unset($user_data['role']); unset($user_data['user_login']); } /** * insert user */ $result = wp_update_user($user_data); if ($result != false && !is_wp_error($result)) { /** * update user meta data */ foreach ($this->meta_data as $key => $value) { // update if meta data exist if (isset($user_data[$value])) { $usermeta = $this->ae_filter_usermeta($user_data[$value]); update_user_meta($result, $value, $usermeta); } } // hook to add custom do_action('ae_update_user', $result, $user_data); #update account info if ($user_data['default_payment_option'] == 'paypal') { update_user_meta($result, 'default_payment_option', 1); update_user_meta($result, 'active_cc', ''); update_user_meta($result, 'paypal', $user_data['paypal']); } else { update_user_meta($result, 'default_payment_option', 2); update_user_meta($result, 'active_cc', $user_data['default_payment_option']); } /*if(ae_user_role() == FREELANCER) { update_user_meta( $result, 'account_type', $user_data['account_type'] ); update_user_meta( $result, 'bank_name', $user_data['bank_name'] ); update_user_meta( $result, 'bank_country', $user_data['bank_country'] ); update_user_meta( $result, 'routing_no', $user_data['routing_no'] ); update_user_meta( $result, 'bank_address', $user_data['bank_address'] ); update_user_meta( $result, 'bank_city', $user_data['bank_city'] ); update_user_meta( $result, 'bank_state', $user_data['bank_state'] ); update_user_meta( $result, 'bank_zipcode', $user_data['bank_zipcode'] ); update_user_meta( $result, 'account_holder_currency', $user_data['account_holder_currency'] ); update_user_meta( $result, 'account_holder_name', $user_data['account_holder_name'] ); update_user_meta( $result, 'account_number', $user_data['account_number'] ); update_user_meta( $result, 'account_holder_address', $user_data['account_holder_address'] ); update_user_meta( $result, 'account_holder_city', $user_data['account_holder_city'] ); update_user_meta( $result, 'account_holder_country', $user_data['account_holder_country'] ); update_user_meta( $result, 'account_holder_state', $user_data['account_holder_state'] ); update_user_meta( $result, 'account_holder_zipcode', $user_data['account_holder_zipcode'] ); }*/ /** * get user data and return a full profile */ $result = $this->convert(get_userdata($result)); } if (isset($user_data['do'])) { switch ($user_data['do']) { case 'profile': $result->msg = __("Your profile has been saved successfully!", 'aecore-class-ae-users-backend'); break; case 'changepass': $result->msg = __("Your password has been changed successfully!", 'aecore-class-ae-users-backend'); break; default: $result->msg = __("User's data update successfully!", 'aecore-class-ae-users-backend'); break; } } else { $result->msg = __("User's data update successfully!", 'aecore-class-ae-users-backend'); } return $result; }