static function render_comments_meta_box($post) { global $wpdb; $comment_type = Kanban_Utils::format_key(self::$slug, 'comment'); $sql = "SELECT `{$wpdb->prefix}comments`.*\n\t\t\t\tFROM `{$wpdb->prefix}comments`\n\t\t\t\tWHERE `comment_post_ID` = '{$post->ID}'\n\t\t\t\tAND `comment_type` = '{$comment_type}'\n\t\t\t\tORDER BY `{$wpdb->prefix}comments`.`comment_date` DESC\n\t\t\t;"; $sql = apply_filters(sprintf('%s_sql_%s_comments_meta_box', Kanban::get_instance()->settings->basename, self::$slug), $sql); $comments = $wpdb->get_results($sql); ?> <style> #kanban_task_comments .inside { margin: 0; padding: 0; } #kanban_task_comments li { padding: 10px; } #kanban_task_comments small { color: #CCC; display: block; } </style> <ul class="striped"> <?php foreach ($comments as $comment) { $comment_date_dt = new DateTime($comment->comment_date); ?> <li> <small> <?php echo $comment_date_dt->format('D, j M, Y'); ?> at <?php echo $comment_date_dt->format('g:ia'); ?> </small> <?php echo $comment->comment_content; ?> </li> <?php } ?> </ul> <?php }
static function ajax_save() { if (!isset($_POST[Kanban_Utils::get_nonce()]) || !wp_verify_nonce($_POST[Kanban_Utils::get_nonce()], sprintf('%s-save', Kanban::get_instance()->settings->basename)) || !is_user_logged_in()) { wp_send_json_error(); } do_action(sprintf('%s_before_%s_ajax_save', Kanban::get_instance()->settings->basename, self::$slug)); $status_id_old = Kanban_Utils::format_key(self::$slug, 'status_id_old'); $status_id_new = Kanban_Utils::format_key(self::$slug, 'status_id_new'); // build post data $post_data = array('post_type' => Kanban_Post_Types::format_post_type(self::$slug), 'post_title' => sprintf('changed task ID %s from %s to %s', $_POST['task_id'], $_POST['status_id_old'], $_POST['status_id_new']), 'post_parent' => $_POST['task_id'], 'postmeta' => array($status_id_old => $_POST['status_id_old'], $status_id_new => $_POST['status_id_new']), 'terms' => array()); // save our work_hour $post_data = Kanban_Post::save($post_data); if (!$post_data) { wp_send_json_error(); } do_action(sprintf('%s_after_%s_ajax_save', Kanban::get_instance()->settings->basename, self::$slug)); wp_send_json_success(array('message' => sprintf('%s saved', self::$slug), self::$slug => $post_data)); }
/** * load data needed for board's javascript * @param string $template the passed in template path * @return string the same template path */ static function send_page_data_to_template($template) { if (!isset(Kanban_Template::get_instance()->slug) || Kanban_Template::get_instance()->slug != self::$slug) { return $template; } global $wp_query; $wp_query->query_vars['kanban'] = (object) array(); $wp_query->query_vars['kanban']->board = (object) array(); // // get all data for the javascript $wp_query->query_vars['kanban']->board->allowed_users = Kanban_User::get_allowed_users(); $wp_query->query_vars['kanban']->board->estimates = Kanban_Terms::terms_in_order('task', 'estimate'); $wp_query->query_vars['kanban']->board->status_tax_key = Kanban_Utils::format_key('task', 'status'); $wp_query->query_vars['kanban']->board->status_color_field_name = sprintf('%s_colors', $wp_query->query_vars['kanban']->board->status_tax_key); $wp_query->query_vars['kanban']->board->status_colors = Kanban_Settings::get_option($wp_query->query_vars['kanban']->board->status_color_field_name, null, array()); $wp_query->query_vars['kanban']->board->statuses = Kanban_Terms::terms_in_order('task', 'status'); foreach ($wp_query->query_vars['kanban']->board->statuses as $status) { if (!isset($wp_query->query_vars['kanban']->board->status_colors[$status->term_id])) { continue; } $status->color = $wp_query->query_vars['kanban']->board->status_colors[$status->term_id]; } $wp_query->query_vars['kanban']->board->projects = Kanban_Project::get_all(); $wp_query->query_vars['kanban']->board->tasks = Kanban_Task::get_all(); $current_user_id = get_current_user_id(); $wp_query->query_vars['kanban']->board->current_user = get_user_by('id', $current_user_id); unset($wp_query->query_vars['kanban']->board->current_user->data->user_pass); $wp_query->query_vars['kanban']->board->current_user->data->long_name_email = Kanban_User::format_user_name($wp_query->query_vars['kanban']->board->current_user); $wp_query->query_vars['kanban']->board->current_user->data->short_name = Kanban_User::format_user_name($wp_query->query_vars['kanban']->board->current_user, TRUE); $wp_query->query_vars['kanban']->board->current_user->data->initials = Kanban_User::get_initials($wp_query->query_vars['kanban']->board->current_user); $wp_query->query_vars['kanban']->board->col_percent_w = count($wp_query->query_vars['kanban']->board->statuses) > 0 ? 100 / count($wp_query->query_vars['kanban']->board->statuses) : 100; $wp_query->query_vars['kanban']->board->sidebar_w = count($wp_query->query_vars['kanban']->board->statuses) > 0 ? 100 / (count($wp_query->query_vars['kanban']->board->statuses) - 2) : 0; return $template; }
static function wpse56652_filt_comm($param) { if (isset($param->query_vars)) { $comment_types = array(Kanban_Utils::format_key('task', 'comment')); $param->query_vars['type__not_in'] = $comment_types; } return $param; }
static function terms_in_order($post_type, $key) { $tax_key = Kanban_Utils::format_key($post_type, $key); $field_name = sprintf('%s_order', $tax_key); $order = Kanban_Settings::get_option($field_name, $field_name, array()); asort($order); // get all terms for displaying $args = array('hide_empty' => 0); $terms = get_terms($tax_key, $args); $terms = Kanban_Utils::build_array_with_id_keys($terms, 'term_id'); $terms_in_order = array(); if (!empty($order)) { foreach ($order as $status_id => $order) { $terms_in_order[] = $terms[$status_id]; unset($terms[$status_id]); } } return array_filter(array_merge($terms_in_order, $terms)); }
static function custom_post_types() { foreach (Kanban_Post_Types::$post_types as $post_type_slug => $post_type_data) { $post_type_label = ucfirst($post_type_slug); $labels = array('name' => str_replace('_', ' ', sprintf('%ss', $post_type_label)), 'singular_name' => str_replace('_', ' ', $post_type_label), 'menu_name' => str_replace('_', ' ', sprintf('%ss', $post_type_label)), 'name_admin_bar' => str_replace('_', ' ', $post_type_label), 'parent_item_colon' => str_replace('_', ' ', sprintf('Parent %s:', $post_type_label)), 'all_items' => str_replace('_', ' ', sprintf('All %ss', $post_type_label)), 'add_new_item' => str_replace('_', ' ', sprintf('Add New %s', $post_type_label)), 'add_new' => 'Add New', 'new_item' => str_replace('_', ' ', sprintf('New %s', $post_type_label)), 'edit_item' => str_replace('_', ' ', sprintf('Edit %s', $post_type_label)), 'update_item' => str_replace('_', ' ', sprintf('Update %s', $post_type_label)), 'view_item' => str_replace('_', ' ', sprintf('View %s', $post_type_label)), 'search_items' => str_replace('_', ' ', sprintf('Search %s', $post_type_label)), 'not_found' => 'Not found', 'not_found_in_trash' => 'Not found in Trash'); $rewrite = array('slug' => NULL, 'with_front' => true, 'pages' => true, 'feeds' => true); $args = array('label' => $post_type_label, 'labels' => $labels, 'supports' => array('title', 'editor', 'custom-fields'), 'hierarchical' => true, 'public' => false, 'show_ui' => false, 'show_in_menu' => false, 'menu_position' => 5, 'show_in_admin_bar' => false, 'show_in_nav_menus' => false, 'can_export' => true, 'has_archive' => false, 'exclude_from_search' => true, 'publicly_queryable' => false, 'rewrite' => false, 'capability_type' => 'page'); register_post_type(Kanban_Post_Types::format_post_type($post_type_slug), $args); // register taxonomies associated with each post type foreach ($post_type_data['taxonomies'] as $taxonomy_slug => $values) { $taxonomy_key = Kanban_Utils::format_key($post_type_slug, $taxonomy_slug); $taxonomy_label = ucwords(sprintf('%s %s', $post_type_slug, $taxonomy_slug)); $labels = array('name' => $taxonomy_label, 'singular_name' => $taxonomy_label, 'menu_name' => $taxonomy_label, 'all_items' => sprintf('All %ss', $taxonomy_label), 'parent_item' => sprintf('Parent %s', $taxonomy_label), 'parent_item_colon' => sprintf('Parent %s:', $taxonomy_label), 'new_item_name' => sprintf('New %s Name', $taxonomy_label), 'add_new_item' => sprintf('Add New %s', $taxonomy_label), 'edit_item' => sprintf('Edit %s', $taxonomy_label), 'update_item' => sprintf('Update %s', $taxonomy_label), 'view_item' => sprintf('View %s', $taxonomy_label), 'separate_items_with_commas' => sprintf('Separate %ss with commas', $taxonomy_label), 'add_or_remove_items' => sprintf('Add or remove %ss', $taxonomy_label), 'choose_from_most_used' => 'Choose from the most used', 'popular_items' => sprintf('Popular %ss', $taxonomy_label), 'search_items' => sprintf('Search %ss', $taxonomy_label), 'not_found' => 'Not Found'); $rewrite = array('slug' => sprintf('%s/%s/%s', Kanban::$slug, Kanban_Utils::make_word_plural($post_type_slug), Kanban_Utils::make_word_plural($taxonomy_slug)), 'with_front' => true, 'hierarchical' => false); $args = array('labels' => $labels, 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => false, 'show_tagcloud' => false, 'rewrite' => false); register_taxonomy($taxonomy_key, Kanban_Post_Types::format_post_type($post_type_slug), $args); } // taxonomies } // post_types }
static function ajax_save() { if (!isset($_POST[Kanban_Utils::get_nonce()]) || !wp_verify_nonce($_POST[Kanban_Utils::get_nonce()], sprintf('%s-save', Kanban::$instance->settings->basename)) || !isset($_POST[Kanban_Task::$slug]) || !is_user_logged_in()) { wp_send_json_error(); } do_action(sprintf('%s_before_%s_ajax_save', Kanban::$instance->settings->basename, self::$slug)); // build post data $post_data = array('post_type' => Kanban_Post_Types::format_post_type('work_hour'), 'post_title' => sanitize_text_field($_POST[Kanban_Task::$slug]['post_title']), 'postmeta' => array(), 'terms' => array()); $hour_operator = Kanban_Utils::format_key('work_hour', 'operator'); $post_data['postmeta'][$hour_operator] = $_POST['operator']; // set assignee as author of work hour $task_user_id_assigned_to = Kanban_Utils::format_key('task', 'user_id_assigned'); if ($_POST[Kanban_Task::$slug]['postmeta'][$task_user_id_assigned_to] > 0) { $post_data['post_author'] = $_POST[Kanban_Task::$slug]['postmeta'][$task_user_id_assigned_to]; } // link task to hour $hour_task_id = Kanban_Utils::format_key('work_hour', 'project_id'); $post_data['postmeta'][$hour_task_id] = $_POST[Kanban_Task::$slug]['ID']; // link current user to hour $hour_user_id_logged = Kanban_Utils::format_key('work_hour', 'user_id_logged'); $post_data['postmeta'][$hour_user_id_logged] = get_current_user_id(); // set task project as work project $task_project_id = Kanban_Utils::format_key('task', 'project_id'); $hour_project_id = Kanban_Utils::format_key('work_hour', 'project_id'); $post_data['postmeta'][$hour_project_id] = $_POST[Kanban_Task::$slug]['postmeta'][$task_project_id]; // set current task status for work hour $task_status = Kanban_Utils::format_key('task', 'status'); $hour_status_id = Kanban_Utils::format_key('work_hour', 'task_status_id'); $post_data['postmeta'][$hour_status_id] = $_POST[Kanban_Task::$slug]['terms'][$task_status][0]; // save our work_hour $post_data = Kanban_Post::save($post_data); if (!$post_data) { wp_send_json_error(); } do_action(sprintf('%s_after_%s_ajax_save', Kanban::$instance->settings->basename, self::$slug)); wp_send_json_success(array('message' => sprintf('%s saved', self::$slug), self::$slug => $post_data)); }
static function admin_init() { $users_field_name = sprintf('%s_user', Kanban::get_instance()->settings->basename); $status_tax_key = Kanban_Utils::format_key('task', 'status'); $status_color_field_name = sprintf('%s_colors', $status_tax_key); $status_order_field_name = sprintf('%s_order', $status_tax_key); $estimate_tax_key = Kanban_Utils::format_key('task', 'estimate'); $estimate_order_field_name = sprintf('%s_order', $estimate_tax_key); $sections = array(array('id' => $users_field_name, 'title' => 'Users'), array('id' => $status_order_field_name, 'title' => 'Status Order'), array('id' => $status_color_field_name, 'title' => 'Status Colors'), array('id' => $estimate_order_field_name, 'title' => 'Estimate Order')); $fields = array(); $fields[$users_field_name] = array(); $all_users = get_users(); $all_users_arr = array(); foreach ($all_users as $user) { $all_users_arr[$user->ID] = Kanban_User::format_user_name($user); } $fields[$users_field_name][] = array('name' => 'allowed_users', 'label' => 'Allowed Users', 'desc' => 'Users who have access to the board', 'type' => 'multicheck', 'options' => $all_users_arr); $statuses_in_order = Kanban_Terms::terms_in_order('task', 'status'); $fields[$status_color_field_name] = array(); foreach ($statuses_in_order as $status) { $fields[$status_color_field_name][] = array('name' => $status->term_id, 'label' => $status->name, 'type' => 'color'); } $fields[$status_order_field_name] = array(); foreach ($statuses_in_order as $status) { $fields[$status_order_field_name][$status->term_id] = array('name' => $status->term_id, 'label' => $status->name, 'type' => 'number'); } $estimates_in_order = Kanban_Terms::terms_in_order('task', 'estimate'); $fields[$estimate_order_field_name] = array(); foreach ($estimates_in_order as $status) { $fields[$estimate_order_field_name][$status->term_id] = array('name' => $status->term_id, 'label' => $status->name, 'type' => 'number'); } self::get_instance()->settings_api = new WeDevs_Settings_API(); //set sections and fields self::get_instance()->settings_api->set_sections($sections); self::get_instance()->settings_api->set_fields($fields); //initialize them self::get_instance()->settings_api->admin_init(); }
static function post_save_estimate_order() { if (!isset($_POST[Kanban_Utils::get_nonce()]) || !wp_verify_nonce($_POST[Kanban_Utils::get_nonce()], 'save_estimate_order') || !is_user_logged_in()) { return; } $tax_key = Kanban_Utils::format_key('task', 'estimate'); $field_name = sprintf('%s_order', $tax_key); self::update_option($field_name, $_POST[$field_name]); Kanban::$instance->flash->add('success', 'Estimates order has been saved'); wp_redirect($_POST['_wp_http_referer']); exit; }
static function on_activation() { // http://wordpress.stackexchange.com/questions/20043/inserting-taxonomy-terms-during-a-plugin-activation Kanban_Post_Types::custom_post_types(); foreach (Kanban_Post_Types::$post_types as $post_type_slug => $post_type_data) { foreach ($post_type_data['taxonomies'] as $taxonomy_slug => $values) { $taxonomy_key = Kanban_Utils::format_key($post_type_slug, $taxonomy_slug); foreach ($values as $slug => $value) { $term_id_arr = wp_insert_term($value, $taxonomy_key, array('slug' => $slug)); } } } // add current user to board $current_user_id = get_current_user_id(); $users_field_name = sprintf('%s_user', Kanban::$instance->settings->basename); $user_settings = Kanban_Settings::get_option($users_field_name, null, array()); if (!isset($user_settings['allowed_users'])) { $user_settings['allowed_users'] = array(); } if (!in_array($current_user_id, $user_settings['allowed_users'])) { $user_settings['allowed_users'][$current_user_id] = $current_user_id; } update_option($users_field_name, $user_settings); // add status order $tax_key = Kanban_Utils::format_key('task', 'status'); $field_name = sprintf('%s_order', $tax_key); $settings = Kanban_Settings::get_option($field_name, null, array()); $slugs_in_order = array_keys(Kanban_Post_Types::$post_types['task']['taxonomies']['status']); $term_ids_in_order = array(); foreach ($slugs_in_order as $order => $slug) { $term = get_term_by('slug', $slug, $tax_key); $term_ids_in_order[$term->term_id] = $order; } update_option($field_name, $term_ids_in_order); // add estimate order $tax_key = Kanban_Utils::format_key('task', 'estimate'); $field_name = sprintf('%s_order', $tax_key); $settings = Kanban_Settings::get_option($field_name, null, array()); $slugs_in_order = array_keys(Kanban_Post_Types::$post_types['task']['taxonomies']['estimate']); $term_ids_in_order = array(); foreach ($slugs_in_order as $order => $slug) { $term = get_term_by('slug', $slug, $tax_key); $term_ids_in_order[$term->term_id] = $order; } update_option($field_name, $term_ids_in_order); // add an example task $post = array('post_status' => 'publish', 'post_type' => Kanban_Post_Types::format_post_type('task'), 'post_author' => $current_user_id); $post_id = wp_insert_post($post); flush_rewrite_rules(); // redirect to welcome page // @link http://premium.wpmudev.org/blog/tabbed-interface/ set_transient(sprintf('_%s_welcome_screen_activation_redirect', Kanban::$instance->settings->basename), true, 30); }
static function on_activation() { // http://wordpress.stackexchange.com/questions/20043/inserting-taxonomy-terms-during-a-plugin-activation Kanban_Post_Types::custom_post_types(); $is_installed_before = get_option(sprintf('_%s_is_installed_before', Kanban::$instance->settings->basename)); if (!$is_installed_before) { foreach (Kanban_Post_Types::$post_types as $post_type_slug => $post_type_data) { foreach ($post_type_data['taxonomies'] as $taxonomy_slug => $values) { $taxonomy_key = Kanban_Utils::format_key($post_type_slug, $taxonomy_slug); foreach ($values as $slug => $value) { $term_id_arr = wp_insert_term($value, $taxonomy_key, array('slug' => $slug)); } } } // add current user to board $users_field_name = sprintf('%s_user', Kanban::$instance->settings->basename); $user_settings = Kanban_Settings::get_option($users_field_name, null, array()); if (empty($user_settings)) { $current_user_id = get_current_user_id(); if (!isset($user_settings['allowed_users'])) { $user_settings['allowed_users'] = array(); } if (!in_array($current_user_id, $user_settings['allowed_users'])) { $user_settings['allowed_users'][$current_user_id] = $current_user_id; } update_option($users_field_name, $user_settings); } // add status order $tax_key = Kanban_Utils::format_key('task', 'status'); $field_name = sprintf('%s_order', $tax_key); $settings = Kanban_Settings::get_option($field_name, null, array()); if (empty($settings)) { $slugs_in_order = array_keys(Kanban_Post_Types::$post_types['task']['taxonomies']['status']); $term_ids_in_order = array(); foreach ($slugs_in_order as $order => $slug) { $term = get_term_by('slug', $slug, $tax_key); $term_ids_in_order[$term->term_id] = $order; } update_option($field_name, $term_ids_in_order); } // add estimate order $tax_key = Kanban_Utils::format_key('task', 'estimate'); $field_name = sprintf('%s_order', $tax_key); $settings = Kanban_Settings::get_option($field_name, null, array()); if (empty($settings)) { $slugs_in_order = array_keys(Kanban_Post_Types::$post_types['task']['taxonomies']['estimate']); $term_ids_in_order = array(); foreach ($slugs_in_order as $order => $slug) { $term = get_term_by('slug', $slug, $tax_key); $term_ids_in_order[$term->term_id] = $order; } update_option($field_name, $term_ids_in_order); } $field_name = sprintf('%s_colors', Kanban_Utils::format_key('task', 'status')); $settings = get_option('kanban_task_status_colors'); if (empty($settings)) { // add status colors $colors = array('backlog' => '#8224e3', 'ready' => '#eeee22', 'in-progress' => '#81d742', 'qa' => '#dd9933', 'done' => '#1e73be', 'archive' => '#545454'); // get status tax $taxonomies = array(Kanban_Utils::format_key('task', 'status')); $args = array('orderby' => 'term_id', 'order' => 'ASC', 'hide_empty' => false, 'childless' => false); $terms = get_terms($taxonomies, $args); // build array of status id => color $option = array(); foreach ($terms as $term) { if (!isset($colors[$term->slug])) { continue; } $option[$term->term_id] = $colors[$term->slug]; } // save it update_option($field_name, $option); } // save colors // check for existing tasks $args = array('post_type' => Kanban_Post_Types::format_post_type('task')); $posts_array = get_posts($args); // if no tasks, add a sample if (empty($posts_array)) { // add an example task $post = array('post_status' => 'publish', 'post_type' => Kanban_Post_Types::format_post_type('task'), 'post_author' => $current_user_id); $post_id = wp_insert_post($post); } // save that the plugin has been installed update_option(sprintf('_%s_is_installed_before', Kanban::$instance->settings->basename), TRUE); } // $is_installed_before flush_rewrite_rules(); // redirect to welcome page // @link http://premium.wpmudev.org/blog/tabbed-interface/ set_transient(sprintf('_%s_welcome_screen_activation_redirect', Kanban::$instance->settings->basename), true, 30); }