Ejemplo n.º 1
7
    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 
    }
Ejemplo n.º 2
1
 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));
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 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));
     $user_id_author = isset($_POST['user_id_author']) ? $_POST['user_id_author'] : get_current_user_id();
     if (empty($_POST['user_id_worked'])) {
         $_POST['user_id_worked'] = $user_id_author;
     }
     try {
         $operator = substr($_POST['operator'], 0, 1) == '-' ? '-' : '+';
         $val = sprintf('%s%s', $operator, abs(floatval($_POST['operator'])));
     } catch (Exception $e) {
         wp_send_json_error(array('message' => sprintf('Error saving %s', str_replace('_', ' ', self::$slug))));
     }
     eval(sprintf('$hours = 0%s;', $val));
     $data = array('task_id' => $_POST['task']['id'], 'worked_dt_gmt' => Kanban_Utils::mysql_now_gmt(), 'hours' => $hours, 'status_is' => $_POST['task']['status_id'], 'user_id_author' => $user_id_author, 'user_id_worked' => $_POST['user_id_worked']);
     $is_successful = self::_insert($data);
     do_action(sprintf('%s_after_%s_ajax_save', Kanban::get_instance()->settings->basename, self::$slug));
     if (!empty($_POST['comment'])) {
         do_action(sprintf('%s_before_%s_ajax_comment_save', Kanban::get_instance()->settings->basename, self::$slug));
         Kanban_Comment::add($_POST['comment'], 'system', $_POST['task']['id']);
         do_action(sprintf('%s_after_%s_ajax_comment_save', Kanban::get_instance()->settings->basename, self::$slug));
     }
     if ($is_successful) {
         wp_send_json_success(array('message' => sprintf('%s saved', str_replace('_', ' ', self::$slug))));
     } else {
         wp_send_json_error(array('message' => sprintf('Error saving %s', str_replace('_', ' ', self::$slug))));
     }
 }
Ejemplo n.º 5
0
 static function get_all($sql = NULL)
 {
     $table_name = self::table_name();
     $sql = "SELECT *\n\t\t\t\tFROM `{$table_name}`\n\t\t\t\tORDER BY `position` ASC\n\t\t;";
     $sql = apply_filters('kanban_estimate_get_all_sql', $sql);
     $records = parent::get_all($sql);
     return apply_filters('kanban_estimate_get_all_return', Kanban_Utils::build_array_with_id_keys($records, 'id'));
 }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 static function add($task_id, $status_id_new, $status_id_old = 0, $user_id_author = NULL)
 {
     if (!$user_id_author) {
         $user_id_author = get_current_user_id();
     }
     $data = array('task_id' => $task_id, 'created_dt_gmt' => Kanban_Utils::mysql_now_gmt(), 'status_id_old' => $status_id_old, 'status_id_new' => $status_id_new, 'user_id_author' => $user_id_author);
     $id = self::_insert($data);
 }
Ejemplo n.º 8
0
 static function get_all($sql = NULL)
 {
     $table_name = self::table_name();
     $sql = "SELECT *\n\t\t\t\tFROM `{$table_name}`\n\t\t\t\tORDER BY `position` ASC\n\t\t;";
     $sql = apply_filters(sprintf('%s_sql_%s_get_all', Kanban::get_instance()->settings->basename, self::$table_name), $sql);
     $records = parent::get_all($sql);
     return Kanban_Utils::build_array_with_id_keys($records, 'id');
 }
Ejemplo n.º 9
0
 static function get_all($sql = NULL)
 {
     $table_name = self::table_name();
     $sql = "SELECT *\n\t\t\t\tFROM `{$table_name}`\n\t\t\t\tORDER BY `position` ASC\n\t\t;";
     $sql = apply_filters('kanban_status_get_all_sql', $sql);
     $records = parent::get_all($sql);
     foreach ($records as $key => $record) {
         $records[$key]->title = Kanban_Utils::str_for_frontend($records[$key]->title);
     }
     return apply_filters('kanban_status_get_all_return', Kanban_Utils::build_array_with_id_keys($records, 'id'));
 }
