Sindbad~EG File Manager
<?php
/**
* Add attributes feature for course
*
* @since 2.1.4
*/
if ( ! class_exists( 'LP_Course_Attributes' ) ) {
/**
* Class LP_Course_Attributes
*/
class LP_Course_Attributes {
/**
* @var string
*/
private $_tax = '';
/**
* @var bool
*/
private $_screen = false;
/**
* @var null
*/
private $_attribute_terms = null;
/**
* LP_Course_Attributes constructor.
*/
public function __construct() {
add_action( 'init', array( $this, 'register' ), 10 );
add_action( 'load-edit-tags.php', array( $this, 'ready' ) );
add_action( 'pre_delete_term', array( $this, 'pre_delete_term' ), 10, 2 );
add_action( 'delete_term', array( $this, 'delete_terms' ), 10, 5 );
add_filter( 'learn_press_admin_tabs_info', array( $this, 'admin_tab' ) );
add_filter( 'course_attribute_row_actions', array( $this, 'row_actions' ), 10, 2 );
add_filter( 'terms_clauses', array( $this, 'term_clauses' ), 10, 3 );
add_filter( 'learn_press_admin_tabs_on_pages', array( $this, 'admin_tabs_pages' ) );
add_filter( 'learn_press_lp_course_tabs', array( $this, 'course_attributes_tab' ) );
add_action( 'learn_press_admin_load_scripts', array( $this, 'admin_scripts' ) );
LP_Request_Handler::register(
array(
array(
'priority' => 100,
'action' => 'remove-course-attribute-terms',
'callback' => array( $this, 'remove_terms' ),
),
array(
'action' => 'add-attribute-to-course',
'callback' => array( $this, 'add_attribute_to_course' ),
),
array(
'action' => 'add-attribute-value',
'callback' => array( $this, 'add_attribute_value' ),
),
array(
'action' => 'save-attributes',
'callback' => array( $this, 'save_attributes' ),
),
)
);
}
public function save_attributes( $course_id ) {
$data = learn_press_get_request( 'data' );
$attributes = array();
parse_str( $data, $attributes );
if ( $attributes ) {
$attributes = $attributes['course-attribute-values'];
foreach ( $attributes as $taxonomy_id => $values ) {
if ( ! $values ) {
continue;
}
$taxonomy = get_term( $taxonomy_id, LP_COURSE_ATTRIBUTE );
wp_set_object_terms( $course_id, $values, LP_COURSE_ATTRIBUTE . '-' . $taxonomy->slug );
}
}
die();
}
public function add_attribute_value( $course_id ) {
if ( LP_COURSE_CPT != get_post_type( $course_id ) ) {
return;
}
$taxonomy = learn_press_get_request( 'taxonomy' );
$name = learn_press_get_request( 'name' );
$new = learn_press_add_course_attribute_value( $name, $taxonomy );
$response = array();
if ( ! is_wp_error( $new ) ) {
$term = get_term_by( 'term_taxonomy_id', $new['term_taxonomy_id'] );
$response['slug'] = $term->slug;
$response['name'] = $term->name;
$response['result'] = 'success';
} elseif ( ! $new ) {
$response['result'] = 'error';
$response['error'] = __( 'Unknown error', 'learnpress' );
} else {
$response['result'] = 'error';
$response['error'] = $new->get_error_messages();
}
learn_press_send_json( $response );
die();
}
public function add_attribute_to_course( $course_id ) {
$taxonomy = learn_press_get_request( 'taxonomy' );
if ( LP_COURSE_CPT != get_post_type( $course_id ) ) {
return;
}
$attribute = learn_press_add_attribute_to_course( $course_id, $taxonomy );
if ( $attribute ) {
$postId = $course_id;
include learn_press_get_admin_view( 'meta-boxes/course/html-course-attribute' );
}
die();
}
public function admin_scripts() {
LP_Assets::enqueue_script( 'learn-press-course-attributes' );
LP_Assets::enqueue_script( 'select2' );
LP_Assets::enqueue_style( 'learn-press-course-attributes' );
LP_Assets::enqueue_style( 'learn-press-statistics-select2' );
}
public function course_attributes_tab( $tabs ) {
$tabs['attributes'] = array(
'title' => __( 'Attributes', 'learnpress' ),
'callback' => array( $this, 'course_attributes' ),
);
return $tabs;
}
public function course_attributes() {
include learn_press_admin_view( 'meta-boxes/course/attributes' );
}
public function remove_terms( $attribute ) {
if ( learn_press_delete_attribute_terms( $attribute ) ) {
learn_press_add_notice( 'Deleted attribute terms', 'learnpress' );
}
wp_redirect( remove_query_arg( 'remove-course-attribute-terms' ) );
}
/**
* @param int $term
* @param int $tt_id
* @param string $taxonomy
* @param WP_Term $deleted_term
* @param array $object_ids
*
* @return array|bool
*/
public function delete_terms( $term, $tt_id, $taxonomy, $deleted_term, $object_ids ) {
if ( LP_COURSE_ATTRIBUTE != $taxonomy ) {
return false;
}
return learn_press_delete_attribute_terms( $deleted_term->slug );
}
public function pre_delete_term( $term, $taxonomy ) {
}
/**
*
*/
public function ready() {
if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
$this->_tax = $_REQUEST['taxonomy'];
$this->_screen = get_current_screen();
if ( $this->_screen->id == 'edit-' . LP_COURSE_ATTRIBUTE ) {
add_filter( "manage_{$this->_screen->id}_columns", array( $this, 'columns' ) );
add_filter( "manage_{$this->_tax}_custom_column", array( $this, 'column' ), 10, 3 );
}
}
}
/**
* @param $content
* @param $column_name
* @param $term_id
*
* @return string
*/
public function column( $content, $column_name, $term_id ) {
if ( $column_name == 'terms' ) {
$attribute = get_term( $term_id );
$terms = learn_press_get_attribute_terms( $term_id );
if ( $terms ) {
$term_labels = array();
foreach ( $terms as $term ) {
$term_labels[] = sprintf( '<a href="%s">%s</a>', get_edit_term_link( $term->term_id, $term->taxonomy, LP_COURSE_CPT ), $term->name );
}
$content = join( ', ', $term_labels );
} else {
$content .= __( 'No terms found.', 'learnpress' );
}
$content .= '<div class="row-actions">' . $this->terms_row_actions( $attribute ) . '</div>';
}
return $content;
}
/**
* @param $tax
*
* @return string
*/
public function terms_row_actions( $tax ) {
$uri = wp_doing_ajax() ? wp_get_referer() : $_SERVER['REQUEST_URI'];
$edit_link = add_query_arg(
'wp_http_referer',
urlencode( wp_unslash( $uri ) ),
add_query_arg(
array(
'taxonomy' => LP_COURSE_ATTRIBUTE . '-' . $tax->slug,
'post_type' => LP_COURSE_CPT,
),
admin_url( 'term.php' )
)
);
$terms_actions = array(
'edit' => sprintf(
'<a href="%s" aria-label="%s" >%s </a > ',
esc_url( $edit_link ),
esc_attr( sprintf( __( 'Edit “%s”', 'learnpress' ), $tax->name ) ),
__( 'Edit', 'learnpress' )
),
'delete' => sprintf(
'<a href="%s" aria-label="%s" >%s </a > ',
esc_url( add_query_arg( 'remove-course-attribute-terms', $tax->term_id ) ),
'',
__( 'Clear', 'learnpress' )
),
);
return join( ' | ', $terms_actions );
}
/**
* @param $columns
*
* @return mixed
*/
public function columns( $columns ) {
if ( $this->_tax == LP_COURSE_ATTRIBUTE && ! empty( $columns['posts'] ) ) {
unset( $columns['posts'] );
}
$columns['terms'] = __( 'Terms', 'learnpress' );
return $columns;
}
/**
* @param $pages
*
* @return array
*/
public function admin_tabs_pages( $pages ) {
if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
$screen_id = get_current_screen()->id;
$pages[] = $screen_id;
}
return $pages;
}
/**
* @param $a
* @param $b
* @param $c
*
* @return mixed
*/
public function term_clauses( $a, $b, $c ) {
// print_r( func_get_args() );
return $a;
}
/**
* @param $tabs
*
* @return array
*/
public function admin_tab( $tabs ) {
if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
$screen_id = get_current_screen()->id;
} else {
$screen_id = 'edit-' . LP_COURSE_ATTRIBUTE;
}
$tabs[] = array(
'link' => 'edit-tags.php?taxonomy=' . LP_COURSE_ATTRIBUTE . '&post_type=lp_course',
'name' => __( 'Attributes', 'learnpress' ),
'id' => $screen_id,
);
return $tabs;
}
public function register() {
register_taxonomy(
LP_COURSE_ATTRIBUTE,
array( 'lp_course' ),
array(
'label' => __( 'Attribute', 'learnpress' ),
'labels' => array(
'name' => __( 'Attributes', 'learnpress' ),
'singular_name' => __( 'Attribute', 'learnpress' ),
'menu_name' => __( 'Attributes', 'learnpress' ),
'add_new_item' => __( 'Add New Attribute', 'learnpress' ),
'all_items' => __( 'All Attributes', 'learnpress' ),
),
'show_ui' => true,
'query_var' => true,
'show_in_menu' => 'learn_press',
'public' => false,
'rewrite' => array(
'slug' => LP_COURSE_ATTRIBUTE,
'with_front' => false,
'hierarchical' => true,
),
)
);
if ( learn_press_get_attributes() ) {
$attributes = learn_press_get_attributes();
foreach ( $attributes as $attribute ) {
$this->_register_custom_attribute( $attribute );
}
}
}
/**
* @param $actions
* @param $tag
*
* @return mixed
*/
public function row_actions( $actions, $tag ) {
return $actions;
}
/**
* @param $attribute
*/
private function _register_custom_attribute( $attribute ) {
$name = $attribute->name;
$singular_name = $attribute->name;
$tax_data = array(
'hierarchical' => true,
'update_count_callback' => '_update_post_term_count',
'labels' => array(
'name' => $name,
'singular_name' => $singular_name,
'search_items' => sprintf( __( 'Search Course %s', 'learnpress' ), $name ),
'all_items' => sprintf( __( 'All Course %s', 'learnpress' ), $name ),
'parent_item' => sprintf( __( 'Parent Course %s', 'learnpress' ), $singular_name ),
'parent_item_colon' => sprintf( __( 'Parent Course %s:', 'learnpress' ), $singular_name ),
'edit_item' => sprintf( __( 'Edit Course %s', 'learnpress' ), $singular_name ),
'update_item' => sprintf( __( 'Update Course %s', 'learnpress' ), $singular_name ),
'add_new_item' => sprintf( __( 'Add New Course %s', 'learnpress' ), $singular_name ),
'new_item_name' => sprintf( __( 'New Course %s', 'learnpress' ), $singular_name ),
'not_found' => sprintf( __( 'No "Course %s" found', 'learnpress' ), $singular_name ),
),
'show_ui' => true,
'show_in_quick_edit' => false,
'show_in_menu' => false,
'show_in_nav_menus' => false,
'meta_box_cb' => false,
'query_var' => false,
'rewrite' => false,
'sort' => false,
'public' => false,
'show_in_nav_menus' => false,
);
$tax_data['rewrite'] = array(
'slug' => $attribute->slug,
'with_front' => false,
'hierarchical' => true,
);
register_taxonomy(
sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute->slug ),
apply_filters( 'learn_press_course_attribute_object_' . $attribute->slug, array( 'lp_course' ) ),
apply_filters( 'learn_press_course_attribute_args_' . $attribute->slug, $tax_data )
);
}
}
}
return new LP_Course_Attributes();
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists