static function protect_slug() { // only protect pages with our slug if (strpos($_SERVER['REQUEST_URI'], sprintf('/%s', Kanban::$slug)) === FALSE) { return; } // admins can see anything // if ( current_user_can('manage_options') ) return; // get my id, and allowed id's $current_user_id = get_current_user_id(); $users_field_name = sprintf('%s_user', Kanban::$instance->settings->basename); $allowed_user_ids = Kanban_Settings::get_option($users_field_name, 'allowed_users', array()); // return if I'm allowed if (in_array($current_user_id, array_keys($allowed_user_ids))) { // redirect away from login if (strpos($_SERVER['REQUEST_URI'], sprintf('/%s/login', Kanban::$slug)) !== FALSE) { wp_redirect(sprintf('/%s/board', Kanban::$slug)); exit; } else { return; } } // allow for addition checks do_action(sprintf('%s_protect_slug', Kanban::$instance->settings->basename)); // anyone can see login screen if (strpos($_SERVER['REQUEST_URI'], sprintf('/%s/login', Kanban::$slug)) !== FALSE) { return; } // otherwise redirect to login wp_redirect(sprintf('/%s/login', Kanban::$slug)); exit; }
/** * 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 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 get_allowed_users() { if (!isset(Kanban_User::$instance->allowed_users)) { $users_field_name = sprintf('%s_user', Kanban::$instance->settings->basename); $allowed_user_ids = Kanban_Settings::get_option($users_field_name, 'allowed_users', array()); if (empty($allowed_user_ids)) { $allowed_user_ids = array(0); } $pm_users = get_users(array('include' => $allowed_user_ids)); Kanban_User::$instance->allowed_users = Kanban_Utils::build_array_with_id_keys($pm_users); foreach (Kanban_User::$instance->allowed_users as $user_id => $user) { if (self::validate_gravatar($user->data->user_email)) { Kanban_User::$instance->allowed_users[$user_id]->data->avatar = get_avatar($user->data->user_email); } Kanban_User::$instance->allowed_users[$user_id]->data->long_name_email = Kanban_User::format_user_name($user); Kanban_User::$instance->allowed_users[$user_id]->data->short_name = Kanban_User::format_user_name($user, TRUE); Kanban_User::$instance->allowed_users[$user_id]->data->initials = Kanban_User::get_initials($user); } } return apply_filters(sprintf('%s_after_get_allowed_users', Kanban::$instance->settings->basename), Kanban_User::$instance->allowed_users); }
public static function get_instance() { if (!self::$instance) { self::$instance = new self(); } return self::$instance; }
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); }