Ejemplo n.º 10
0
 static function get_all($sql = NULL)
 {
     $table_name = self::table_name();
     $tasks_table_name = Kanban_Task::table_name();
     $sql = "SELECT `projects`.*,\n\t\t\t\t(\n\t\t\t\t\tSELECT COUNT(`id`)\n\t\t\t\t\tFROM `{$tasks_table_name}` tasks\n\t\t\t\t\tWHERE `tasks`.`project_id` = `projects`.`id`\n\t\t\t\t\tAND `tasks`.`is_active` = 1\n\t\t\t\t)\n\t\t\t\tAS 'task_count'\n\t\t\t\tFROM `{$table_name}` projects\n\t\t\t\tWHERE `projects`.`is_active` = 1\n\t\t;";
     $sql = apply_filters(sprintf('%s_sql_%s_get_all', Kanban::get_instance()->settings->basename, self::$slug), $sql);
     $records = parent::get_all($sql);
     foreach ($records as $key => $record) {
         $records[$key]->title = Kanban_Utils::str_for_frontend($records[$key]->title);
     }
     return Kanban_Utils::build_array_with_id_keys($records, 'id');
 }
Ejemplo n.º 11
0
 static function ajax_delete()
 {
     if (!isset($_POST[Kanban_Utils::get_nonce()]) || !wp_verify_nonce($_POST[Kanban_Utils::get_nonce()], sprintf('%s-save', Kanban::$instance->settings->basename)) || !isset($_POST[self::$slug]) || !is_user_logged_in()) {
         wp_send_json_error();
     }
     do_action(sprintf('%s_before_%s_ajax_delete', Kanban::$instance->settings->basename, self::$slug));
     $is_successful = Kanban_Post::delete($_POST[self::$slug]);
     do_action(sprintf('%s_after_%s_ajax_delete', Kanban::$instance->settings->basename, self::$slug));
     if ($is_successful) {
         wp_send_json_success(array('message' => sprintf('%s deleted', self::$slug)));
     } else {
         wp_send_json_error(array('message' => sprintf('Error deleting %s', self::$slug)));
     }
 }
Ejemplo n.º 12
0
 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));
 }
Ejemplo n.º 13
0
 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);
 }
 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));
 }
Ejemplo n.º 16
0
} else {
    // is_user_logged_in
    ?>
		<p>
			<?php 
    echo __('Whoops, looks like you haven\'t been granted access yet. Click below to request access.', Kanban::$instance->settings->file);
    ?>
			</p>
		<p class="text-center">
			<button type="submit" class="btn btn-primary btn-lg">
				<?php 
    echo __('Request access', Kanban::$instance->settings->file);
    ?>
			</button>
			<?php 
    wp_nonce_field('request_access', Kanban_Utils::get_nonce());
    ?>
		</p>
<?php 
}
?>
	</form>
</div><!-- jumbotron -->



<?php 
include Kanban_Template::find_template('inc/footer');
?>

