/** * AJAX callback method * * @return void */ public function run() { // check nonce $this->check_nonce(); // @todo set filters $filters = array(); // get filters from get vars foreach ($_GET as $get_key => $get_var) { if (0 === strpos($get_key, 'filter_')) { $filters[str_ireplace('filter_', '', $get_key)] = absint($get_var); } } // get vehicles $vehicle_manager = new Vehicle\Manager(); $vehicles = $vehicle_manager->get_vehicles($filters); // check & loop if (count($vehicles) > 0) { foreach ($vehicles as $vehicle) { // title $title = get_the_title($vehicle->get_id()); // get image $image = get_the_post_thumbnail($vehicle->get_id(), apply_filters('wpcm_listings_vehicle_thumbnail_size', 'wpcm_vehicle_listings_item'), array('title' => $title, 'alt' => $title, 'class' => 'wpcm-listings-item-image')); // load template wp_car_manager()->service('template_manager')->get_template_part('listings/item', '', array('url' => get_permalink($vehicle->get_id()), 'title' => $title, 'image' => $image, 'description' => $vehicle->get_short_description(), 'price' => $vehicle->get_formatted_price(), 'mileage' => $vehicle->get_formatted_mileage(), 'frdate' => $vehicle->get_formatted_frdate())); } } else { wp_car_manager()->service('template_manager')->get_template_part('listings/no-results', '', array()); } // bye exit; }
/** * AJAX callback method * * @return void */ public function run() { // check nonce $this->check_nonce(); // check if make is set if (!isset($_GET['make'])) { return; } // make $make = absint($_GET['make']); // models array $models = array(); // get raw models $models_raw = wp_car_manager()->service('make_model_manager')->get_models($make); // check & loop if (count($models_raw) > 0) { foreach ($models_raw as $model_raw) { // add to $models array $models[] = array('id' => $model_raw['id'], 'name' => $model_raw['name']); } } // send JSON wp_send_json($models); // bye exit; }
/** * AJAX 'get_models' callback */ public function ajax_get_models() { // check nonce check_ajax_referer('wpcm-dat-ajax-nonce', 'nonce'); // check if make is set if (!isset($_POST['make'])) { return; } // make $make = absint($_POST['make']); // models array $models = array(); // get raw models $models_raw = wp_car_manager()->service('make_model_manager')->get_models($make); // check & loop if (count($models_raw) > 0) { foreach ($models_raw as $model_raw) { // add to $models array $models[] = array('id' => $model_raw['id'], 'name' => $model_raw['name']); } } // send JSON wp_send_json($models); // bye exit; }
/** * Formats mileage * * @param $mileage * * @return string */ public static function mileage($mileage) { /** @var Settings $settings */ $settings = wp_car_manager()->service('settings'); // translated distance units $translated_distance_units = array('miles' => __('miles', 'wp-car-manager'), 'km' => __('km', 'wp-car-manager')); return number_format($mileage ? $mileage : 0, 0, $settings->get_option('decimal_separator'), $settings->get_option('thousand_separator')) . ' ' . $translated_distance_units[$settings->get_option('distance_unit')]; }
/** * @param array $atts * * @return string */ public function output($atts) { // JS WPCarManager\Assets::enqueue_shortcode_submit_car_form(); // start output buffer ob_start(); wp_car_manager()->service('submit_car_handler')->display_next_step(); return ob_get_clean(); }
/** * Actual meta box output * * @param \WP_Post $post */ public function meta_box_output($post) { // nonce $this->output_nonce(); // vehicle $vehicle = wp_car_manager()->service('vehicle_factory')->make($post->ID); // load view wp_car_manager()->service('view_manager')->display('meta-box/mb-data', array('mb_prefix' => 'wpcm-ld', 'vehicle' => $vehicle, 'fields' => array('condition' => array('type' => 'date', 'label' => __('Expiry Date:', 'wp-car-manager'), 'key' => 'expiration', 'required' => false), 'sold' => array('type' => 'checkbox', 'label' => __('Sold?', 'wp-car-manager'), 'key' => 'sold', 'required' => false)))); }
/** * Custom column data * * @param string $column */ public function column_data($column) { global $post; /** @var \Never5\WPCarManager\Vehicle\Vehicle $vehicle */ $vehicle = wp_car_manager()->service('vehicle_factory')->make($post->ID); // val $val = ''; // set correct column val switch ($column) { case 'image': // title $title = get_the_title($vehicle->get_id()); // check if there's a thumbnail if (has_post_thumbnail($vehicle->get_id())) { // get image $val = get_the_post_thumbnail($vehicle->get_id(), apply_filters('wpcm_listings_vehicle_thumbnail_size', 'wpcm_vehicle_listings_item'), array('title' => $title, 'alt' => $title, 'class' => 'wpcm-admin-image')); } else { $placeholder = apply_filters('wpcm_listings_vehicle_thumbnail_placeholder', wp_car_manager()->service('file')->image_url('placeholder-list.png'), $vehicle); $val = sprintf('<img src="%s" alt="%s" class="wpcm-admin-image" />', $placeholder, __('Placeholder', 'wp-car-manager')); } $val = '<a href="' . admin_url(sprintf('post.php?post=%d&action=edit', $post->ID)) . '">' . $val . '</a>'; break; case 'make': $val = $vehicle->get_make_name(); break; case 'model': $val = $vehicle->get_model_name(); break; case 'price': $val = $vehicle->get_formatted_price(); break; case 'mileage': $val = $vehicle->get_formatted_mileage(); break; case 'frdate': $val = $vehicle->get_formatted_frdate(); break; case 'expires': $expiration = $vehicle->get_expiration(); if (null != $expiration) { $val = $expiration->format(str_ireplace('F', 'M', get_option('date_format'))); } break; case 'actions': if ('pending' == $vehicle->get_status()) { $val = '<a href="' . add_query_arg(array('wpcm_action' => 'approve', 'wpcm_action_val' => $post->ID, 'wpcm_nonce' => wp_create_nonce('wpcm_action_approve_' . $post->ID)), admin_url('edit.php?post_type=wpcm_vehicle')) . '" class="button wpcm-btn-approve"></a>'; } break; } // if val is empty set to - if ('' == $val) { $val = '-'; } // echo val echo $val; }
/** * Actual meta box output * * @param \WP_Post $post */ public function meta_box_output($post) { // nonce $this->output_nonce(); // get attachments $product_image_gallery = ''; if (metadata_exists('post', $post->ID, '_car_gallery')) { $product_image_gallery = get_post_meta($post->ID, '_car_gallery', true); } // explode and filter $attachments = array_filter(explode(',', $product_image_gallery)); // view wp_car_manager()->service('view_manager')->display('meta-box/gallery', array('car_gallery' => $product_image_gallery, 'attachments' => $attachments)); }
/** * @param array $atts * * @return string */ public function output($atts) { // get attributes, defaults filterable via 'wpcm_shortcode_cars_defaults' filter $atts = shortcode_atts(apply_filters('wpcm_shortcode_' . $this->get_tag() . '_defaults', array('per_page' => -1, 'orderby' => 'date', 'order' => 'DESC')), $atts); // start output buffer ob_start(); // global $wp_query; // echo '<pre>'; // print_r($wp_query->query_vars); // echo '</pre>'; // load template wp_car_manager()->service('template_manager')->get_template_part('listings-vehicle', '', array('atts' => $atts)); return ob_get_clean(); }
/** * Check if current user is allowed to edit given listing * * @param int $listing_id * * @return bool */ public function can_edit_listing($listing_id) { $can_edit = true; // deny access if user is not logged in or the listing id equals zero if (!is_user_logged_in() || 0 == $listing_id) { $can_edit = false; } else { /** @var Vehicle\Vehicle $listing */ $listing = wp_car_manager()->service('vehicle_factory')->make($listing_id); // check if listing author is equal to currently logged in user and if user has permission to edit listing if ($listing->get_author() != get_current_user_id() && !current_user_can('edit_car_listing', $listing->get_id())) { $can_edit = false; } } return apply_filters('wpcm_user_can_edit_listing', $can_edit, $listing_id); }
/** * Installation actions */ public static function run() { // register post type and custom taxonomies Vehicle\PostType::register(); WPCarManager\Taxonomies::register_model_make(); WPCarManager\Taxonomies::register_features(); // setup user roles $role_manager = new WPCarManager\RoleManager(); $role_manager->setup_roles(); // setup cron $cron = new Vehicle\Cron(); $cron->schedule(); // flush rules after install flush_rewrite_rules(); // set version update_option(Upgrade::OPTION_CURRENT_VERSION, wp_car_manager()->get_version()); }
/** * @param array $atts * * @return string */ public function output($atts) { // JS WPCarManager\Assets::enqueue_shortcode_dashboard(); // get attributes, defaults filterable via 'wpcm_shortcode_dashboard_defaults' filter $atts = shortcode_atts(apply_filters('wpcm_shortcode_' . $this->get_tag() . '_defaults', array('orderby' => 'date', 'order' => 'DESC')), $atts); // start output buffer ob_start(); if (is_user_logged_in()) { // load dashboard template wp_car_manager()->service('template_manager')->get_template_part('dashboard', '', array('atts' => $atts)); } else { // load not logged in template wp_car_manager()->service('template_manager')->get_template_part('dashboard/not-logged-in', '', array('atts' => $atts)); } return ob_get_clean(); }
/** * AJAX callback method * * @return void */ public function run() { // check nonce $this->check_nonce(); // set sort $sort = isset($_GET['sort']) ? esc_attr($_GET['sort']) : 'price-desc'; // get vehicles $vehicle_manager = new Vehicle\Manager(); $vehicles = $vehicle_manager->get_vehicles(array(), $sort, -1, array('author' => get_current_user_id(), 'post_status' => apply_filters('wpcm_dashboard_post_status', array('publish', 'expired', 'pending')))); // check & loop if (count($vehicles) > 0) { // Today $today = new \DateTime(); $today->setTime(0, 0, 0); foreach ($vehicles as $vehicle) { // title $title = get_the_title($vehicle->get_id()); // check if there's a thumbnail if (has_post_thumbnail($vehicle->get_id())) { // get image $image = get_the_post_thumbnail($vehicle->get_id(), apply_filters('wpcm_dashboard_vehicle_thumbnail_size', 'wpcm_vehicle_listings_item'), array('title' => $title, 'alt' => $title, 'class' => 'wpcm-dashboard-item-image')); } else { $placeholder = apply_filters('wpcm_dashboard_vehicle_thumbnail_placeholder', wp_car_manager()->service('file')->image_url('placeholder-list.png'), $vehicle); $image = sprintf('<img src="%s" alt="%s" class="wpcm-dashboard-item-image" />', $placeholder, __('Placeholder', 'wp-car-manager')); } $expires = 'n/a'; if (null != $vehicle->get_expiration()) { if ($today > $vehicle->get_expiration()) { $expires = __('Expired', 'wp-car-manager'); } else { $expires = $vehicle->get_expiration()->format('d-m-Y'); } } // load template wp_car_manager()->service('template_manager')->get_template_part('dashboard/item', '', array('id' => $vehicle->get_id(), 'url' => $vehicle->get_url(), 'title' => $title, 'image' => $image, 'price' => $vehicle->get_formatted_price(), 'mileage' => $vehicle->get_formatted_mileage(), 'frdate' => $vehicle->get_formatted_frdate(), 'expires' => $expires, 'vehicle' => $vehicle)); } } else { wp_car_manager()->service('template_manager')->get_template_part('dashboard/no-results', '', array()); } // bye exit; }
/** * Get price format * * @return String */ public static function get_price_format() { $currency_pos = wp_car_manager()->service('settings')->get_option('currency_pos'); $format = '%1$s%2$s'; switch ($currency_pos) { case 'left': $format = '%1$s%2$s'; break; case 'right': $format = '%2$s%1$s'; break; case 'left_space': $format = '%1$s %2$s'; break; case 'right_space': $format = '%2$s %1$s'; break; } return $format; }
/** * AJAX callback method * * @return void */ public function run() { // vehicle must be set if (!isset($_POST['vehicle']) || empty($_POST['vehicle'])) { wp_send_json(array('success' => false)); } // check nonce $this->check_nonce(); // sanitize variables $vehicle_id = absint($_POST['vehicle']); // check if user is allowed to edit this vehicle if (!wp_car_manager()->service('user_manager')->can_edit_listing($vehicle_id)) { wp_send_json(array('success' => false)); } // delete vehicle wp_trash_post($vehicle_id); // done wp_send_json(array('success' => true)); // bye exit; }
/** * @param array $atts * * @return string */ public function output($atts) { // JS WPCarManager\Assets::enqueue_shortcode_cars(); // get attributes, defaults filterable via 'wpcm_shortcode_cars_defaults' filter $atts = shortcode_atts(apply_filters('wpcm_shortcode_' . $this->get_tag() . '_defaults', array('show_filters' => true, 'show_sort' => true, 'orderby' => 'date', 'order' => 'DESC', 'make' => '', 'make_id' => '', 'sort' => 'price-asc', 'condition' => '')), $atts); // make sure show_filters is a bool if ('false' === $atts['show_filters']) { $atts['show_filters'] = false; } else { $atts['show_filters'] = true; } // make sure show_sort is a bool if ('false' === $atts['show_sort']) { $atts['show_sort'] = false; } else { $atts['show_sort'] = true; } // check if we need to set a make_id if (!empty($atts['make']) && empty($atts['make_id'])) { $term = get_term_by('name', $atts['make'], 'wpcm_make_model'); if ($term != false) { $atts['make_id'] = $term->term_id; } } // build data atts $data_atts = array('sort', 'condition', 'make_id'); $data_str = ''; foreach ($data_atts as $data_att) { if (!empty($atts[$data_att])) { $data_str .= ' data-' . $data_att . '="' . esc_attr($atts[$data_att]) . '"'; } } // start output buffer ob_start(); // load template wp_car_manager()->service('template_manager')->get_template_part('listings-vehicle', '', array('atts' => $atts, 'data_atts' => $data_str)); return ob_get_clean(); }
/** * Enqueue backend(admin) assets */ public static function enqueue_backend() { global $pagenow, $post; // Enqueue Downloadable Files Metabox JS if ($pagenow == 'post.php' && isset($post) && PostType::VEHICLE === $post->post_type || $pagenow == 'post-new.php' && isset($_GET['post_type']) && PostType::VEHICLE == $_GET['post_type']) { // datepicker wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css'); // enqueue edit vehicle script wp_enqueue_script('wpcm_edit_download', wp_car_manager()->service('file')->plugin_url('/assets/js/edit-vehicle' . (!SCRIPT_DEBUG ? '.min' : '') . '.js'), array('jquery', 'jquery-ui-sortable', 'jquery-ui-datepicker'), wp_car_manager()->get_version()); } if ('edit.php' == $pagenow && isset($_GET['page']) && ('wpcm-settings' === $_GET['page'] || 'wpcm-extensions' === $_GET['page'])) { // enqueue settings and extensions script wp_enqueue_script('wpcm_settings', wp_car_manager()->service('file')->plugin_url('/assets/js/settings' . (!SCRIPT_DEBUG ? '.min' : '') . '.js'), array('jquery'), wp_car_manager()->get_version()); } // extensions Js if (isset($_GET['page']) && 'wpcm-extensions' === $_GET['page']) { wp_enqueue_script('wpcm_extensions', wp_car_manager()->service('file')->plugin_url('/assets/js/extensions' . (!SCRIPT_DEBUG ? '.min' : '') . '.js'), array('jquery'), wp_car_manager()->get_version()); } // admin CSS wp_enqueue_style('wpcm_admin', wp_car_manager()->service('file')->plugin_url('/assets/css/admin.css'), array(), wp_car_manager()->get_version()); }
/** * Load the correct view */ private function load_view() { // check if we're editing a page if (isset($_GET['edit'])) { $term = get_term(absint($_GET['edit']), 'wpcm_make_model'); // form action URL $form_action_url = admin_url('edit.php?post_type=wpcm_vehicle&page=wpcm-makes'); // check if make is set if (isset($_GET['make'])) { // add make to form action URL $form_action_url = add_query_arg(array('make' => absint($_GET['make'])), $form_action_url); } // load view wp_car_manager()->service('view_manager')->display('page/edit-make-model', array('form_action' => $form_action_url, 'title' => sprintf(__('Edit %s', 'wp-car-manager'), $term->name), 'item' => array('id' => $term->term_id, 'name' => $term->name, 'slug' => $term->slug))); } elseif (isset($_GET['make'])) { // get make $make = get_term(absint($_GET['make']), 'wpcm_make_model'); // load view wp_car_manager()->service('view_manager')->display('page/models', array('title' => sprintf(__('%s Models', 'wp-car-manager'), $make->name), 'items' => wp_car_manager()->service('make_model_manager')->get_models($make->term_id))); } else { // load view wp_car_manager()->service('view_manager')->display('page/makes', array('title' => __('Makes', 'wp-car-manager'), 'items' => wp_car_manager()->service('make_model_manager')->get_makes())); } }
echo antispambot($email); ?> ?subject=<?php the_title(); ?> " class="wpcm-button wpcm-contact-button"><?php _e('Email Us', 'wp-car-manager'); ?> </a> <?php } ?> <?php $phone_number = wp_car_manager()->service('settings')->get_option('contact_phone'); if ('' !== $phone_number) { ?> <a href="tel:<?php echo esc_attr($phone_number); ?> " class="wpcm-button wpcm-contact-button"><?php _e('Call Us', 'wp-car-manager'); ?> </a> <?php } ?> </div>
foreach ($fields as $key => $section) { // check if we're showing this tab $show = $key == $active_tab ? '' : 'hidden'; echo '<div id="settings-' . sanitize_title($key) . '" class="settings_panel ' . $show . '">'; echo '<table class="form-table">'; // loop through fields foreach ($section[1] as $option) { // placeholder $placeholder = !empty($option['placeholder']) ? 'placeholder="' . $option['placeholder'] . '"' : ''; // label echo '<tr valign="top"><th scope="row"><label for="setting-' . $option['name'] . '">' . $option['label'] . '</a></th><td>'; if (!isset($option['type'])) { $option['type'] = ''; } // get value $value = wp_car_manager()->service('settings')->get_option($option['name']); // switch type switch ($option['type']) { case "checkbox": ?> <label><input id="setting-<?php echo $option['name']; ?> " name="wpcm_<?php echo $option['name']; ?> " type="checkbox" value="1" <?php checked('1', $value); ?>
<th><label for="<?php echo $field['key']; ?> "><?php echo $field['label']; ?> </label></th> <td> <?php // getter method for value $get_method = 'get_' . $field['key']; $value = $vehicle->{$get_method}(); if ('date' === $field['type']) { if (null != $value && !empty($value)) { $value = $value->format('Y-m-d'); } } // load template part wp_car_manager()->service('view_manager')->display('meta-box/input/' . $field['type'], array('mb_prefix' => $mb_prefix, 'field' => $field, 'value' => $value, 'vehicle' => $vehicle)); ?> </td> </tr> <?php } ?> <?php do_action('wpcm_mb_listing_data_after', $vehicle); ?> </table> <?php }
/** * Get model name * * @return string */ public function get_model_name() { $model = wp_car_manager()->service('make_model_manager')->get_model($this->get_model()); return $model['name']; }
/** * Get Vehicle fields * * @param string $type Not used at the moment, but will be used when more than 1 vehicle type is offered * * @return array */ public static function get_fields($type = 'car') { return array('condition' => array('type' => 'select', 'options' => self::get_conditions(), 'label' => __('Condition', 'wp-car-manager'), 'key' => 'condition', 'required' => true), 'make' => array('type' => 'select', 'options' => wp_car_manager()->service('make_model_manager')->get_makes_map(), 'label' => __('Make', 'wp-car-manager'), 'key' => 'make', 'required' => true), 'model' => array('type' => 'select-model', 'label' => __('Model', 'wp-car-manager'), 'key' => 'model', 'required' => true), 'frdate' => array('type' => 'date', 'label' => __('First Registration Date', 'wp-car-manager'), 'key' => 'frdate', 'required' => true, 'placeholder' => 'YY-MM-DD'), 'price' => array('type' => 'text', 'label' => __('Price', 'wp-car-manager'), 'key' => 'price', 'required' => false, 'placeholder' => Helper\Format::price('29000.99', array('plain' => true, 'decimals' => 2))), 'mileage' => array('type' => 'text', 'label' => __('Mileage', 'wp-car-manager'), 'key' => 'mileage', 'required' => false, 'placeholder' => Helper\Format::mileage('100000')), 'fuel_type' => array('type' => 'text', 'label' => __('Fuel Type', 'wp-car-manager'), 'key' => 'fuel_type', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' ' . __('Gas', 'wp-car-manager')), 'color' => array('type' => 'text', 'label' => __('Color', 'wp-car-manager'), 'key' => 'color', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' ' . __('Grey', 'wp-car-manager')), 'body_style' => array('type' => 'text', 'label' => __('Body Style', 'wp-car-manager'), 'key' => 'body_style', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' ' . __('Sedan', 'wp-car-manager')), 'transmission' => array('type' => 'select', 'options' => self::get_transmissions(), 'label' => __('Transmission', 'wp-car-manager'), 'key' => 'transmission', 'required' => false), 'doors' => array('type' => 'text', 'label' => __('Doors', 'wp-car-manager'), 'key' => 'doors', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' 5'), 'engine' => array('type' => 'text', 'label' => __('Engine', 'wp-car-manager'), 'key' => 'engine', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' ' . __('2.0 TDI', 'wp-car-manager')), 'power_kw' => array('type' => 'text', 'label' => __('Power kW', 'wp-car-manager'), 'key' => 'power_kw', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' ' . __('125', 'wp-car-manager')), 'power_hp' => array('type' => 'text', 'label' => __('Power hp', 'wp-car-manager'), 'key' => 'power_hp', 'required' => false, 'placeholder' => __('e.g.', 'wp-car-manager') . ' ' . __('170', 'wp-car-manager'))); }
_e('Username', 'wp-car-manager'); ?> </label> <div class="wpcm-field wpcm-required-field"> <?php wp_car_manager()->service('template_manager')->get_template_part('submit-car-form/form-fields/text', '', array('field' => array('key' => 'create_account_username'), 'value' => empty($_POST['wpcm_submit_car']['create_account_username']) ? '' : esc_attr(sanitize_text_field(stripslashes($_POST['wpcm_submit_car']['create_account_username']))))); ?> </div> </fieldset> <?php } ?> <fieldset> <label for="create_account_email"><?php _e('Your Email', 'wp-car-manager'); ?> </label> <div class="wpcm-field wpcm-required-field"> <?php wp_car_manager()->service('template_manager')->get_template_part('submit-car-form/form-fields/text', '', array('field' => array('key' => 'create_account_email'), 'value' => empty($_POST['wpcm_submit_car']['create_account_email']) ? '' : esc_attr(sanitize_text_field(stripslashes($_POST['wpcm_submit_car']['create_account_email']))))); ?> </div> </fieldset> <?php } ?> <?php }
/** * Done view */ public function view_done() { // get listing id $listing_id = !empty($_GET['wpcm_vehicle_id']) ? absint($_GET['wpcm_vehicle_id']) : 0; switch (get_post_status($listing_id)) { case 'pending': echo wpautop(sprintf(__('%s has been submitted successfully and will be visible once approved.', 'wpcm-wc-paid-listings'), '<strong>' . get_the_title($listing_id) . '</strong>')); break; case 'wpcm_pending_payment': case 'expired': echo wpautop(sprintf(__('%s has been submitted successfully and will be visible once payment has been confirmed.', 'wpcm-wc-paid-listings'), '<strong>' . get_the_title($listing_id) . '</strong>')); break; default: echo wpautop(sprintf(__('%s has been submitted successfully.', 'wpcm-wc-paid-listings'), '<strong>' . get_the_title($listing_id) . '</strong>')); break; } echo '<p class="wpcm-submitted-actions">'; if ('publish' === get_post_status($listing_id)) { echo '<a class="button wpcm-button" href="' . get_permalink($listing_id) . '">' . __('View Listing', 'wpcm-wc-paid-listings') . '</a> '; } elseif (absint(wp_car_manager()->service('settings')->get_option('page_dashboard')) > 0) { echo '<a class="button wpcm-button" href="' . get_permalink(wp_car_manager()->service('settings')->get_option('page_dashboard')) . '">' . __('View Dashboard', 'wpcm-wc-paid-listings') . '</a> '; } echo '</p>'; }
/** * AJAX callback method * * @return void */ public function run() { // check nonce $this->check_nonce(); // set filters $filters = array(); // get filters from get vars foreach ($_GET as $get_key => $get_var) { if (0 === strpos($get_key, 'filter_')) { $filters[str_ireplace('filter_', '', $get_key)] = $get_var; } } // set sort $sort = isset($_GET['sort']) ? esc_attr($_GET['sort']) : 'price-asc'; // set per page $per_page = intval(wp_car_manager()->service('settings')->get_option('listings_ppp')); // correct any funky zero listings per page. I mean, who wants 0 listings per page ... if (0 === $per_page) { $per_page = -1; } // get current page $page = intval(!empty($_GET['page']) ? $_GET['page'] : 1); // check if we need to hide sold cars if ('1' == wp_car_manager()->service('settings')->get_option('listings_hide_sold')) { $filters['hide_sold'] = true; } else { $filters['hide_sold'] = false; } // extra args $extra_args = array(); if ($page > 0) { $extra_args['paged'] = $page; } // get vehicles $vehicle_manager = new Vehicle\Manager(); $vehicles = $vehicle_manager->get_vehicles($filters, $sort, $per_page, $extra_args); // get total vehicle count for pagination $total_vehicle_count = $vehicle_manager->get_total_vehicle_count_of_last_query(); // start output buffer ob_start(); // check & loop if (count($vehicles) > 0) { foreach ($vehicles as $vehicle) { // title $title = get_the_title($vehicle->get_id()); // check if there's a thumbnail if (has_post_thumbnail($vehicle->get_id())) { // get image $image = get_the_post_thumbnail($vehicle->get_id(), apply_filters('wpcm_listings_vehicle_thumbnail_size', 'wpcm_vehicle_listings_item'), array('title' => $title, 'alt' => $title, 'class' => 'wpcm-listings-item-image')); } else { $placeholder = apply_filters('wpcm_listings_vehicle_thumbnail_placeholder', wp_car_manager()->service('file')->image_url('placeholder-list.png'), $vehicle); $image = sprintf('<img src="%s" alt="%s" class="wpcm-listings-item-image" />', $placeholder, __('Placeholder', 'wp-car-manager')); } // load template wp_car_manager()->service('template_manager')->get_template_part('listings/item', '', array('url' => $vehicle->get_url(), 'title' => $title, 'image' => $image, 'description' => $vehicle->get_short_description(), 'price' => $vehicle->get_formatted_price(), 'mileage' => $vehicle->get_formatted_mileage(), 'frdate' => $vehicle->get_formatted_frdate(), 'vehicle' => $vehicle)); } } else { wp_car_manager()->service('template_manager')->get_template_part('listings/no-results', '', array()); } // put listing content in variable $listing_content = ob_get_clean(); // send JSON response wp_send_json(array('listings' => $listing_content, 'pagination' => \Never5\WPCarManager\Helper\Pagination::generate($page, \Never5\WPCarManager\Helper\Pagination::calc_total_pages($per_page, $total_vehicle_count)))); // bye exit; }
/** * AJAX callback method * * @return void */ public function run() { // return fields $return = array('success' => false, 'errors' => array(), 'vehicle' => 0); try { // check nonce $this->check_nonce(); // check if vehicle ID is set if (!isset($_POST['vehicle_id'])) { throw new SaveVehicleException(__('Missing vehicle ID.', 'wp-car-manager'), 'missing-id'); } // vehicle ID (can be 0 for new vehicle) $vehicle_id = absint($_POST['vehicle_id']); // check if user is logged in and allowed to do this $is_allowed = false; if (0 == $vehicle_id) { $is_allowed = wp_car_manager()->service('user_manager')->can_post_listing(); } else { $is_allowed = wp_car_manager()->service('user_manager')->can_edit_listing($vehicle_id); } // requester not allowed to do what they try to do if (true != $is_allowed) { throw new SaveVehicleException(__('Not allowed to create/edit vehicle.', 'wp-car-manager'), 'not-allowed'); } // check if data is posted if (!isset($_POST['data'])) { throw new SaveVehicleException('No data received', 'no-data'); } // parse post data parse_str($_POST['data'], $post_arr); // put data in $data $data = $post_arr['wpcm_submit_car']; // if user is not logged in but allowed to post, we need to create an account if (!is_user_logged_in()) { $new_account_id = null; // check if account creation is allowed if (wp_car_manager()->service('user_manager')->is_account_creation_allowed()) { // username must be posted when not automatically generated from email address if (!wp_car_manager()->service('user_manager')->is_generate_username_from_email() && empty($data['create_account_username'])) { throw new SaveVehicleException(__('Please enter a username.', 'wp-car-manager'), 'missing-username'); } // if user is not logged in and automatic account creation is enabled we do require an email address if (empty($data['create_account_email'])) { throw new SaveVehicleException(__('Please enter your email address.', 'wp-car-manager'), 'missing-email'); } // create account $new_account_id = wp_car_manager()->service('user_manager')->create_account(array('username' => wp_car_manager()->service('user_manager')->is_generate_username_from_email() ? '' : $data['create_account_username'], 'email' => $data['create_account_email'], 'role' => wp_car_manager()->service('user_manager')->get_registration_role())); } // check if account was created if (is_wp_error($new_account_id)) { throw new SaveVehicleException($new_account_id->get_error_message(), 'account-creation-failed'); } // login new account if (null !== $new_account_id) { wp_car_manager()->service('user_manager')->login_user($new_account_id); } } // get logged in user $user = wp_get_current_user(); // make sure we've got a logged in user, if we don't something went horribly wrong if (false === $user) { throw new SaveVehicleException(__('User could not log in, please contact support.', 'wp-car-manager'), 'account-login-failed'); } // validate data /** * Data Validation */ try { $frdate_dt = new \DateTime($data['frdate']); } catch (\Exception $e) { throw new SaveVehicleException(__('Incorrect First Registration Date format', 'wp-car-manager'), 'frdate'); } /** * Data Sanitation */ // Sanitize integer values $data['mileage'] = intval(preg_replace('/,|\\./mi', '', $data['mileage'])); $data['price'] = intval(preg_replace('/,|\\./mi', '', $data['price'])); $data['doors'] = intval($data['doors']); // create Vehicle object /** @var Vehicle\Car $vehicle */ $vehicle = wp_car_manager()->service('vehicle_factory')->make($vehicle_id); // set some intial data for new vehicles if (0 == $vehicle->get_id()) { // set vehicle status to preview if this is a new item $vehicle->set_status('preview'); // set vehicle listing author $vehicle->set_author($user->ID); } // set Vehicle data in object $vehicle->set_title($data['title']); $vehicle->set_description($data['description']); $vehicle->set_condition($data['condition']); $vehicle->set_make($data['make']); $vehicle->set_model($data['model']); $vehicle->set_frdate($frdate_dt); $vehicle->set_price($data['price']); $vehicle->set_mileage($data['mileage']); $vehicle->set_fuel_type($data['fuel_type']); $vehicle->set_color($data['color']); $vehicle->set_body_style($data['body_style']); $vehicle->set_transmission($data['transmission']); $vehicle->set_engine($data['engine']); $vehicle->set_doors($data['doors']); // set features if (isset($data['features']) && count($data['features']) > 0) { $features = array(); foreach ($data['features'] as $feature_id) { $features[$feature_id] = 'n/a'; } $vehicle->set_features($features); } try { // try to persist vehicle $vehicle = wp_car_manager()->service('vehicle_repository')->persist($vehicle); // set success to true in return $return['success'] = true; // set vehicle ID in return $return['vehicle'] = $vehicle->get_id(); } catch (\Exception $e) { throw new SaveVehicleException($e->getMessage(), 'persist'); } } catch (SaveVehicleException $e) { $return['success'] = false; $return['errors'] = array('id' => $e->getId(), 'msg' => $e->getMessage()); } // send JSON wp_send_json($return); // bye exit; }
<?php if (!defined('ABSPATH')) { exit; } // Exit if accessed directly ?> <div class="wpcm-price-wrapper" itemprop="offers" itemscope itemtype="http://schema.org/Offer"> <span class="wpcm-price"><?php echo $vehicle->get_formatted_price(); ?> </span> <meta itemprop="price" content="<?php echo $vehicle->get_price(); ?> "/> <meta itemprop="priceCurrency" content="<?php echo wp_car_manager()->service('settings')->get_option('currency'); ?> "/> </div>
/** * Output page */ public function page_cb() { // load view wp_car_manager()->service('view_manager')->display('page/settings', array('fields' => wp_car_manager()->service('settings')->get_fields())); }
/** * Get vehicles * * Filter possibilities: * - make (int) * - model (int) * - price_from (int) * - price_to (int) * - mileage_from (int) * - mileage_to (int) * - frdate_from (int) * - frdate_to (int) * - condition (new,used) * - hide_sold (bool) * * Sort possibilities: * - price-asc * - price-desc * - year-asc * - year-desc * - mileage-asc * - mileage-desc * - date-asc * - date-desc * * @param array $filters * @param string $sort * @param int $per_page * @param array $extra_args * * @return array */ public function get_vehicles($filters, $sort, $per_page = -1, $extra_args = array()) { // vehicle array $vehicles = array(); // translate $sort to \WP_Query sort $sort_params = explode('-', $sort); // order by variables $orderby = 'meta_value'; $order = 'desc' == array_pop($sort_params) ? 'DESC' : 'ASC'; // get sort value and meta key $sort_val = array_shift($sort_params); $meta_key = 'wpcm_' . $sort_val; // determine sort value type switch ($sort_val) { case 'price': $meta_type = 'NUMERIC'; break; case 'frdate': $meta_type = 'DATE'; break; case 'mileage': $meta_type = 'NUMERIC'; break; case 'date': $orderby = 'date'; break; default: // force sort to ascending price if given sort isn't recognized $meta_type = 'NUMERIC'; $meta_key = 'wpcm_price'; $order = 'ASC'; } // \WP_Query arg $args = array('post_status' => 'publish', 'post_type' => PostType::VEHICLE, 'posts_per_page' => intval($per_page), 'orderby' => $orderby, 'order' => $order); // check if we're sorting by meta and if so, add the meta sort data if ('meta_value' == $orderby) { $args['meta_type'] = $meta_type; $args['meta_key'] = $meta_key; } // base meta query $meta_query = array(); // check for make if (is_array($filters) && count($filters) > 0) { foreach ($filters as $filter_key => $filter_val) { // var that will contain filter specific values $filter = array('key' => '', 'value' => '', 'compare' => '=', 'type' => 'NUMERIC'); switch ($filter_key) { // check for make and model filter case 'make': case 'model': $filter['key'] = 'wpcm_' . $filter_key; $filter['value'] = absint($filter_val); break; case 'price_from': case 'mileage_from': case 'frdate_from': $filter['key'] = 'wpcm_' . str_ireplace('_from', '', $filter_key); $filter['compare'] = '>='; $filter['value'] = absint($filter_val); break; case 'price_to': case 'mileage_to': case 'frdate_to': $filter['key'] = 'wpcm_' . str_ireplace('_to', '', $filter_key); $filter['compare'] = '<='; $filter['value'] = absint($filter_val); break; case 'condition': $filter['key'] = 'wpcm_condition'; $filter['value'] = sanitize_title($filter_val); $filter['type'] = 'CHAR'; break; case 'hide_sold': if (true === $filter_val) { $filter['key'] = 'wpcm_sold'; $filter['value'] = '1'; $filter['compare'] = '!='; $filter['type'] = 'CHAR'; } break; default: // allow filtering of non-catched filter key $filter = apply_filters('wpcm_get_vehicles_filter_' . $filter_key, $filter, $filter_key, $filter_val); break; } // check if we've got a new filter if (!empty($filter['key'])) { $meta_query[] = $filter; } } } // check if there's a meta query if (count($meta_query) > 0) { // add meta query $args['meta_query'] = $meta_query; } // merge extra args if (!empty($extra_args)) { $args = array_merge($args, $extra_args); } // get vehicles $db_vehicles = $this->vehicle_query->query($args); // check if (count($db_vehicles) > 0) { /** @var VehicleFactory $vehicle_factory */ $vehicle_factory = wp_car_manager()->service('vehicle_factory'); // loop foreach ($db_vehicles as $db_vehicle) { // add vehicle to arry $vehicles[] = $vehicle_factory->make($db_vehicle->ID); } } // reset post data wp_reset_postdata(); return $vehicles; }