*/
class Applyonline_Admin {
/**
* The ID of this plugin.
*
* @since 1.0.0
* @access private
* @var string $plugin_name The ID of this plugin.
*/
private $plugin_name;
/**
* The version of this plugin.
*
* @since 1.0.0
* @access private
* @var string $version The current version of this plugin.
*/
protected $version;
/**
* Initialize the class and set its properties.
*
* @since 1.0.0
* @param string $plugin_name The name of this plugin.
* @param string $version The version of this plugin.
*/
public function __construct( $plugin_name, $version ) {
$this->plugin_name = $plugin_name;
$this->version = $version;
// Hook - Applicant Listing - Column Name
add_filter( 'manage_edit-aol_application_columns', array ( $this, 'applicants_list_columns' ) );
// Hook - Applicant Listing - Column Value
add_action( 'manage_aol_application_posts_custom_column', array ( $this, 'applicants_list_columns_value' ), 10, 2 );
//Fix comments on application
add_filter('comment_row_actions', array($this, 'comments_fix'), 10, 2);
add_filter('post_row_actions',array($this, 'aol_post_row_actions'), 10, 2);
//Filter Aplications based on parent.
add_action( 'pre_get_posts', array($this, 'applications_filter') );
// Add Application data to the Application editor.
add_action ( 'edit_form_after_title', array ( $this, 'aol_application_post_editor' ) );
//Application Print
add_action('init', array($this, 'application_print'));
add_filter( 'post_date_column_status', array($this, 'application_date_column'), 10, 2);
$this->hooks_to_search_in_post_metas();
new Applyonline_MetaBoxes();
new Applyonline_Settings($version);
}
/**
* Register the stylesheets for the admin area.
*
* @since 1.0.0
*/
public function enqueue_styles() {
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Applyonline_Loader as all of the hooks are defined
* in that particular class.
*
* The Applyonline_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/applyonline-admin.css', array(), $this->version, 'all' );
}
/**
* Register the JavaScript for the admin area.
*
* @since 1.0.0
*/
public function enqueue_scripts() {
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Applyonline_Loader as all of the hooks are defined
* in that particular class.
*
* The Applyonline_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
$localize['app_submission_message'] = 'Form has been submitted successfully. We will get back to you very soon.';
$localize['aol_required_fields_notice'] = 'Fields with (*) are compulsory.';
wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/applyonline-admin.js', array( 'jquery', 'jquery-ui-sortable' ), $this->version, false );
wp_localize_script( $this->plugin_name, 'aol_admin', $localize );
}
public function add_closed_state($post_states, $post){
$timestamp = (int)get_post_meta($post->ID, '_aol_ad_closing_date', true);
if($timestamp != null and $timestamp < time()){
$post_states['ad_closed'] = __( 'Closed' );
}
return $post_states;
}
public function aol_ad_closing($post){
if($post->post_type == 'aol_ad'):
$date = NULL;
$timestamp = (int)get_post_meta($post->ID, '_aol_ad_closing_date', true);
if(is_int($timestamp) and $timestamp != null){
$date = date(get_option('date_format') ,esc_attr($timestamp));
$closed_class = ($timestamp < time()) ? 'closed' : null;
}
ob_start(); ?>
Example:
getTimestamp();
update_post_meta( $post_id, '_aol_ad_closing_date', $timestamp); //Add new value.
}
}
}
function application_date_column($status, $post ){
if($post->post_type == 'aol_application') $status = 'Received';
return $status;
}
/**
* Extend WordPress search to include custom fields
* Join posts and postmeta tables
*
* http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join
*
* @since 1.6
*/
function hooks_to_search_in_post_metas(){
add_filter('posts_join', array($this, 'cf_search_join' ));
add_filter( 'posts_where', array($this, 'cf_search_where' ));
add_filter( 'posts_distinct', array($this, 'cf_search_distinct' ));
}
function cf_search_join( $join ) {
global $wpdb;
if ( is_search() and is_admin() ) {
$join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
return $join;
}
/**
* Modify the search query with posts_where
*
* http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where
*
* @since 1.6
*/
function cf_search_where( $where ) {
global $wpdb;
if ( is_search() and is_admin() ) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
}
return $where;
}
/**
* Prevent duplicates
*
* http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct
*
* @since 1.6
*/
function cf_search_distinct( $where ) {
global $wpdb;
if ( is_search() and is_admin() ) {
return "DISTINCT";
}
return $where;
}
/**
*
*/
public function comments_fix($actions, $comment){
$post_id = $comment->comment_post_ID;
if(get_post_field('post_type', $post_id) == 'aol_application'){
$author = get_user_by('email', $comment->comment_author_email );
if(get_current_user_id() != $author->ID) unset($actions['quickedit']); //if not comment author, dont show the quick edit
unset($actions['unapprove']);
unset($actions['trash']);
unset($actions['edit']);
}
return $actions;
}
/**
* Applicant Listing - Column Name
*
* @param array $columns
* @access public
* @return array
*/
public function applicants_list_columns( $columns ){
$columns = array (
'cb' => '',
'title' => __( 'Ad Title', 'apply-online' ),
'applicant'=> __( 'Applicant', 'apply-online' ),
'taxonomy' => __( 'Tags', 'apply-online' ),
'date' => __( 'Date', 'apply-online' ),
);
return $columns;
}
/**
* Applicant Listing - Column Value
*
* @param array $columns
* @param int $post_id
* @access public
* @return void
*/
public function applicants_list_columns_value( $column, $post_id ){
$keys = get_post_custom_keys( $post_id );
switch ( $column ) {
case 'title ':
echo 'Helllo World';
break;
case 'applicant' :
$applicant_name = sprintf( '%s', esc_url( add_query_arg( array ( 'post' => $post_id, 'action' => 'edit' ), 'post.php' ) ), esc_html( get_post_meta( $post_id, $keys[ 0 ], TRUE ) )
);
echo $applicant_name;
break;
case 'taxonomy' :
//$parent_id = wp_get_post_parent_id( $post_id ); // get_post_field ( 'post_parent', $post_id );
$terms = get_the_terms( $post_id, 'aol_application_status' );
if ( ! empty( $terms ) ) {
$out = array ();
foreach ( $terms as $term ) {
$out[] = sprintf( '%s', esc_url( add_query_arg( array ( 'post_type' => 'aol_application', 'aol_application_status' => $term->slug ), 'edit.php' ) ), esc_html( sanitize_term_field( 'name', $term->name, $term->term_id, 'jobpost_category', 'display' ) )
);
}
echo join( ', ', $out );
}/* If no terms were found, output a default message. */ else {
_e( 'Undefined' , 'apply-online');
}
break;
}
}
public function aol_post_row_actions($actions, $post){
if($post->post_type == 'aol_application'){
$actions = array(); //Empty actions.
$actions['ad'] = '';
$actions['filters'] = '';
$actions['view'] = '';
return $actions;
}
elseif($post->post_type == 'aol_ad'){
$actions['test'] = 'Applications';
return $actions;
}
}
public function applications_filter( $query ) {
if ( $query->is_main_query() AND is_admin() AND isset($_GET['ad'])) {
$query->set( 'post_parent', $_GET['ad'] );
}
}
public function application_print(){
if(
is_user_logged_in()
AND user_can(get_current_user_id(), 'edit_applications')
AND isset($_GET['aol_page'])
AND $_GET['aol_page'] == 'print'
){
$post = get_post($_GET['id']);
$parent = get_post($post->post_parent);
?>
Application - Apply online
';
do_action('aol_metabox_after');
}
function ad_features( $post ) {
// Add a nonce field so we can check for it later.
wp_nonce_field( 'myplugin_adpost_meta_awesome_box', 'adpost_meta_box_nonce' );
/*
* Use get_post_meta() to retrieve an existing value
* from the database and use the value for the form.
*/
?>
';
echo '';
//if(!($val['type']=='text' or $val['type']=='email' or $val['type']=='date' or $val['type']=='text_area' or $val['type']=='file' )):
if(in_array($val['type'], array('checkbox','dropdown','radio',))):
echo '';
else:
echo '';
endif;
echo '
Delete
';
echo '
';
//}
endforeach;
?>
application_fields_generator($this->app_field_types);
}
/**
* Save the meta when the post is saved.
*
* @param int $post_id The ID of the post being saved.
*/
function save_metas( $post_id ) {
/*
* We need to verify this came from our screen and with proper authorization,
* because the save_post action can be triggered at other times.
*/
// Check if our nonce is set.
if ( ! isset( $_POST['adpost_meta_box_nonce'] ) ) {
return;
}
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $_POST['adpost_meta_box_nonce'], 'myplugin_adpost_meta_awesome_box' ) ) {
return;
}
// If this is an autosave, our form has not been submitted, so we don't want to do anything.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Check the user's permissions.
if ( isset( $_POST['post_type'] ) && 'aol_ad' == $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
/* OK, it's safe for us to save the data now. */
//Delete fields.
$old_keys = get_post_custom_keys($post_id);
$new_keys = array_keys($_POST);
$removed_keys = array_diff($old_keys, $new_keys); //List of removed meta keys.
foreach($removed_keys as $key => $val):
if(substr($val, 0, 4) == '_aol') delete_post_meta($post_id, $val); //Remove meta from the db.
endforeach;
// Add/update new value.
$fields_order = array();
foreach ($_POST as $key => $val):
// Make sure that it is set.
if ( substr($key, 0, 13)=='_aol_feature_' and isset( $val ) ) {
//Sanitize user input.
$my_data = sanitize_text_field( $val );
update_post_meta( $post_id, $key, $my_data); // Add new value.
}
// Make sure that it is set.
elseif ( substr($key, 0, 9) == '_aol_app_' and isset( $val ) ) {
//$my_data = serialize($val);
$val['options'] = explode(',', $val['options']);
$val['options'] = implode(',', array_map('trim',$val['options']));
/*END - Remove white spaces */
update_post_meta( $post_id, $key, $val); // Add new value.
$fields_order[] = $key;
}
//
endforeach;
update_post_meta( $post_id, '_aol_fields_order', $fields_order); // Add new value.
}
}
/**
* This class contains all nuts and bolts of plugin settings.
*
*
* @since 1.3
* @package Applyonline_settings
* @author Farhan Noor
**/
class Applyonline_Settings extends Applyonline_MetaBoxes{
private $version;
public function __construct($version) {
//parent::__construct(); //Acitvating Parent's constructor
$this->version = $version;
//Registering Submenus.
add_action('admin_menu', array($this, 'sub_menus'));
//Registering Settings.
add_action( 'admin_init', array($this, 'registers_settings') );
add_filter( 'plugin_row_meta', array($this, 'plugin_row_meta'), 10, 2 );
//Manageing AOL role capabilites.
add_filter( "option_page_capability_aol_settings_group", 'aol_manager_capability' );
add_filter( "option_page_capability_aol_ad_template", 'aol_manager_capability' );
add_filter( "option_page_capability_aol_ads", 'aol_manager_capability' );
add_filter( "option_page_capability_aol_applications", 'aol_manager_capability' );
}
public function plugin_row_meta($links, $file){
if ( strpos( $file, 'apply-online.php' ) !== false ) {
$links['settings'] = 'Settings';
}
return $links;
}
public function sub_menus(){
add_menu_page( __('Settings', 'apply-online'), __('Apply Online', 'apply-online'), 'edit_applications', 'aol-settings', array($this, 'settings_page_callback'), 'dashicons-admin-site',31 );
add_submenu_page('aol-settings', __('Settings', 'apply-online'), __('Settings', 'apply-online'), 'edit_applications', 'aol-settings');
$filters = aol_ad_filters();
foreach($filters as $key => $val){
add_submenu_page( 'aol-settings', '', sprintf(__('%s Filter', 'apply-online'), $val), 'edit_applications', "edit-tags.php?taxonomy=aol_ad_".sanitize_key($key)."&post_type=aol_ad", null );
}
}
function save_settings(){
if(!current_user_can('edit_applications')) return;
if ( !empty( $_POST['aol_default_app_fields'] ) && check_admin_referer( 'aol_awesome_pretty_nonce','aol_default_app_fields' ) ) {
//Remove unnecessary fields
foreach($_POST as $key => $val){
if(substr($key, 0, 4) != '_aol') unset($_POST[$key]);
}
//Save aol default fields in DB.
update_option('aol_default_fields', $_POST);
}
}
public function settings_page_callback(){
$this->save_settings();
$tabs = $tabs = json_decode(json_encode($this->settings_api()), FALSE);
ob_start();
?>
In your WordPress admin panel, go to "All Ads" menu with globe icon and add a new ad listing here.
How to show ad listings on the front-end?
You may choose either option.
Write [aol] shortcode in an existing page or add a new page and write shortcode anywhere in the page editor. Now click on VIEW to see all of your ads on front-end.
The url lists all the applications using your theme's default look and feel.
(If above not working, try saving permalinks without any change)
Can I show selected ads on front-end?
Yes, you can show any number of ads on your website by using shortcode with "ads" attribute. Ad ids must be separated with commas i.e. [aol ads="1,2,3" type="ad"]. Default type is "ad".
Can I show ads without excerpt/summary?
Yes, use shortcode with "excerpt" attribute i.e. [aol excerpt="no"]
What attributes can i use in the shortcode?
Default shortcode with all attributes is [aol ads="1,2,3" excerpt="no"]. Use only required attributes.
Can I display application form only using shortocode?
Yes, [aol_form id="0"] is the shortcode to display a particular application form in wordpress pages or posts. Use correct form id in the shortocode.