Ejemplo n.º 17
0
 static function save_settings()
 {
     if (!isset($_POST[Kanban_Utils::get_nonce()]) || !wp_verify_nonce($_POST[Kanban_Utils::get_nonce()], 'kanban-options') || !is_user_logged_in()) {
         return;
     }
     $statuses = Kanban_Status::get_all();
     $status_ids = array_keys($statuses);
     // any statuses to delete?
     if (isset($_POST['statuses']['saved'])) {
         $deleted_statuses = array_diff($status_ids, array_keys($_POST['statuses']['saved']));
         if (!empty($deleted_statuses)) {
             foreach ($deleted_statuses as $key => $id) {
                 Kanban_Status::delete(array('id' => $id));
             }
         }
     }
     // add new statuses first
     if (isset($_POST['statuses']['new'])) {
         foreach ($_POST['statuses']['new'] as $status) {
             // save it
             $success = Kanban_Status::replace($status);
             if ($success) {
                 $status_id = Kanban_Status::insert_id();
                 // add it to all the statuses to save
                 $_POST['statuses']['saved'][$status_id] = $status;
             }
         }
     }
     // now save all statuses with positions
     if (isset($_POST['statuses']['saved'])) {
         foreach ($_POST['statuses']['saved'] as $status_id => $status) {
             $status['id'] = $status_id;
             Kanban_Status::replace($status);
         }
     }
     $estimates = Kanban_Estimate::get_all();
     $estimate_ids = array_keys($estimates);
     // any estimates to delete?
     if (isset($_POST['estimates']['saved'])) {
         $deleted_estimates = array_diff($estimate_ids, array_keys($_POST['estimates']['saved']));
         if (!empty($deleted_estimates)) {
             foreach ($deleted_estimates as $key => $id) {
                 Kanban_Estimate::delete(array('id' => $id));
             }
         }
     }
     // add new estimates first
     if (isset($_POST['estimates']['new'])) {
         foreach ($_POST['estimates']['new'] as $estimate) {
             // save it
             $success = Kanban_Estimate::replace($estimate);
             if ($success) {
                 $estimate_id = Kanban_Estimate::insert_id();
                 // add it to all the estimates to save
                 $_POST['estimates']['saved'][$estimate_id] = $estimate;
             }
         }
     }
     // now save all estimates with positions
     if (isset($_POST['estimates']['saved'])) {
         foreach ($_POST['estimates']['saved'] as $estimate_id => $estimate) {
             $estimate['id'] = $estimate_id;
             Kanban_Estimate::replace($estimate);
         }
     }
     // get current settings
     $settings = Kanban_Option::get_all_raw();
     $settings = Kanban_Utils::build_array_with_id_keys($settings);
     // save all single settings
     foreach ($_POST['settings'] as $key => $value) {
         if (is_array($value)) {
             $value = serialize($value);
         }
         $data = array('name' => $key, 'value' => $value);
         // see if it's already set
         $id = Kanban_Utils::find_key_of_object_by_property('name', $key, $settings);
         if ($id) {
             $data['id'] = $id;
         }
         Kanban_Option::_replace($data);
     }
     $url = add_query_arg(array('message' => urlencode(__('Settings saved', 'kanban'))), $_POST['_wp_http_referer']);
     wp_redirect($url);
     exit;
 }
Ejemplo n.º 18
0
 static function get_all($sql = NULL)
 {
     $table_name = self::table_name();
     $worked_table_name = Kanban_Task_Hour::table_name();
     $sql = "SELECT tasks.*,\n\t\t\t\tCOALESCE(SUM(worked.hours), 0) 'hour_count'\n\t\t\t\tFROM {$table_name} tasks\n\t\t\t\tLEFT JOIN {$worked_table_name} worked\n\t\t\t\tON tasks.id = worked.task_id\n\t\t\t\tWHERE tasks.is_active = 1\n\t\t\t\tGROUP BY tasks.id\n\t\t;";
     $sql = apply_filters('kanban_task_get_all_sql', $sql);
     $records = parent::get_all($sql);
     foreach ($records as $key => $record) {
         $records[$key]->title = Kanban_Utils::str_for_frontend($records[$key]->title);
         $records[$key]->description = Kanban_Utils::str_for_frontend($records[$key]->description);
     }
     return apply_filters('kanban_task_get_all_return', Kanban_Utils::build_array_with_id_keys($records, 'id'));
 }
Ejemplo n.º 19
0
 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);
 }
Ejemplo n.º 20
0
 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();
 }
