PluginProbe
Taskbuilder – Project Management & Task Management Tool With Kanban Board / 6.0.6
Taskbuilder – Project Management & Task Management Tool With Kanban Board v6.0.6
6.0.6 6.0.5 6.0.2 6.0.3 6.0.4 6.0.1 6.0.0 5.0.8 5.0.9 4.0.9 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 All 58 releases
← All changes | asset/js/admin.js +735 -69 5.0.66.0.6 View file →
@@ -1,4 +1,32 @@
1 +function getMentionDropdown(editor) {
2 + let body = jQuery(editor.getBody());
3 + let dropdown = body.find('#wppm_mention_list');
4 +
5 + if (!dropdown.length) {
6 + dropdown = jQuery('<div id="wppm_mention_list"></div>');
7 + body.append(dropdown);
8 + }
9 + if (!editor.mentionDropdown) {
10 + return editor.mentionDropdown;
11 + }else{
12 + return dropdown;
13 + }
14 +}
15 +
16 +function updateActiveItem(items,mentionIndex) {
17 + items.removeClass('active').css({
18 + background: '#fff',
19 + color: '#333'
20 + });
21 + items.eq(mentionIndex)
22 + .addClass('active')
23 + .css({
24 + background: '#0073aa',
25 + color: '#fff'
26 + });
27 +}
28 +
1 29 function wppm_add_new_project(){
2 30 jQuery('#wppm_project_container').show();
3 31 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
4 32 var data = {
@@ -185,8 +213,10 @@
185 213 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
186 214 var dataform=new FormData(jQuery('#wppm_project_list_frm')[0]);
187 215 dataform.append("page_no", page_no);
188 216 dataform.append("action", 'wppm_get_project_list');
217 + dataform.append("page", wppm_admin.page);
218 + dataform.append("wppm_project_filter", wppm_project_filter);
189 219 jQuery.ajax( {
190 220 url: wppm_admin.ajax_url,
191 221 type: 'POST',
192 222 data: dataform,
@@ -218,9 +248,10 @@
218 248 var data = {
219 249 action: 'wppm_get_task_list',
220 250 page_no:page_no,
221 251 page:wppm_admin.page,
222 - project_id:id
252 + project_id:id,
253 + wppm_task_filter:wppm_task_filter
223 254 };
224 255 jQuery.post(wppm_admin.ajax_url, data, function(response) {
225 256 jQuery('#wppm_task_container').html(response);
226 257 });
@@ -348,8 +379,16 @@
348 379 function wppm_open_dashboard_task(id){
349 380 window.location.href = 'admin.php?page=wppm-tasks&task_id=' + id;
350 381 }
351 382
383 +function wppm_open_subtask(id,proj_id){
384 + if((proj_id!=0)&&(proj_id!="")){
385 + wppm_open_project_tasks(id,proj_id);
386 + }else{
387 + wppm_open_task(id);
388 + }
389 +}
390 +
352 391 function wppm_open_project_tasks(id,proj_id){
353 392 wppm_modal_open('Open Tasks');
354 393 jQuery('#wppm_task_container').show();
355 394 jQuery('#wppm_task_container').html(wppm_admin.loading_html);
@@ -472,8 +511,101 @@
472 511 wppm_open_task(task_id);
473 512 });
474 513 }
475 514
515 +function wppm_show_add_subtask(){
516 + jQuery('#wppm_add_subtask_label_container').show();
517 + jQuery('#wppm_subtask_label').val('').focus();
518 +}
519 +
520 +function wppm_hide_add_subtask(){
521 + jQuery('#wppm_add_subtask_label_container').hide();
522 + jQuery('#wppm_subtask_label').val('');
523 +}
524 +
525 +function wppm_remove_subtask_user(e){
526 + jQuery(e).closest('li').remove();
527 +}
528 +
529 +function wppm_add_new_subtask(task_id,proj_id){
530 + if(jQuery('#wppm_subtask_label').val()==''){
531 + jQuery('#wppm_subtask_label').focus();
532 + return false;
533 + }
534 + var user_ids = [];
535 + jQuery('.wppm_subtask_filter_display_users_container input[name="wppm_subtask_user_names[]"]').each(function(){
536 + user_ids.push(jQuery(this).val());
537 + });
538 + var data = {
539 + action: 'wppm_add_new_subtask',
540 + task_id: task_id,
541 + label: jQuery('#wppm_subtask_label').val(),
542 + wppm_subtask_status: jQuery('#wppm_subtask_status').val(),
543 + wppm_subtask_due_date: jQuery('#wppm_subtask_due_date').val(),
544 + wppm_subtask_description: jQuery('#wppm_subtask_description').val(),
545 + wppm_subtask_user_names: user_ids,
546 + _ajax_nonce: jQuery('#wppm_add_new_subtask_ajax_nonce').val()
547 + };
548 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
549 + if((proj_id!=0)&&(proj_id!="")){
550 + wppm_open_project_tasks(task_id,proj_id);
551 + }else{
552 + wppm_open_task(task_id);
553 + }
554 + });
555 +}
556 +
557 +function wppm_delete_subtask(subtask_id,task_id,proj_id){
558 + const flag = confirm(wppm_admin.confirm);
559 + if (!flag) return;
560 + var data = {
561 + action: 'wppm_remove_subtask',
562 + subtask_id: subtask_id,
563 + _ajax_nonce: jQuery('#wppm_remove_subtask_ajax_nonce').val()
564 + };
565 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
566 + if((proj_id!=0)&&(proj_id!="")){
567 + wppm_open_project_tasks(task_id,proj_id);
568 + }else{
569 + wppm_open_task(task_id);
570 + }
571 + });
572 +}
573 +
574 +function wppm_convert_subtask_to_task(subtask_id,reload_task_id,proj_id){
575 + const flag = confirm(wppm_admin.confirm);
576 + if (!flag) return;
577 + var data = {
578 + action: 'wppm_convert_subtask_to_task',
579 + subtask_id: subtask_id,
580 + _ajax_nonce: jQuery('#wppm_convert_subtask_to_task_ajax_nonce').val()
581 + };
582 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
583 + if((proj_id!=0)&&(proj_id!="")){
584 + wppm_open_project_tasks(reload_task_id,proj_id);
585 + }else{
586 + wppm_open_task(reload_task_id);
587 + }
588 + });
589 +}
590 +
591 +function wppm_toggle_subtask_status(subtask_id,task_id,proj_id,default_status_id,is_checked){
592 + var status_id = is_checked ? 4 : default_status_id;
593 + var data = {
594 + action: 'wppm_set_change_task_status',
595 + task_id: subtask_id,
596 + wppm_status: status_id,
597 + _ajax_nonce: jQuery('#wppm_subtask_status_ajax_nonce').val()
598 + };
599 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
600 + if((proj_id!=0)&&(proj_id!="")){
601 + wppm_open_project_tasks(task_id,proj_id);
602 + }else{
603 + wppm_open_task(task_id);
604 + }
605 + });
606 +}
607 +
476 608 function wppm_open_individual_task(id){
477 609 jQuery('#wppm_project_container').show();
478 610 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
479 611 var data = {
@@ -492,8 +624,9 @@
492 624 jQuery('#wppm_task_container').html(wppm_admin.loading_html);
493 625 var data = {
494 626 action: 'wppm_get_task_list_card_view',
495 627 task_search: task_search,
628 + wppm_task_filter: wppm_task_filter,
496 629 page:page,
497 630 id:id
498 631 };
499 632 jQuery.post(wppm_admin.ajax_url, data, function(response) {
@@ -711,32 +844,37 @@
711 844 }
712 845 });
713 846 }
714 847
715 -function wppm_set_change_task_details(task_id,proj_id,project_id){
716 - var dataform = new FormData(jQuery('#frm_get_edit_task_deatils')[0]);
717 - var description = tinyMCE.get('wppm_edit_task_description').getContent().trim();
718 - dataform.append('wppm_edit_task_description', description);
719 - if(proj_id==0){
720 - wppm_task_modal_close();
721 - }else{
722 - wppm_modal_close();
723 - }
724 - jQuery('#wppm_task_container').html(wppm_admin.loading_html);
725 - jQuery.ajax({
726 - url: wppm_admin.ajax_url,
727 - type: 'POST',
728 - data: dataform,
729 - processData: false,
730 - contentType: false
731 - })
732 - .done(function (response_str) {
733 - if((proj_id!=0)||(proj_id!="")){
734 - wppm_open_project_tasks(task_id,proj_id);
735 - }else if((proj_id==0)||(proj_id=="")){
736 - wppm_open_task(task_id,project_id);
848 +function wppm_set_change_task_details(task_id, proj_id, project_id) {
849 + var dataform = new FormData(jQuery('#frm_get_edit_task_deatils')[0]);
850 + var editor = tinyMCE.get('wppm_edit_task_description');
851 + var description = '';
852 + if (editor) {
853 + description = editor.getContent().trim();
854 + } else {
855 + description = jQuery('#wppm_edit_task_description').val().trim();
737 856 }
738 - });
857 + dataform.append('wppm_edit_task_description', description);
858 + if (proj_id == 0) {
859 + wppm_task_modal_close();
860 + } else {
861 + wppm_modal_close();
862 + }
863 + jQuery('#wppm_task_container').html(wppm_admin.loading_html);
864 + jQuery.ajax({
865 + url: wppm_admin.ajax_url,
866 + type: 'POST',
867 + data: dataform,
868 + processData: false,
869 + contentType: false
870 + }).done(function(response_str) {
871 + if (proj_id != 0 && proj_id != "") {
872 + wppm_open_project_tasks(task_id, proj_id);
873 + } else {
874 + wppm_open_task(task_id, project_id);
875 + }
876 + });
739 877 }
740 878
741 879 function wppm_edit_thread(comment_id,task_id,proj_id){
742 880 if(proj_id==0){
@@ -1210,20 +1348,49 @@
1210 1348 jQuery('#wppm_popup_body').html(response_str);
1211 1349 });
1212 1350 }
1213 1351
1214 -function wppm_load_prev_page(prev_page_no,page_no,sort_by, order){
1215 - if(prev_page_no!=0){
1216 - page_no=prev_page_no-1;
1217 - wppm_get_project_list(page_no,sort_by,order);
1218 - }
1352 +function wppm_load_prev_page(prev_page_no, page_no, sort_by, order, is_archieved) {
1353 + if (prev_page_no != 0) {
1354 + page_no = prev_page_no - 1;
1355 + if (parseInt(is_archieved) === 1) {
1356 + wppm_get_archieve_project_list(
1357 + page_no,
1358 + sort_by,
1359 + order,
1360 + 1
1361 + );
1362 + } else {
1363 + wppm_get_project_list(
1364 + page_no,
1365 + sort_by,
1366 + order
1367 + );
1368 + }
1369 + }
1370 + return false;
1219 1371 }
1220 1372
1221 -function wppm_load_next_page(next_page_no,page_no,sort_by,order){
1222 - if(next_page_no!=page_no){
1223 - page_no = next_page_no;
1224 - wppm_get_project_list(page_no,sort_by,order);
1225 - }
1373 +function wppm_load_next_page(next_page_no, page_no, sort_by, order, is_archieved) {
1374 + if (next_page_no != page_no) {
1375 + page_no = next_page_no;
1376 + if (parseInt(is_archieved) === 1) {
1377 + wppm_get_archieve_project_list(
1378 + page_no,
1379 + sort_by,
1380 + order,
1381 + 1
1382 + );
1383 + } else {
1384 + wppm_get_project_list(
1385 + page_no,
1386 + sort_by,
1387 + order
1388 + );
1389 + }
1390 + }
1391 +
1392 + return false;
1226 1393 }
1227 1394
1228 1395 function wppm_load_prev_task_page(prev_page_no,page_no, sort_by, order){
1229 1396 if(prev_page_no!=0){
@@ -1302,15 +1469,17 @@
1302 1469 jQuery('#wppm_project_container').html(response);
1303 1470 });
1304 1471 }
1305 1472
1306 -function wppm_project_search_filter(){
1473 +function wppm_project_search_filter(is_archieved){
1307 1474 var project_search = jQuery("#wppm_project_search_filter").val();
1308 1475 jQuery('#wppm_project_container').show();
1309 1476 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
1310 1477 var data = {
1311 1478 action: 'wppm_get_project_list',
1312 - project_search:project_search
1479 + project_search:project_search,
1480 + page: wppm_admin.page,
1481 + is_archieved:is_archieved
1313 1482 };
1314 1483 jQuery.post(wppm_admin.ajax_url, data, function(response) {
1315 1484 jQuery('#wppm_project_container').html(response);
1316 1485 });
@@ -1386,9 +1555,10 @@
1386 1555 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
1387 1556 var data = {
1388 1557 action: 'wppm_get_project_list',
1389 1558 sort_by:sort_by,
1390 - order:order
1559 + order:order,
1560 + page: wppm_admin.page
1391 1561 };
1392 1562 jQuery.post(wppm_admin.ajax_url, data, function(response) {
1393 1563 jQuery('#wppm_project_container').html(response);
1394 1564 });
@@ -1818,14 +1988,16 @@
1818 1988 jQuery.post(wppm_admin.ajax_url, data, function() {
1819 1989 });
1820 1990 }
1821 1991
1822 -function wppm_apply_project_filter(){
1992 +function wppm_apply_project_filter(is_archieved){
1823 1993 wppm_project_filter = jQuery('#wppm_project_filter').find(":selected").val();
1824 1994 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
1825 1995 var data = {
1826 1996 action: 'wppm_get_project_list',
1827 - wppm_project_filter:wppm_project_filter
1997 + wppm_project_filter:wppm_project_filter,
1998 + page:wppm_admin.page,
1999 + is_archieved:is_archieved
1828 2000 };
1829 2001 jQuery.post(wppm_admin.ajax_url, data, function(response) {
1830 2002 jQuery('#wppm_project_container').html(response);
1831 2003 });
@@ -1830,22 +2002,70 @@
1830 2002 jQuery('#wppm_project_container').html(response);
1831 2003 });
1832 2004 }
1833 2005
1834 -function wppm_apply_task_filter(page){
1835 - wppm_task_filter = jQuery('#wppm_task_filter').find(":selected").val();
2006 +function getWppmCookie(name) {
2007 + const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
2008 + if (match) return decodeURIComponent(match[2]);
2009 + return null;
2010 +}
2011 +
2012 +function wppm_apply_task_filter(page = 1, listFilters = null) {
2013 + // 🔥 use passed filters OR read from UI
2014 + if (!listFilters) {
2015 + listFilters = {
2016 + created_by: jQuery("#tb-created-by").val() || [],
2017 + assigned: jQuery("#tb-assigned").val() || [],
2018 + priority: jQuery("#tb-priority").val() || [],
2019 + start_date: jQuery("#tb-start-date").val() || "",
2020 + end_date: jQuery("#tb-end-date").val() || ""
2021 + };
2022 + }
2023 + // 🔥 get main filter
2024 + let wppm_task_filter = jQuery('#wppm_task_filter').val();
1836 2025 jQuery('#wppm_task_container').html(wppm_admin.loading_html);
1837 - var data = {
2026 + jQuery.post(wppm_admin.ajax_url, {
1838 2027 action: 'wppm_get_task_list',
1839 - wppm_task_filter:wppm_task_filter,
1840 - page:page
1841 - };
1842 - jQuery.post(wppm_admin.ajax_url, data, function(response) {
2028 + wppm_task_filter: wppm_task_filter,
2029 + page: wppm_admin.page,
2030 + page_no: page - 1,
2031 + listFilters: JSON.stringify(listFilters) // ✅ ALWAYS stringify
2032 + }, function (response) {
1843 2033 jQuery('#wppm_task_container').html(response);
1844 - });
2034 + // 🔥 save cookie
2035 + setListFilterCookie(listFilters);
2036 + // 🔥 sync UI
2037 + setTimeout(function () {
2038 + syncUIWithFilters(listFilters);
2039 + renderActiveFilters(listFilters);
2040 + }, 100);
2041 +
2042 + });
1845 2043 }
1846 2044
1847 2045 function wppm_tl_reset_filter(page){
2046 + var url = new URL(window.location.href);
2047 + if (url.searchParams.has('wppm_task_filter')) {
2048 + url.searchParams.delete('wppm_task_filter');
2049 + window.location.href = url.toString();
2050 + return false;
2051 + }
2052 + // ✅ close popup
2053 + jQuery("#tb-advanced-panel").removeClass("tb-open");
2054 + jQuery("#tb-backdrop").removeClass("active");
2055 +
2056 + // ✅ clear inputs
2057 + jQuery('#tb-advanced-panel input').val('');
2058 + jQuery('#tb-advanced-panel select').val([]);
2059 +
2060 + // ✅ clear chips
2061 + jQuery("#tb-active-filters").html('');
2062 +
2063 + // ✅ clear advanced filters + cookie BEFORE requesting the list, otherwise
2064 + // this request still sends the stale tb_list_filters cookie and the
2065 + // reset only takes effect on the next click
2066 + resetFilters('list');
2067 +
1848 2068 jQuery('#wppm_task_container').html(wppm_admin.loading_html);
1849 2069 var data = {
1850 2070 action: 'wppm_get_task_list',
1851 2071 wppm_task_filter:'all',
@@ -1856,27 +2076,73 @@
1856 2076 page:page
1857 2077 };
1858 2078 jQuery.post(wppm_admin.ajax_url, data, function(response) {
1859 2079 jQuery('#wppm_task_container').html(response);
1860 - });
2080 + });
1861 2081 }
1862 2082
1863 -function wppm_apply_task_filter_grid_view(page,id){
2083 +function wppm_apply_task_filter_grid_view(page,id,filters){
1864 2084 wppm_task_filter = jQuery('#wppm_task_filter').find(":selected").val();
1865 - jQuery('#wppm_task_container').html(wppm_admin.loading_html);
2085 + if (!filters) {
2086 + filters = {
2087 + created_by: jQuery("#tb-created-by").val() || [],
2088 + assigned: jQuery("#tb-assigned").val() || [],
2089 + priority: jQuery("#tb-priority").val() || [],
2090 + start_date: jQuery("#tb-start-date").val() || "",
2091 + end_date: jQuery("#tb-end-date").val() || ""
2092 + };
2093 + }
2094 + jQuery('#wppm_task_container').html(wppm_admin.loading_html);
1866 2095 var data = {
1867 2096 action: 'wppm_view_project_tasks',
1868 2097 wppm_task_filter:wppm_task_filter,
1869 - page:page,
1870 - id:id
2098 + page: wppm_admin.page,
2099 + page_no: (typeof page === 'number' ? page - 1 : 0),
2100 + id:id,
2101 + filters: JSON.stringify(filters)
1871 2102 };
1872 2103 jQuery.post(wppm_admin.ajax_url, data, function(response) {
1873 2104 jQuery('#wppm_task_container').html(response);
2105 + // 🔥 save cookie
2106 + setFilterCookie(filters);
2107 +
2108 + // 🔥 sync UI
2109 + setTimeout(function () {
2110 + syncUIWithFilters(filters);
2111 + renderActiveFilters(filters);
2112 + }, 100);
1874 2113 });
1875 2114 }
1876 2115
1877 2116 function wppm_tl_reset_grid_view_filter(page,id){
1878 - jQuery('#wppm_task_container').html(wppm_admin.loading_html);
2117 + var url = new URL(window.location.href);
2118 + if (url.searchParams.has('wppm_task_filter')) {
2119 + url.searchParams.delete('wppm_task_filter');
2120 + window.location.href = url.toString();
2121 + return false;
2122 + }
2123 + // ✅ close popup
2124 + jQuery("#tb-advanced-panel").removeClass("tb-open");
2125 + jQuery("#tb-backdrop").removeClass("active");
2126 +
2127 + // ✅ clear inputs
2128 + jQuery('#tb-advanced-panel input').val('');
2129 + jQuery('#tb-advanced-panel select').val([]);
2130 +
2131 + // ✅ clear chips
2132 + jQuery("#tb-active-filters").html('');
2133 + window.localStorage.removeItem('wppm_task_filter');
2134 +
2135 + // ✅ clear advanced filters + cookie BEFORE requesting the list, otherwise
2136 + // this request still sends the stale filters cookie and the reset only
2137 + // takes effect on the next click
2138 + if(id!=0){
2139 + resetFilters('kanban');
2140 + }else{
2141 + resetFilters('grid');
2142 + }
2143 +
2144 + jQuery('#wppm_task_container').html(wppm_admin.loading_html);
1879 2145 var data = {
1880 2146 action: 'wppm_view_project_tasks',
1881 2147 wppm_task_filter:'all',
1882 2148 task_search:"",
@@ -1886,24 +2152,48 @@
1886 2152 page:page,
1887 2153 id:id
1888 2154 };
1889 2155 jQuery.post(wppm_admin.ajax_url, data, function(response) {
1890 - jQuery('#wppm_task_container').html(response);
1891 - });
2156 + jQuery('#wppm_task_container').html(response);
2157 + });
1892 2158 }
2159 +function wppm_pl_reset_filter(is_archieved) {
2160 + var url = new URL(window.location.href);
2161 + if (url.searchParams.has('wppm_project_filter')) {
2162 + url.searchParams.delete('wppm_project_filter');
2163 + window.location.href = url.toString();
2164 + return false;
2165 + }
2166 + // close popup
2167 + jQuery("#tb-advanced-panel").removeClass("tb-open");
2168 + jQuery("#tb-backdrop").removeClass("active");
2169 + // clear inputs
2170 + jQuery('#tb-advanced-panel input').val('');
2171 + jQuery('#tb-advanced-panel select').val([]);
2172 + // clear chips
2173 + jQuery("#tb-active-filters").html('');
1893 2174
1894 -function wppm_pl_reset_filter(){
1895 - jQuery('#wppm_project_container').html(wppm_admin.loading_html);
1896 - var data = {
1897 - action: 'wppm_get_project_list',
1898 - wppm_project_filter:'all',
1899 - project_search:"",
1900 - sort_by:"project_name",
1901 - order:"ASC"
1902 - };
1903 - jQuery.post(wppm_admin.ajax_url, data, function(response) {
1904 - jQuery('#wppm_project_container').html(response);
1905 - });
2175 + // clear advanced filters + cookie BEFORE requesting the list, otherwise
2176 + // this request still sends the stale tb_proj_list_filters cookie and the
2177 + // reset only takes effect on the next click
2178 + resetProjectFilters(is_archieved);
2179 +
2180 + jQuery('#wppm_project_container').html(wppm_admin.loading_html);
2181 + var data = {
2182 + action: 'wppm_get_project_list',
2183 + wppm_project_filter: 'all',
2184 + project_search: '',
2185 + sort_by: 'project_name',
2186 + order: 'ASC',
2187 + page: wppm_admin.page,
2188 + is_archieved: is_archieved,
2189 + // send explicit empty filters so the server doesn't fall back to
2190 + // the (possibly not-yet-expired) tb_proj_list_filters cookie
2191 + filters: JSON.stringify({})
2192 + };
2193 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
2194 + jQuery('#wppm_project_container').html(response);
2195 + });
1906 2196 }
1907 2197
1908 2198 function wppm_tasks_by_select_project(page){
1909 2199 wppm_proj_filter = jQuery('#wppm_task_list_proj_filter').find(":selected").val();
@@ -2349,8 +2639,23 @@
2349 2639 });
2350 2640 }
2351 2641 }
2352 2642
2643 +function wppm_archive_project(project_id,is_archived){
2644 + if (!confirm(wppm_admin.confirm)) {
2645 + return;
2646 + } else {
2647 + var data = {
2648 + action: 'wppm_archive_project',
2649 + project_id: project_id,
2650 + is_archived: is_archived,
2651 + };
2652 + jQuery.post(wppm_admin.ajax_url, data, function() {
2653 + wppm_open_project(project_id);
2654 + });
2655 + }
2656 +}
2657 +
2353 2658 function wppm_get_print_task_settings(){
2354 2659 jQuery('.wppm_setting_pills li').removeClass('active');
2355 2660 jQuery('#wppm_settings_print_task').addClass('active');
2356 2661 jQuery('.wppm_setting_col2').html(wppm_admin.loading_html);
@@ -2420,13 +2725,14 @@
2420 2725 wppm_open_task(task_id);
2421 2726 });
2422 2727 }
2423 2728
2424 -function wppm_get_project_tasks_kanban_view(proj_id){
2729 +function wppm_get_project_tasks_kanban_view(proj_id, KanbanFilters = {}) {
2425 2730 jQuery('#wppm_project_container').html(wppm_admin.loading_html);
2426 2731 var data = {
2427 2732 action: 'wppm_get_project_tasks_kanban_view',
2428 - id:proj_id
2733 + id: proj_id,
2734 + filters: JSON.stringify(KanbanFilters)
2429 2735 };
2430 2736 jQuery.post(wppm_admin.ajax_url, data, function(response) {
2431 2737 jQuery('#wppm_project_container').html(response);
2432 2738 });
@@ -2431,4 +2737,364 @@
2431 2737 jQuery('#wppm_project_container').html(response);
2432 2738 });
2433 2739 }
2434 2740
2741 +function renderActiveFilters(filters) {
2742 + let box = document.getElementById("tb-active-filters");
2743 + if (!box) {
2744 + return;
2745 + }
2746 + // CLEAR OLD CHIPS
2747 + box.innerHTML = "";
2748 + if (!filters || typeof filters !== "object") {
2749 + return;
2750 + }
2751 + // CREATED BY
2752 + if (Array.isArray(filters.created_by)) {
2753 + filters.created_by.forEach(function(id) {
2754 + let text = jQuery('#tb-created-by option[value="' + id + '"]').text();
2755 + if (text) {
2756 + createChip(text, "created_by", id);
2757 + }
2758 + });
2759 + }
2760 + // ASSIGNED
2761 + if (Array.isArray(filters.assigned)) {
2762 + filters.assigned.forEach(function(id) {
2763 + let text = jQuery('#tb-assigned option[value="' + id + '"]').text();
2764 + if (text) {
2765 + createChip(text, "assigned", id);
2766 + }
2767 + });
2768 + }
2769 +
2770 + // PRIORITY
2771 + if (Array.isArray(filters.priority)) {
2772 + filters.priority.forEach(function(id) {
2773 + let text = jQuery('#tb-priority option[value="' + id + '"]').text();
2774 + if (text) {
2775 + createChip(text, "priority", id);
2776 + }
2777 + });
2778 + }
2779 +
2780 + // CATEGORY (Project List)
2781 + if (Array.isArray(filters.category)) {
2782 + filters.category.forEach(function(id) {
2783 + let text = jQuery('#tb-category option[value="' + id + '"]').text();
2784 + if (text) {
2785 + createChip(text, "category", id);
2786 + }
2787 + });
2788 + }
2789 +
2790 + // DATE CHIP
2791 + if (filters.start_date || filters.end_date) {
2792 + let dateText =
2793 + (filters.start_date || "") +
2794 + " → " +
2795 + (filters.end_date || "");
2796 + createChip(dateText, "date", "");
2797 + }
2798 +}
2799 +
2800 +function renderMulti(filters, key, selector, label) {
2801 + if (!filters || !filters[key]) {
2802 + return;
2803 + }
2804 + let values = filters[key] || [];
2805 + if (!Array.isArray(values) || values.length === 0) {
2806 + return;
2807 + }
2808 + jQuery(selector + " option").each(function () {
2809 + let val = String(jQuery(this).val());
2810 + let text = jQuery(this).text();
2811 + if (values.map(String).includes(val)) {
2812 + createChip(`${label}: ${text}`, key, val);
2813 + }
2814 + });
2815 +}
2816 +
2817 +function createChip(text, key, value) {
2818 + let container = document.getElementById("tb-active-filters");
2819 + if (!container) {
2820 + return;
2821 + }
2822 + let chip = document.createElement("span");
2823 + chip.className = "tb-chip";
2824 + chip.innerHTML = `
2825 + ${key.charAt(0).toUpperCase() + key.slice(1)}: ${text}
2826 + <span
2827 + class="tb-remove"
2828 + data-key="${key}"
2829 + data-value="${value || ''}"
2830 + >
2831 +
2832 + </span>
2833 + `;
2834 + container.appendChild(chip);
2835 +}
2836 +
2837 +function syncUIWithFilters(filters) {
2838 + jQuery("#tb-created-by")
2839 + .val(filters.created_by || [])
2840 + .trigger("change");
2841 +
2842 + jQuery("#tb-assigned")
2843 + .val(filters.assigned || [])
2844 + .trigger("change");
2845 +
2846 + jQuery("#tb-priority")
2847 + .val(filters.priority || [])
2848 + .trigger("change");
2849 +
2850 + jQuery("#tb-category")
2851 + .val(filters.category || [])
2852 + .trigger("change");
2853 +
2854 + jQuery("#tb-start-date")
2855 + .val(filters.start_date || "");
2856 +
2857 + jQuery("#tb-end-date")
2858 + .val(filters.end_date || "");
2859 +}
2860 +
2861 +function resetFilters(view_type) {
2862 + let emptyFilters = {
2863 + created_by: [],
2864 + assigned: [],
2865 + priority: [],
2866 + start_date: "",
2867 + end_date: "",
2868 + id: jQuery('#wppm_proj_id').val() || 0
2869 + };
2870 + // Reset UI fields
2871 + jQuery("#tb-created-by").val(null).trigger("change");
2872 + jQuery("#tb-assigned").val(null).trigger("change");
2873 + jQuery("#tb-priority").val(null).trigger("change");
2874 + jQuery("#tb-start-date").val("");
2875 + jQuery("#tb-end-date").val("");
2876 + if (view_type === 'grid') {
2877 + window.filters = { ...emptyFilters };
2878 + // Delete cookie
2879 + document.cookie =
2880 + "tb_filters=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
2881 + // Apply fresh filters
2882 + wppm_apply_task_filter_grid_view('0',emptyFilters.id,window.filters);
2883 + }
2884 + if (view_type === 'list') {
2885 + window.listFilters = { ...emptyFilters };
2886 + // Delete cookie
2887 + document.cookie =
2888 + "tb_list_filters=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
2889 + // Apply fresh filters
2890 + wppm_apply_task_filter(1, window.listFilters);
2891 + }
2892 + if (view_type === 'kanban') {
2893 + window.KanbanFilters = { ...emptyFilters };
2894 + // Delete cookie
2895 + document.cookie =
2896 + "tb_kanban_filters=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
2897 + // Apply fresh filters
2898 + wppm_get_project_tasks_kanban_view(
2899 + window.KanbanFilters.id,
2900 + window.KanbanFilters
2901 + );
2902 + }
2903 +}
2904 +
2905 +function getFilterCookie() {
2906 + let name = "tb_filters=";
2907 + let arr = document.cookie.split(';');
2908 + for (let i = 0; i < arr.length; i++) {
2909 + let c = arr[i].trim();
2910 + if (c.indexOf(name) === 0) {
2911 + try {
2912 + return JSON.parse(decodeURIComponent(c.substring(name.length)));
2913 + } catch (e) {
2914 + return null;
2915 + }
2916 + }
2917 + }
2918 + return null;
2919 +}
2920 +
2921 +function getListFilterCookie() {
2922 + let name = "tb_list_filters=";
2923 + let arr = document.cookie.split(';');
2924 + for (let i = 0; i < arr.length; i++) {
2925 + let c = arr[i].trim();
2926 + if (c.indexOf(name) === 0) {
2927 + try {
2928 + return JSON.parse(decodeURIComponent(c.substring(name.length)));
2929 + } catch (e) {
2930 + return null;
2931 + }
2932 + }
2933 + }
2934 + return null;
2935 +}
2936 +
2937 +function getKanbanFilterCookie() {
2938 + let name = "tb_kanban_filters=";
2939 + let arr = document.cookie.split(';');
2940 + for (let i = 0; i < arr.length; i++) {
2941 + let c = arr[i].trim();
2942 + if (c.indexOf(name) === 0) {
2943 + try {
2944 + return JSON.parse(decodeURIComponent(c.substring(name.length)));
2945 + } catch (e) {
2946 + return null;
2947 + }
2948 + }
2949 + }
2950 + return null;
2951 +}
2952 +
2953 +function setFilterCookie(filters) {
2954 + document.cookie =
2955 + "tb_filters=" + encodeURIComponent(JSON.stringify(filters)) +
2956 + ";path=/;max-age=" + (60 * 60 * 24);
2957 +}
2958 +
2959 +function setListFilterCookie(listFilters) {
2960 + document.cookie =
2961 + "tb_list_filters=" + encodeURIComponent(JSON.stringify(listFilters)) +
2962 + ";path=/;max-age=" + (60 * 60 * 24);
2963 +}
2964 +
2965 +function setKanbanFilterCookie(KanbanFilters) {
2966 + document.cookie =
2967 + "tb_kanban_filters=" + encodeURIComponent(JSON.stringify(KanbanFilters)) +
2968 + ";path=/;max-age=" + (60 * 60 * 24);
2969 +}
2970 +
2971 +let filterTimeout;
2972 +function triggerFilter(page = 1, filters = {}, view_type = 'list', proj_id = 0) {
2973 + clearTimeout(filterTimeout);
2974 + filterTimeout = setTimeout(function () {
2975 + if (view_type === 'grid') {
2976 + wppm_apply_task_filter_grid_view(
2977 + page,
2978 + proj_id,
2979 + filters
2980 + );
2981 + }
2982 + if (view_type === 'list') {
2983 + wppm_apply_task_filter(
2984 + page,
2985 + filters
2986 + );
2987 + }
2988 + if (view_type === 'kanban') {
2989 + wppm_get_project_tasks_kanban_view(
2990 + proj_id,
2991 + filters
2992 + );
2993 + }
2994 + }, 300);
2995 +}
2996 +
2997 +// ================= PROJECT LIST ADVANCED FILTER =================
2998 +function getProjectListFilterCookie() {
2999 + let name = "tb_proj_list_filters=";
3000 + let arr = document.cookie.split(';');
3001 + for (let i = 0; i < arr.length; i++) {
3002 + let c = arr[i].trim();
3003 + if (c.indexOf(name) === 0) {
3004 + try {
3005 + return JSON.parse(decodeURIComponent(c.substring(name.length)));
3006 + } catch (e) {
3007 + return null;
3008 + }
3009 + }
3010 + }
3011 + return null;
3012 +}
3013 +
3014 +function setProjectListFilterCookie(projectFilters) {
3015 + document.cookie =
3016 + "tb_proj_list_filters=" + encodeURIComponent(JSON.stringify(projectFilters)) +
3017 + ";path=/;max-age=" + (60 * 60 * 24);
3018 +}
3019 +
3020 +function resetProjectFilters(is_archieved) {
3021 + let emptyFilters = {
3022 + created_by: [],
3023 + assigned: [],
3024 + category: [],
3025 + start_date: "",
3026 + end_date: ""
3027 + };
3028 + jQuery("#tb-created-by").val(null).trigger("change");
3029 + jQuery("#tb-assigned").val(null).trigger("change");
3030 + jQuery("#tb-category").val(null).trigger("change");
3031 + jQuery("#tb-start-date").val("");
3032 + jQuery("#tb-end-date").val("");
3033 + window.projectFilters = { ...emptyFilters };
3034 + document.cookie = "tb_proj_list_filters=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
3035 + jQuery("#tb-advanced-panel").removeClass("tb-open");
3036 + jQuery("#tb-backdrop").removeClass("active");
3037 + jQuery("#tb-active-filters").html('');
3038 + wppm_apply_project_filter_advanced(1, window.projectFilters, is_archieved);
3039 +}
3040 +
3041 +let projectFilterTimeout;
3042 +function triggerProjectFilter(page, filters, is_archieved) {
3043 + clearTimeout(projectFilterTimeout);
3044 + projectFilterTimeout = setTimeout(function () {
3045 + wppm_apply_project_filter_advanced(page, filters, is_archieved);
3046 + }, 300);
3047 +}
3048 +
3049 +function wppm_apply_project_filter_advanced(page, projectFilters, is_archieved) {
3050 + page = page || 1;
3051 + is_archieved = is_archieved || 0;
3052 + if (!projectFilters) {
3053 + projectFilters = {
3054 + created_by: jQuery("#tb-created-by").val() || [],
3055 + assigned: jQuery("#tb-assigned").val() || [],
3056 + category: jQuery("#tb-category").val() || [],
3057 + start_date: jQuery("#tb-start-date").val() || "",
3058 + end_date: jQuery("#tb-end-date").val() || ""
3059 + };
3060 + }
3061 + let wppm_project_filter_val = jQuery('#wppm_project_filter').val() || 'all';
3062 + jQuery('#wppm_project_container').html(wppm_admin.loading_html);
3063 + jQuery.post(wppm_admin.ajax_url, {
3064 + action: 'wppm_get_project_list',
3065 + wppm_project_filter: wppm_project_filter_val,
3066 + page: wppm_admin.page,
3067 + page_no: page - 1,
3068 + is_archieved: is_archieved,
3069 + filters: JSON.stringify(projectFilters)
3070 + }, function (response) {
3071 + jQuery('#wppm_project_container').html(response);
3072 + setProjectListFilterCookie(projectFilters);
3073 + setTimeout(function () {
3074 + syncUIWithFilters(projectFilters);
3075 + renderActiveFilters(projectFilters);
3076 + }, 100);
3077 + });
3078 +}
3079 +
3080 +function wppm_archieve_project_list(){
3081 + jQuery('#wppm_project_container').html(wppm_admin.loading_html);
3082 + var data = {
3083 + action: 'wppm_archieve_project_list'
3084 + };
3085 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
3086 + jQuery('#wppm_project_container').html(response);
3087 + });
3088 +}
3089 +
3090 +function wppm_get_archieve_project_list(page_no){
3091 + jQuery('#wppm_project_container').html(wppm_admin.loading_html);
3092 + var data = {
3093 + action: 'wppm_get_project_list',
3094 + page_no:page_no,
3095 + is_archieved:1
3096 + };
3097 + jQuery.post(wppm_admin.ajax_url, data, function(response) {
3098 + jQuery('#wppm_project_container').html(response);
3099 + });
3100 +}