/**
  * Loops through to-do items
  * Passes a completed value, limit value and a category id
  * @param int $status
  * @param int $cat_id
  * @param $limit
  */
 public function loop_through_todos($status = 0, $cat_id = 0, $limit = 100)
 {
     global $userdata, $current_user;
     get_currentuserinfo();
     $limit = isset(CTDL_Loader::$dashboard_settings['dashboard_number']) ? CTDL_Loader::$dashboard_settings['dashboard_number'] : $limit;
     $limit = $limit == '-1' ? 1000 : $limit;
     $user = CTDL_Lib::check_permission('todo', 'view') ? $current_user->ID : $userdata->ID;
     if (CTDL_Loader::$settings['categories'] == 1 && CTDL_Loader::$settings['sort_order'] == 'cat_id' && $cat_id == 0) {
         $categories = CTDL_Categories::get_categories();
         $items = 0;
         $posts_to_exclude = array();
         foreach ($categories as $category) {
             $todo_items = CTDL_Lib::get_todos($user, $limit, $status, $category->term_id);
             if ($todo_items->have_posts()) {
                 array_splice($posts_to_exclude, count($posts_to_exclude), 0, $this->show_todo_list_items($todo_items, $status, $category->term_id));
                 $items = 1;
             }
         }
         $todo_items = CTDL_Lib::get_todos($user, 0, $status, 0, $posts_to_exclude);
         if ($todo_items->have_posts()) {
             $this->show_todo_list_items($todo_items, $status);
             $items = 1;
         }
         if ($items == 0 && $status == 0) {
             echo '<p>' . apply_filters('ctdl_no_items', esc_html__('No items to do.', 'cleverness-to-do-list')) . '</p>';
         }
     } else {
         $todo_items = CTDL_Lib::get_todos($user, $limit, $status, $cat_id);
         if ($todo_items->have_posts()) {
             $this->show_todo_list_items($todo_items, $status);
         } elseif ($status == 0) {
             echo '<p>' . apply_filters('ctdl_no_items', esc_html__('No items to do.', 'cleverness-to-do-list')) . '</p>';
         }
     }
 }
 /**
  * Creates the widget
  * @param $args
  * @param $instance
  *
  */
 function widget($args, $instance)
 {
     global $ClevernessToDoList, $CTDL_widget_settings;
     $CTDL_widget_settings = $instance;
     get_currentuserinfo();
     $title = apply_filters('widget_title', $instance['title']);
     $limit = $instance['number'] == '-1' ? 1000 : $instance['number'];
     $assigned_to = $instance['assigned_to'];
     $deadline = $instance['deadline'];
     $progress = $instance['progress'];
     $category = CTDL_Loader::$settings['categories'] == 1 ? $instance['category'] : 0;
     $individual = isset($instance['individual']) ? $instance['individual'] : 0;
     if ($individual == 1 && is_user_logged_in()) {
         global $current_user, $userdata;
         if (CTDL_Loader::$settings['list_view'] == '2') {
             $user = $current_user->ID;
         } else {
             $user = $userdata->ID;
         }
     } else {
         $user = 0;
     }
     echo $args['before_widget'];
     if ($title) {
         echo $args['before_title'];
         echo $title;
         echo $args['after_title'];
     }
     $ClevernessToDoList->list = '';
     $visible = 0;
     if (CTDL_Loader::$settings['categories'] == 1 && CTDL_Loader::$settings['sort_order'] == 'cat_id' && $category == 0) {
         $categories = CTDL_Categories::get_categories();
         $items = 0;
         $posts_to_exclude = array();
         $visibility = get_option('CTDL_categories');
         foreach ($categories as $category) {
             echo '<ol>';
             $category_id = $category->term_id;
             $visible = $visibility["category_{$category->term_id}"];
             $todo_items = CTDL_Lib::get_todos($user, $limit, 0, $category_id);
             if ($todo_items->have_posts()) {
                 array_splice($posts_to_exclude, count($posts_to_exclude), 0, $this->show_todo_list_items($todo_items, $progress, $deadline, $assigned_to, 0, $visible));
                 $items = 1;
             }
             echo '</ol>';
         }
         $todo_items = CTDL_Lib::get_todos($user, $limit, 0, 0, $posts_to_exclude);
         if ($todo_items->have_posts()) {
             echo '<ol>';
             $this->show_todo_list_items($todo_items, $progress, $deadline, $assigned_to, 0, $visible);
             echo '</ol>';
             $items = 1;
         }
         if ($items == 0) {
             echo '<p>' . apply_filters('ctdl_no_items', esc_html__('No items to do.', 'cleverness-to-do-list')) . '</p>';
         }
     } else {
         echo '<ol>';
         $todo_items = CTDL_Lib::get_todos($user, $limit, 0, $category);
         if ($todo_items->have_posts()) {
             $this->show_todo_list_items($todo_items, $progress, $deadline, $assigned_to, $category, $visible);
         } else {
             echo '<p>' . apply_filters('ctdl_no_items', esc_html__('No items to do.', 'cleverness-to-do-list')) . '</p>';
         }
     }
     echo '</ol>';
     echo $args['after_widget'];
 }
 /**
  * Loop through to-do items
  *
  * @param int $completed
  * @param int $cat_id
  * @param int $limit
  */
 protected function loop_through_todos($completed = 0, $cat_id = 0, $limit = 5000)
 {
     global $current_user, $userdata;
     $user = CTDL_Lib::get_user_id($current_user, $userdata);
     // if categories are enabled and sort order is set to cat id and we're not getting todos for a specific category
     if (CTDL_Loader::$settings['categories'] == 1 && CTDL_Loader::$settings['sort_order'] == 'cat_id' && $cat_id == 0) {
         $categories = CTDL_Categories::get_categories();
         $items = 0;
         $visible = 0;
         $headings = 0;
         $posts_to_exclude = array();
         $visibility = get_option('CTDL_categories');
         foreach ($categories as $category) {
             $visible = $visibility["category_{$category->term_id}"];
             $todo_items = CTDL_Lib::get_todos($user, 5000, $completed, $category->term_id);
             if ($todo_items->have_posts()) {
                 if ($headings == 0) {
                     $headings = $this->show_table_headings($completed);
                 }
                 array_splice($posts_to_exclude, count($posts_to_exclude), 0, $this->show_todo_list_items($todo_items, $completed, $visible));
                 $items = 1;
             }
         }
         $todo_items = CTDL_Lib::get_todos($user, 5000, $completed, 0, $posts_to_exclude);
         if ($todo_items->have_posts()) {
             if ($headings == 0) {
                 $this->show_table_headings($completed);
             }
             $this->show_todo_list_items($todo_items, $completed);
             $items = 1;
         }
         if ($items == 0) {
             if ($completed == 0) {
                 $this->list .= '<tr><td>' . apply_filters('ctdl_no_items', esc_html__('No items to do.', 'cleverness-to-do-list')) . '</td></tr>';
             } else {
                 $this->list .= '<tr><td>' . apply_filters('ctdl_no_completed_items', esc_html__('No completed items.', 'cleverness-to-do-list')) . '</td></tr>';
             }
         }
     } else {
         $todo_items = CTDL_Lib::get_todos($user, 5000, $completed, $cat_id);
         if ($todo_items->have_posts()) {
             $this->show_table_headings($completed);
             $this->show_todo_list_items($todo_items, $completed);
         } else {
             if ($completed == 0) {
                 $this->list .= '<tr><td>' . apply_filters('ctdl_no_items', esc_html__('No items to do.', 'cleverness-to-do-list')) . '</td></tr>';
             } else {
                 $this->list .= '<tr><td>' . apply_filters('ctdl_no_completed_items', esc_html__('No completed items.', 'cleverness-to-do-list')) . '</td></tr>';
             }
         }
     }
 }
    /**
     * Create the category management page
     * @static
     */
    public static function create_category_page()
    {
        $cleverness_todo_message = '';
        $cleverness_todo_action = '';
        if (isset($_GET['cleverness_todo_action'])) {
            $cleverness_todo_action = $_GET['cleverness_todo_action'];
        }
        if (isset($_POST['cleverness_todo_action'])) {
            $cleverness_todo_action = $_POST['cleverness_todo_action'];
        }
        switch ($cleverness_todo_action) {
            case 'addtodocat':
                if ($_POST['cleverness_todo_cat_name'] != '') {
                    if (!wp_verify_nonce($_POST['_todo_add_cat_nonce'], 'todoaddcat')) {
                        die(esc_html__('Security check failed', 'cleverness-to-do-list'));
                    }
                    $status = CTDL_Categories::insert_category();
                    if ($status != 1) {
                        $cleverness_todo_message = esc_html__('There was a problem performing that action.', 'cleverness-to-do-list');
                    }
                } else {
                    $cleverness_todo_message = esc_html__('Category name cannot be blank.', 'cleverness-to-do-list');
                }
                break;
            default:
                break;
        }
        // end switch
        ?>

	<div class="wrap">
		<div class="icon32"><img src="<?php 
        echo CTDL_PLUGIN_URL;
        ?>
/images/cleverness-todo-icon.png" alt="" /></div>
		<h2><?php 
        echo apply_filters('ctdl_categories_title', esc_html__('To-Do List Categories', 'cleverness-to-do-list'));
        ?>
</h2>

		<?php 
        if ($cleverness_todo_message != '') {
            echo '<div id="message" class="error below-h2"><p>' . $cleverness_todo_message . '</p></div>';
        } else {
            echo '<div id="message"></div>';
        }
        ?>

		<h3><?php 
        echo apply_filters('ctdl_add_category', esc_html__('Add New Category', 'cleverness-to-do-list'));
        ?>
</h3>

		<form name="addtodocat" id="addtodocat" action="" method="post">
			<table class="form-table">
				<tr>
					<th scope="row"><label for="cleverness_todo_cat_name"><?php 
        echo apply_filters('ctdl_category_name', esc_html__('Category Name', 'cleverness-to-do-list'));
        ?>
</label></th>
					<td><input type="text" name="cleverness_todo_cat_name" id="cleverness_todo_cat_name" class="regular-text" value="" /></td>
				</tr>
				<tr>
					<th scope="row"><label for="cleverness_todo_cat_visibility"><?php 
        esc_html_e('Visibility', 'cleverness-to-do-list');
        ?>
</label></th>
					<td>
						<select name="cleverness_todo_cat_visibility" id="cleverness_todo_cat_visibility">
							<option value="0" selected="selected"><?php 
        esc_attr_e('Public', 'cleverness-to-do-list');
        ?>
&nbsp;</option>
							<option value="1"><?php 
        esc_attr_e('Private', 'cleverness-to-do-list');
        ?>
</option>
						</select>
						<br /><span class="description"><?php 
        echo apply_filters('ctdl_category_visibility', esc_html__('Private categories are not visible using the sidebar widgets or shortcode (only when Sort Order is set to Category)', 'cleverness-to-do-list'));
        ?>
</span>
					</td>
				</tr>
				<tr><td></td>
					<td>
						<?php 
        wp_nonce_field('todoaddcat', '_todo_add_cat_nonce');
        ?>
						<input type="hidden" name="cleverness_todo_action" value="addtodocat" />
						<input type="submit" name="button" id="add-todo-category" class="button-primary" value="<?php 
        echo apply_filters('ctdl_add_category', esc_attr__('Submit', 'cleverness-to-do-list'));
        ?>
" />
					</td>
				</tr>
			</table>
		</form>

		<h3><?php 
        echo apply_filters('ctdl_existing_categories', esc_html__('Existing Categories', 'cleverness-to-do-list'));
        ?>
</h3>
		<table id="todo-cats" class="widefat">
			<thead>
			<tr>
				<th id="id-col"><?php 
        esc_html_e('ID', 'cleverness-to-do-list');
        ?>
</th>
				<th class="row-title"><?php 
        esc_html_e('Name', 'cleverness-to-do-list');
        ?>
</th>
				<th id="vis-col"><?php 
        esc_html_e('Visibility', 'cleverness-to-do-list');
        ?>
</th>
				<th id="action-col"><?php 
        esc_html_e('Action', 'cleverness-to-do-list');
        ?>
</th>
			</tr>
			</thead>
			<tbody>
				<?php 
        $categories = CTDL_Categories::get_categories();
        if ($categories) {
            foreach ($categories as $category) {
                $category_id = $category->term_id;
                $visibility = get_option('CTDL_categories');
                $visibility = $visibility["category_{$category_id}"] != '' ? $visibility["category_{$category_id}"] : '0';
                ?>
						<tr id="<?php 
                echo $category_id;
                ?>
">
							<td><?php 
                echo $category_id;
                ?>
</td>
							<td class="row-title"><?php 
                echo esc_attr($category->name);
                ?>
</td>
							<td><?php 
                if ($visibility == '0') {
                    echo esc_html__('Public', 'cleverness-to-do-list');
                } else {
                    if ($visibility == '1') {
                        echo esc_html__('Private', 'cleverness-to-do-list');
                    }
                }
                ?>
</td>
							<td>
								<input class="edit-todo-category button-secondary" type="button" value="<?php 
                esc_attr_e('Edit', 'cleverness-to-do-list');
                ?>
" />
								<input class="delete-todo-category button-secondary" type="button" value="<?php 
                esc_attr_e('Delete', 'cleverness-to-do-list');
                ?>
" />
							</td>
						</tr>
				<?php 
            }
        }
        ?>
			</tbody>
			<tfoot>
			<tr>
				<th class="row-title"><?php 
        esc_html_e('ID', 'cleverness-to-do-list');
        ?>
</th>
				<th><?php 
        esc_html_e(' Name', 'cleverness-to-do-list');
        ?>
</th>
				<th><?php 
        esc_html_e('Visibility', 'cleverness-to-do-list');
        ?>
</th>
				<th><?php 
        esc_html_e('Action', 'cleverness-to-do-list');
        ?>
</th>
			</tr>
			</tfoot>
		</table>

	</div>
	<?php 
    }