Ejemplo n.º 21
0
 /**
  * get the users that are allowed to access the board
  * @return array allowed user objects
  */
 static function get_allowed_users()
 {
     if (!isset(Kanban_User::get_instance()->allowed_users)) {
         // get all settings
         $allowed_users = Kanban_Option::get_option('allowed_users');
         // pull out allowed user id's
         $allowed_user_ids = array();
         if (is_array($allowed_users)) {
             $allowed_user_ids = $allowed_users;
         }
         if (empty($allowed_user_ids)) {
             $allowed_user_ids = array(0);
         }
         // load actual users
         $users = get_users(array('include' => $allowed_user_ids, 'fields' => array('ID', 'user_email')));
         // add users to object
         Kanban_User::get_instance()->allowed_users = Kanban_Utils::build_array_with_id_keys($users, 'ID');
         // load extra data
         foreach (Kanban_User::get_instance()->allowed_users as $user_id => $user) {
             Kanban_User::get_instance()->allowed_users[$user_id]->caps = array('write');
             // get gravatar
             if (self::validate_gravatar($user->user_email)) {
                 Kanban_User::get_instance()->allowed_users[$user_id]->avatar = get_avatar($user->user_email);
             }
             // fancy name formating
             Kanban_User::get_instance()->allowed_users[$user_id]->long_name_email = Kanban_User::get_username_long($user);
             Kanban_User::get_instance()->allowed_users[$user_id]->short_name = Kanban_User::get_username_short($user, TRUE);
             Kanban_User::get_instance()->allowed_users[$user_id]->initials = Kanban_User::get_initials($user);
         }
     }
     return apply_filters(sprintf('%s_after_get_allowed_users', Kanban::get_instance()->settings->basename), Kanban_User::get_instance()->allowed_users);
 }
Ejemplo n.º 22
0
</div><!-- modal -->




<div id="screen-size">
	<div class="visible-xs" data-size="xs"></div>
	<div class="visible-sm" data-size="sm"></div>
	<div class="visible-md" data-size="md"></div>
	<div class="visible-lg" data-size="lg"></div>
</div>



<?php 
wp_nonce_field(sprintf('%s-save', Kanban::$instance->settings->basename), Kanban_Utils::get_nonce());
?>



<script type="text/javascript">
var ajaxurl = '<?php 
echo admin_url('admin-ajax.php');
?>
';

var status_records = <?php 
echo json_encode($wp_query->query_vars['kanban']->board->statuses);
?>
;
var status_colors = <?php 
Ejemplo n.º 23
0
 /**
  * get the users that are allowed to access the board
  * @return array allowed user objects
  */
 static function get_allowed_users()
 {
     if (!isset(Kanban_User::get_instance()->allowed_users)) {
         global $wpdb;
         // get all settings
         $allowed_users = Kanban_Option::get_option('allowed_users');
         // pull out allowed user id's
         $allowed_user_ids = array();
         if (is_array($allowed_users)) {
             $allowed_user_ids = $allowed_users;
         }
         if (empty($allowed_user_ids)) {
             $allowed_user_ids = array(0);
         }
         // load actual users
         // $users = get_users(array(
         // 	'include' => $allowed_user_ids,
         // 	'fields' => array(
         // 		'ID',
         // 		'user_email',
         // 	)
         // ));
         $allowed_user_ids_str = implode(',', $allowed_user_ids);
         $users = $wpdb->get_results("SELECT {$wpdb->users}.ID,\n\t\t\t{$wpdb->users}.user_email,\n\t\t\tfirst_name.meta_value AS 'first_name',\n\t\t\tlast_name.meta_value AS 'last_name'\n\t\t\tFROM {$wpdb->users}\n\t\t\tLEFT JOIN {$wpdb->usermeta} first_name\n\t\t\tON {$wpdb->users}.ID = first_name.user_id\n\t\t\tAND first_name.meta_key = 'first_name'\n\t\t\tLEFT JOIN {$wpdb->usermeta} last_name\n\t\t\tON {$wpdb->users}.ID = last_name.user_id\n\t\t\tAND last_name.meta_key = 'last_name'\n\t\t\tWHERE {$wpdb->users}.ID IN ({$allowed_user_ids_str});");
         // add users to object
         Kanban_User::get_instance()->allowed_users = Kanban_Utils::build_array_with_id_keys($users, 'ID');
         // load extra data
         foreach (Kanban_User::get_instance()->allowed_users as $user_id => $user) {
             Kanban_User::get_instance()->allowed_users[$user_id]->caps = array('write');
             // get gravatar
             if (self::validate_gravatar($user->user_email)) {
                 Kanban_User::get_instance()->allowed_users[$user_id]->avatar = get_avatar($user->user_email);
             }
             // fancy name formating
             Kanban_User::get_instance()->allowed_users[$user_id]->long_name_email = Kanban_User::get_username_long($user);
             Kanban_User::get_instance()->allowed_users[$user_id]->short_name = Kanban_User::get_username_short($user, TRUE);
             Kanban_User::get_instance()->allowed_users[$user_id]->initials = Kanban_User::get_initials($user);
         }
     }
     return apply_filters('kanban_user_get_allowed_users_return', Kanban_User::get_instance()->allowed_users);
 }
 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;
 }
