411 lines
9.8 KiB
PHP
411 lines
9.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Class Wiaas_Document
|
|
*/
|
|
class Wiaas_Document {
|
|
|
|
/**
|
|
* Default available document types for wiaas
|
|
* @var array
|
|
*/
|
|
private static $available_doc_types = array(
|
|
'template_questionaire' => array(
|
|
'name' => 'Template Questionaire',
|
|
'is_special_type' => false,
|
|
),
|
|
'order_questionaire' => array(
|
|
'name' => 'Order Questionaire',
|
|
'is_special_type' => true,
|
|
),
|
|
'configuration' => array(
|
|
'name' => 'Configuration',
|
|
'is_special_type' => true,
|
|
),
|
|
'install_guide' => array(
|
|
'name' => 'Install guide',
|
|
'is_special_type' => false,
|
|
),
|
|
'customer_acceptance' => array(
|
|
'name' => 'Customer acceptance',
|
|
'is_special_type' => true,
|
|
),
|
|
'template_agreement' => array(
|
|
'name' => 'Template Agreement',
|
|
'is_special_type' => false,
|
|
),
|
|
'order_agreement' => array(
|
|
'name' => 'Order Agreement',
|
|
'is_special_type' => true,
|
|
),
|
|
'installation_protocol' => array(
|
|
'name' => 'Installation protocol',
|
|
'is_special_type' => true,
|
|
),
|
|
'statements' => array(
|
|
'name' => 'Statements',
|
|
'is_special_type' => false,
|
|
),
|
|
'customer_acceptance_template' => array(
|
|
'name' => 'Customer acceptance template',
|
|
'is_special_type' => false,
|
|
),
|
|
);
|
|
|
|
private static $special_doc_types= array(
|
|
'order_questionaire', 'configuration', 'customer_acceptance', 'order_agreement', 'installation_protocol'
|
|
);
|
|
|
|
public static function init() {
|
|
|
|
add_action('registered_taxonomy', array( __CLASS__, 'register_wiaas_doc_categories' ));
|
|
|
|
add_action('init', array(__CLASS__, 'register_wiaas_document'));
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Retrieve available categories for wiaas documents
|
|
*
|
|
* @return array Array of available document categories
|
|
*/
|
|
public static function get_available_doc_types() {
|
|
|
|
$terms = get_terms(array(
|
|
'taxonomy' => 'wiaas_doc_type',
|
|
'hide_empty' => false,
|
|
));
|
|
|
|
return array_map(function($term) {
|
|
$is_special = array_key_exists($term->slug, self::$available_doc_types) ?
|
|
self::$available_doc_types[$term->slug]['is_special_type'] :
|
|
false;
|
|
|
|
return array(
|
|
'id' => $term->slug,
|
|
'name' => $term->name,
|
|
'is_special_type' => $is_special,
|
|
|
|
);
|
|
|
|
}, $terms);
|
|
}
|
|
|
|
/**
|
|
* Create new document
|
|
* @param $name
|
|
* @param $path
|
|
* @param bool $visible
|
|
*
|
|
* @return bool|int|WP_Error
|
|
*/
|
|
public static function add_document($name, $path, $visible = false) {
|
|
// create
|
|
$id = wp_insert_post( array(
|
|
'post_title' => $name,
|
|
'post_author' => wp_get_current_user()->ID,
|
|
'post_type' => 'wiaas_doc',
|
|
'post_status' => 'publish',
|
|
) );
|
|
|
|
if ( is_wp_error( $id ) ) {
|
|
return false;
|
|
}
|
|
|
|
update_post_meta($id, '_wiaas_doc_versions', array( $path ));
|
|
|
|
self::set_is_doc_visible($id, $visible);
|
|
|
|
return $id;
|
|
}
|
|
|
|
/**
|
|
* Add new version for document
|
|
* @param $doc_id
|
|
* @param $url
|
|
*/
|
|
public static function add_document_version($doc_id, $url) {
|
|
$versions = get_post_meta($doc_id, '_wiaas_doc_versions', true);
|
|
|
|
$versions[] = $url;
|
|
|
|
update_post_meta($doc_id, '_wiaas_doc_versions', $versions);
|
|
}
|
|
|
|
/**
|
|
* Assign type to document
|
|
* @param $id
|
|
* @param $type
|
|
*/
|
|
public static function set_doc_type($id, $type) {
|
|
wp_set_object_terms($id, $type, 'wiaas_doc_type');
|
|
}
|
|
|
|
/**
|
|
* Set if document visible to customer
|
|
* @param $id
|
|
* @param $is_visible
|
|
*/
|
|
public static function set_is_doc_visible($id, $is_visible) {
|
|
|
|
update_post_meta($id, '_wiaas_doc_visible', $is_visible ? 'yes' : 'no');
|
|
}
|
|
|
|
/**
|
|
* Retrieve document type
|
|
* @param $id
|
|
*
|
|
* @return array|null
|
|
*/
|
|
public static function get_doc_type($id) {
|
|
$terms = wp_get_object_terms($id, 'wiaas_doc_type');
|
|
|
|
if (is_wp_error($terms) || count($terms) === 0) {
|
|
return null;
|
|
}
|
|
|
|
$term = $terms[0];
|
|
return array(
|
|
'id' => $term->slug,
|
|
'name' => $term->name,
|
|
'is_special_type' => in_array($term->slug, self::$special_doc_types),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retrieve if document visible to customer
|
|
* @param $id
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function is_doc_visible($id) {
|
|
return get_post_meta($id, '_wiaas_doc_visible', true) === 'yes';
|
|
}
|
|
|
|
/**
|
|
* Retrieve all versions for document
|
|
* @param $doc_id
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function get_document_versions($doc_id) {
|
|
return get_post_meta($doc_id, '_wiaas_doc_versions', true);
|
|
}
|
|
|
|
/**
|
|
* Get latest or specific document version
|
|
* @param $id
|
|
* @param null $version_id
|
|
*
|
|
* @return null
|
|
*/
|
|
public static function get_doc_version($id, $version_id = null) {
|
|
$versions = self::get_document_versions($id);
|
|
|
|
if (count($versions) === 0) {
|
|
return null;
|
|
}
|
|
|
|
return isset($versions[$version_id]) ?
|
|
$versions[$version_id] : $versions[count($versions) - 1];
|
|
}
|
|
|
|
/**
|
|
* Get document download link for latest or specified version
|
|
* @param $id
|
|
* @param null $version
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_doc_download_link($id, $version = null) {
|
|
$permalink = get_permalink($id);
|
|
$sap = strpos($permalink, '?')?'&':'?';
|
|
|
|
$ver = isset($version) ? "&v={$version}" : '';
|
|
return $permalink.$sap."wiaasdoc={$id}{$ver}";
|
|
}
|
|
|
|
/**
|
|
* Retrieve document informations
|
|
* @param $id
|
|
*
|
|
* @return array|null
|
|
*/
|
|
public static function get_doc_info($id) {
|
|
$post = get_post($id, ARRAY_A);
|
|
|
|
if (!$post) {
|
|
return null;
|
|
}
|
|
|
|
$version = self::get_doc_version($id);
|
|
|
|
return array(
|
|
'id' => $id,
|
|
'name' => $post['post_title'],
|
|
'url' => self::get_doc_download_link($id),
|
|
'type' => self::get_doc_type($id),
|
|
'version' => $version,
|
|
'visible' => self::is_doc_visible($id),
|
|
'extension' => wiaas_get_doc_version_extension($version),
|
|
);
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Search document by name
|
|
* @param $name
|
|
* @param int $limit
|
|
* @param bool $include_special
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function search($name, $limit = 10, $include_special = false) {
|
|
$query = new WP_Query();
|
|
|
|
$args = array(
|
|
'post_status' => 'publish',
|
|
'post_type' => 'wiaas_doc',
|
|
'posts_per_page' => $limit,
|
|
's' => $name
|
|
);
|
|
|
|
if (!$include_special) {
|
|
$args['tax_query'] = array(
|
|
array(
|
|
'taxonomy' => 'wiaas_doc_type',
|
|
'field' => 'slug',
|
|
'operator' => 'NOT IN',
|
|
'terms' => self::$special_doc_types,
|
|
)
|
|
);
|
|
}
|
|
|
|
$items = $query->query($args);
|
|
|
|
return array_map(function($item) {
|
|
$id = $item->ID;
|
|
return array(
|
|
'id' => $id,
|
|
'name' => $item->post_title,
|
|
);
|
|
}, $items);
|
|
}
|
|
|
|
/**
|
|
* Registers taxonomy and default values for wiaas document types
|
|
*/
|
|
public static function register_wiaas_doc_categories($taxonomy) {
|
|
|
|
if ($taxonomy !== 'wpdmcategory') {
|
|
return;
|
|
}
|
|
|
|
foreach (self::$available_doc_types as $key => $available_doc_type) {
|
|
wp_insert_term($available_doc_type['name'], 'wpdmcategory', array(
|
|
'slug' => $key
|
|
));
|
|
}
|
|
}
|
|
|
|
public static function register_wiaas_document() {
|
|
// Register document object
|
|
self::_register_document();
|
|
// Register document types taxonomy
|
|
self::_register_doc_types();
|
|
}
|
|
|
|
// PRIVATE
|
|
|
|
/**
|
|
* Register wiaas_doc post type
|
|
*/
|
|
private static function _register_document() {
|
|
$labels = array(
|
|
'name' => __('Documents','wiaas'),
|
|
'singular_name' => __('Document','wiaas'),
|
|
'add_new' => __('Add New','wiaas'),
|
|
'add_new_item' => __('Add New Document','wiaas'),
|
|
'edit_item' => __('Edit Document','wiaas'),
|
|
'new_item' => __('New Document','wiaas'),
|
|
'all_items' => __('All Documents','wiaas'),
|
|
'view_item' => __('View Document','wiaas'),
|
|
'search_items' => __('Search Documents','wiaas'),
|
|
'not_found' => __('No Document Found','wiaas'),
|
|
'not_found_in_trash' => __('No Documents found in Trash','wiaas'),
|
|
'parent_item_colon' => '',
|
|
'menu_name' => __('Documents','wiaas')
|
|
|
|
);
|
|
|
|
$args = array(
|
|
'labels' => $labels,
|
|
'public' => true,
|
|
'publicly_queryable' => false,
|
|
'show_ui' => true,
|
|
'show_in_menu' => true,
|
|
'show_in_nav_menus' => true,
|
|
'query_var' => true,
|
|
'rewrite' => array('slug' => 'wiaas_doc', 'with_front' => false),
|
|
'capability_type' => 'wiaas_doc',
|
|
'has_archive' => false,
|
|
'hierarchical' => false,
|
|
'taxonomies' => array(),
|
|
'menu_icon' => 'dashicons-media-document',
|
|
'exclude_from_search' => false,
|
|
'supports' => array('title'),
|
|
|
|
);
|
|
|
|
register_post_type('wiaas_doc', $args);
|
|
}
|
|
|
|
/**
|
|
* Register wiaas_doc_type taxonomy for wiaas_doc post type
|
|
*/
|
|
private static function _register_doc_types() {
|
|
$labels = array(
|
|
'name' => _x( 'Document type', 'taxonomy general name', 'wiaas' ),
|
|
'singular_name' => _x( 'Document type', 'taxonomy singular name', 'wiaas' ),
|
|
'menu_name' => _x( 'Document types', 'Admin menu name', 'wiaas' ),
|
|
'search_items' => __( 'Search Document types', 'wiaas' ),
|
|
'all_items' => __( 'All Document types', 'wiaas' ),
|
|
'parent_item' => __( 'Parent Document type', 'wiaas' ),
|
|
'parent_item_colon' => __( 'Parent Document type:', 'wiaas' ),
|
|
'edit_item' => __( 'Edit Document type', 'wiaas' ),
|
|
'update_item' => __( 'Update Document type', 'wiaas' ),
|
|
'add_new_item' => __( 'Add New Document type', 'wiaas' ),
|
|
'new_item_name' => __( 'New Document type Name', 'wiaas' ),
|
|
);
|
|
|
|
$args = array(
|
|
'hierarchical' => false,
|
|
'label' => __( 'Document type', 'wiaas' ),
|
|
'labels' => $labels,
|
|
'show_ui' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'rewrite' => array( 'slug' => 'wiaas_doc_type' ),
|
|
'capabilities' => array(
|
|
'manage_terms' => 'manage_wiaas_doc_terms',
|
|
'edit_terms' => 'edit_wiaas_doc_terms',
|
|
'delete_terms' => 'delete_wiaas_doc_terms',
|
|
'assign_terms' => 'assign_wiaas_doc_terms',
|
|
),
|
|
);
|
|
|
|
register_taxonomy( 'wiaas_doc_type', array( 'wiaas_doc' ), $args );
|
|
|
|
foreach (self::$available_doc_types as $key => $available_doc_type) {
|
|
wp_insert_term($available_doc_type['name'], 'wiaas_doc_type', array(
|
|
'slug' => $key
|
|
));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
Wiaas_Document::init();
|