Ejemplo n.º 25
0
			<?php 
submit_button(__('Save your Settings', Kanban::get_text_domain()), 'primary', 'submit');
?>
		</div><!-- tab-estimates -->



		<?php 
echo apply_filters(sprintf('%s_settings_tabs_content', Kanban::get_instance()->settings->basename), '');
?>



		<?php 
wp_nonce_field(sprintf('%s-%s', Kanban::$instance->settings->basename, Kanban_Option::table_name()), Kanban_Utils::get_nonce());
?>

	</form>



</div><!-- wrap -->



<script type="text/html" id="t-status">

<?php 
include sprintf('%s/t-status.php', __DIR__);
?>
Ejemplo n.º 26
0
 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);
 }
Ejemplo n.º 27
0
 static function add_defaults()
 {
     global $wpdb;
     $status_table = Kanban_Status::table_name();
     $sql = "SELECT count(`id`)\n\t\t\t\tFROM `{$status_table}`\n\t\t;";
     $status_count = $wpdb->get_var($sql);
     if ($status_count == 0) {
         $statuses = array('Backlog' => '#8224e3', 'Ready' => '#eeee22', 'In progress' => '#81d742', 'QA' => '#f7a738', 'Done' => '#1e73be', 'Archive' => '#333333');
         $i = 0;
         foreach ($statuses as $status => $color) {
             $data = array('title' => $status, 'color_hex' => $color, 'position' => $i);
             Kanban_Status::replace($data);
             $i++;
         }
     }
     $estimate_table = Kanban_Estimate::table_name();
     $sql = "SELECT count(`id`)\n\t\t\t\tFROM `{$estimate_table}`\n\t\t;";
     $estimate_count = $wpdb->get_var($sql);
     if ($estimate_count == 0) {
         $estimates = array('2' => '2h', '4' => '4h', '8' => '1d', '16' => '2d', '32' => '4d');
         $i = 0;
         foreach ($estimates as $hours => $title) {
             $data = array('title' => $title, 'hours' => $hours, 'position' => $i);
             Kanban_Estimate::replace($data);
             $i++;
         }
     }
     $boards_table = Kanban_Board::table_name();
     $sql = "SELECT count(`id`)\n\t\t\t\tFROM `{$boards_table}`\n\t\t;";
     $boards_count = $wpdb->get_var($sql);
     if ($boards_count == 0) {
         $data = array('title' => 'Your first kanban board', 'created_dt_gmt' => Kanban_Utils::mysql_now_gmt(), 'modified_dt_gmt' => Kanban_Utils::mysql_now_gmt(), 'user_id_author' => get_current_user_id(), 'is_active' => 1);
         Kanban_Board::replace($data);
     }
     $tasks_table = Kanban_Board::table_name();
     $sql = "SELECT count(`id`)\n\t\t\t\tFROM `{$tasks_table}`\n\t\t;";
     $tasks_count = $wpdb->get_var($sql);
     if ($tasks_count == 0) {
         $sql = "SELECT `id`\n\t\t\t\t\tFROM `{$boards_table}`\n\t\t\t\t\tLIMIT 1\n\t\t\t;";
         $board_id = $wpdb->get_var($sql);
         $data = array('title' => 'Your first task', 'board_id' => $board_id, 'created_dt_gmt' => Kanban_Utils::mysql_now_gmt(), 'modified_dt_gmt' => Kanban_Utils::mysql_now_gmt(), 'user_id_author' => get_current_user_id(), 'is_active' => 1);
         Kanban_Board::replace($data);
     }
     $options_table = Kanban_Option::table_name();
     $sql = "SELECT *\n\t\t\t\tFROM `{$options_table}`\n\t\t;";
     $options = $wpdb->get_results($sql);
     $options_arr = array();
     foreach ($options as $option) {
         $options_arr[$option->name] = $option->value;
     }
     $defaults = Kanban_Option::get_defaults();
     foreach ($defaults as $name => $value) {
         if (isset($options_arr[$name])) {
             continue;
         }
         $data = array('name' => $name, 'value' => $value);
         Kanban_Option::replace($data);
     }
 }
Ejemplo n.º 28
0
 /**
  * Apply all postmeta and terms to an array of posts
  * @param  arr $posts array of post objects
  * @return arr        array of posts, with ID's as keys, and all postmeta and terms applied
  */
 static function apply_postmeta_and_terms_to_posts($posts)
 {
     // make sure the first post has a post type
     if (empty($posts[0]->post_type)) {
         return $posts;
     }
     // build array of id's
     $post_id_arr = array();
     foreach ($posts as $post) {
         $post_id_arr[] = $post->ID;
     }
     // get postmeta for all posts
     $postmeta = Kanban_Post::get_postmeta_for_posts($post_id_arr, $posts[0]->post_type);
     // get terms for all posts
     $terms = Kanban_Terms::get_terms_for_posts($post_id_arr, $posts[0]->post_type);
     // apply post meta and terms to projects
     foreach ($posts as $post) {
         if (isset($postmeta[$post->ID])) {
             $post->postmeta = $postmeta[$post->ID];
         }
         if (isset($terms[$post->ID])) {
             $post->terms = $terms[$post->ID];
         }
     }
     // put get array with post id's as keys
     return Kanban_Utils::build_array_with_id_keys($posts);
 }
Ejemplo n.º 29
0
			<?php 
submit_button(__('Save your Settings', 'kanban'), 'primary', 'submit');
?>
		</div><!-- tab-estimates -->



		<?php 
echo apply_filters('kanban_settings_tabs_content', '');
?>



		<?php 
wp_nonce_field('kanban-options', Kanban_Utils::get_nonce());
?>

	</form>



</div><!-- wrap -->



<script type="text/html" id="t-status">

<?php 
include sprintf('%s/t-status.php', __DIR__);
?>
Ejemplo n.º 30
0
</div><!-- modal -->




<div id="screen-size">
	<div class="visible-xs" data-size="xs"></div>
	<div class="visible-sm" data-size="sm"></div>
	<div class="visible-md" data-size="md"></div>
	<div class="visible-lg" data-size="lg"></div>
</div>



<?php 
wp_nonce_field('kanban-save', Kanban_Utils::get_nonce());
?>



<script type="text/javascript">
var ajaxurl = '<?php 
echo admin_url('admin-ajax.php');
?>
';

var alert = "<?php 
echo addslashes($wp_query->query_vars['kanban']->board->alert);
?>
";