Răsfoiți Sursa

Ticket #5186 - Tasks: Functionality improvements. Point 1.

AntonLV 1 an în urmă
părinte
comite
a110940e41

+ 57 - 29
modules/boonex/russian/data/langs/bx_tasks/ru.xml

@@ -15,10 +15,11 @@
     <string name="_bx_tasks_option_auto_activation_for_categories"><![CDATA[Автоактивация для категорий]]></string>
   
     <string name="_bx_tasks_form_entry"><![CDATA[Задания]]></string>
-    <string name="_bx_tasks_form_entry_display_add"><![CDATA[Добавить Задание]]></string>
-    <string name="_bx_tasks_form_entry_display_edit"><![CDATA[Редактировать Задание]]></string>
-    <string name="_bx_tasks_form_entry_display_delete"><![CDATA[Удалить Задание]]></string>
-    <string name="_bx_tasks_form_entry_display_view"><![CDATA[Просмотреть Задание]]></string>
+    <string name="_bx_tasks_form_entry_display_add"><![CDATA[Добавить задание]]></string>
+    <string name="_bx_tasks_form_entry_display_edit"><![CDATA[Редактировать задание]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_state"><![CDATA[Редактировать состояние задачи]]></string>
+    <string name="_bx_tasks_form_entry_display_delete"><![CDATA[Удалить задание]]></string>
+    <string name="_bx_tasks_form_entry_display_view"><![CDATA[Просмотреть задание]]></string>
     <string name="_bx_tasks_form_entry_input_author"><![CDATA[Автор]]></string>
     <string name="_bx_tasks_form_entry_input_sys_do_submit"><![CDATA[Выполнить]]></string>
     <string name="_bx_tasks_form_entry_input_do_submit"><![CDATA[Выполнить]]></string>
@@ -30,9 +31,16 @@
     <string name="_bx_tasks_form_entry_input_do_cancel_edit"><![CDATA[Отменить]]></string>
     <string name="_bx_tasks_form_entry_input_sys_controls"><![CDATA[Управление]]></string>
     <string name="_bx_tasks_form_entry_input_sys_controls_edit"><![CDATA[Управление (Форма редактирования)]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_controls_edit_popup"><![CDATA[Управление (Форма редактирования во всплывающем окне)]]></string>
     <string name="_bx_tasks_form_entry_input_sys_title"><![CDATA[Заголовок]]></string>
     <string name="_bx_tasks_form_entry_input_title"><![CDATA[Заголовок]]></string>
     <string name="_bx_tasks_form_entry_input_title_err"><![CDATA[Заголовок обязателен. Пожалуйста, заполните это поле]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_type"><![CDATA[Тип]]></string>
+    <string name="_bx_tasks_form_entry_input_type"><![CDATA[Тип]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_priority"><![CDATA[Приоритет]]></string>
+    <string name="_bx_tasks_form_entry_input_priority"><![CDATA[Приоритет]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_state"><![CDATA[Состояние]]></string>
+    <string name="_bx_tasks_form_entry_input_state"><![CDATA[Состояние]]></string>
     <string name="_bx_tasks_form_entry_input_sys_cat"><![CDATA[Категория]]></string>
     <string name="_bx_tasks_form_entry_input_cat"><![CDATA[Категория]]></string>
     <string name="_bx_tasks_form_entry_input_cat_err"><![CDATA[Нужно обязательно выбрать категорию]]></string>
@@ -69,21 +77,21 @@
     <string name="_bx_tasks_form_entry_input_sys_allow_comments"><![CDATA[Разрешить комментарии]]></string>
     <string name="_bx_tasks_form_entry_input_allow_comments"><![CDATA[Разрешить комментарии]]></string>
 	
-	<string name="_bx_tasks_form_entry_input_sys_tasks_list"><![CDATA[Список заданий]]></string>
-	<string name="_bx_tasks_form_entry_input_tasks_list"><![CDATA[Список заданий]]></string>
-	<string name="_bx_tasks_form_profile_input_sys_initial_members"><![CDATA[Назначить на]]></string>
-	<string name="_bx_tasks_form_profile_input_initial_members"><![CDATA[Назначить на]]></string>
-	<string name="_bx_tasks_form_entry_input_sys_date_due_date"><![CDATA[Срок]]></string>
-	<string name="_bx_tasks_form_entry_input_date_due_date"><![CDATA[Срок]]></string>
-	
-	<string name="_bx_tasks_form_list_entry"><![CDATA[Списки заданий]]></string>
-	<string name="_bx_tasks_form_list_entry_display_add"><![CDATA[Добавить Список заданий]]></string>
-	<string name="_bx_tasks_form_list_entry_display_edit"><![CDATA[Редактировать Список заданий]]></string>
-	<string name="_bx_tasks_form_list_entry_input_do_submit"><![CDATA[Выполнить]]></string>
-	<string name="_bx_tasks_form_list_entry_input_sys_do_submit"><![CDATA[Выполнить]]></string>
-	<string name="_bx_tasks_form_list_entry_input_sys_title"><![CDATA[Заголовок]]></string>
-	<string name="_bx_tasks_form_list_entry_input_title"><![CDATA[Заголовок]]></string>
-	<string name="_bx_tasks_form_list_entry_input_title_err"><![CDATA[Заголовок обязателен. Пожалуйста, заполните это поле]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_tasks_list"><![CDATA[Список заданий]]></string>
+    <string name="_bx_tasks_form_entry_input_tasks_list"><![CDATA[Список заданий]]></string>
+    <string name="_bx_tasks_form_profile_input_sys_initial_members"><![CDATA[Назначить на]]></string>
+    <string name="_bx_tasks_form_profile_input_initial_members"><![CDATA[Назначить на]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_date_due_date"><![CDATA[Срок]]></string>
+    <string name="_bx_tasks_form_entry_input_date_due_date"><![CDATA[Срок]]></string>
+
+    <string name="_bx_tasks_form_list_entry"><![CDATA[Списки заданий]]></string>
+    <string name="_bx_tasks_form_list_entry_display_add"><![CDATA[Добавить Список заданий]]></string>
+    <string name="_bx_tasks_form_list_entry_display_edit"><![CDATA[Редактировать Список заданий]]></string>
+    <string name="_bx_tasks_form_list_entry_input_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_tasks_form_list_entry_input_sys_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_tasks_form_list_entry_input_sys_title"><![CDATA[Заголовок]]></string>
+    <string name="_bx_tasks_form_list_entry_input_title"><![CDATA[Заголовок]]></string>
+    <string name="_bx_tasks_form_list_entry_input_title_err"><![CDATA[Заголовок обязателен. Пожалуйста, заполните это поле]]></string>
 
     <string name="_bx_tasks_category_form_entry"><![CDATA[Форма Категории]]></string>
     <string name="_bx_tasks_category_display_add"><![CDATA[Добавить категорию]]></string>
@@ -93,12 +101,12 @@
     <string name="_bx_tasks_category_form_entry_input_value_err"><![CDATA[Значение обязательно. Пожалуйста, заполните это поле]]></string>
     <string name="_bx_tasks_lmi_cpt_categories"><![CDATA[Категории]]></string>
 
-  <string name="_bx_tasks_acl_action_create_entry"><![CDATA[Создать Задание]]></string>
+    <string name="_bx_tasks_acl_action_create_entry"><![CDATA[Создать Задание]]></string>
     <string name="_bx_tasks_acl_action_delete_entry"><![CDATA[Удалить Задание]]></string>
     <string name="_bx_tasks_acl_action_view_entry"><![CDATA[Просмотреть Задание]]></string>
     <string name="_bx_tasks_acl_action_set_thumb"><![CDATA[Назначить изображение заголовка публикации]]></string>
     <string name="_bx_tasks_acl_action_edit_any_entry"><![CDATA[Редактировать Любое Задание]]></string>
-	<string name="_bx_tasks_acl_action_delete_any_entry"><![CDATA[Удалять Любое Задание]]></string>
+    <string name="_bx_tasks_acl_action_delete_any_entry"><![CDATA[Удалять Любое Задание]]></string>
 
     <string name="_bx_tasks_page_title_sys_create_entry"><![CDATA[Новое Задание]]></string>
     <string name="_bx_tasks_page_title_create_entry"><![CDATA[Новое Задание]]></string>
@@ -129,10 +137,10 @@
     <string name="_bx_tasks_page_block_title_recent_entries_view_full"><![CDATA[Последние Задания (Full Полный просмотр)]]></string>
     <string name="_bx_tasks_page_block_title_entry_social_sharing"><![CDATA[Поделиться]]></string>
     <string name="_bx_tasks_page_block_title_entry_author"><![CDATA[Автор]]></string>
-	<string name="_bx_tasks_page_block_title_entry_assignments"><![CDATA[Назначенные]]></string>
+    <string name="_bx_tasks_page_block_title_entry_assignments"><![CDATA[Назначенные]]></string>
     <string name="_bx_tasks_page_block_title_entry_actions"><![CDATA[Действия]]></string>
     <string name="_bx_tasks_page_block_title_entry_comments"><![CDATA[Комментарии]]></string>
-	<string name="_bx_tasks_page_block_title_entry_reports"><![CDATA[Жалобы]]></string>
+    <string name="_bx_tasks_page_block_title_entry_reports"><![CDATA[Жалобы]]></string>
     <string name="_bx_tasks_page_block_title_entry_comments_link"><![CDATA[Комментарии к <a href="{entry_link}">{title}</a>]]></string>
     <string name="_bx_tasks_page_block_title_entry_attachments"><![CDATA[Прикрепления]]></string>
     <string name="_bx_tasks_page_block_title_entry_all_actions"><![CDATA[Все действия]]></string>
@@ -187,10 +195,10 @@
     <string name="_bx_tasks_page_block_title_featured_entries_view_showcase"><![CDATA[Продвинутые Задания]]></string>
     <string name="_bx_tasks_page_block_title_sys_entry_context"><![CDATA[Опубликовано в]]></string>
     <string name="_bx_tasks_page_block_title_entry_context"><![CDATA[Опубликовано в]]></string>
-	<string name="_bx_tasks_page_block_title_sys_calendar_in_context"><![CDATA[Календарь]]></string>
-	<string name="_bx_tasks_page_block_title_calendar_in_context"><![CDATA[Календарь]]></string>
-	<string name="_bx_tasks_page_block_title_sys_calendar_of_author"><![CDATA[Календарь]]></string>
-	<string name="_bx_tasks_page_block_title_calendar_of_author"><![CDATA[Календарь]]></string>
+    <string name="_bx_tasks_page_block_title_sys_calendar_in_context"><![CDATA[Календарь]]></string>
+    <string name="_bx_tasks_page_block_title_calendar_in_context"><![CDATA[Календарь]]></string>
+    <string name="_bx_tasks_page_block_title_sys_calendar_of_author"><![CDATA[Календарь]]></string>
+    <string name="_bx_tasks_page_block_title_calendar_of_author"><![CDATA[Календарь]]></string>
 
     <string name="_bx_tasks_menu_title_entry_attachments"><![CDATA[Форма - Прикрепления]]></string>
     <string name="_bx_tasks_menu_set_title_entry_attachments"><![CDATA[Форма - Прикрепления]]></string>
@@ -215,6 +223,8 @@
     <string name="_bx_tasks_menu_item_title_create_entry"><![CDATA[Задание]]></string>
     <string name="_bx_tasks_menu_item_title_system_edit_entry"><![CDATA[Редактировать]]></string>
     <string name="_bx_tasks_menu_item_title_edit_entry"><![CDATA[Редактировать]]></string>
+    <string name="_bx_tasks_menu_item_title_system_edit_entry_state"><![CDATA[Редактировать состояние]]></string>
+    <string name="_bx_tasks_menu_item_title_edit_entry_state"><![CDATA[Редактировать состояние]]></string>
     <string name="_bx_tasks_menu_item_title_system_delete_entry"><![CDATA[Удалить]]></string>
     <string name="_bx_tasks_menu_item_title_delete_entry"><![CDATA[Удалить]]></string>
     <string name="_bx_tasks_menu_item_title_system_view_entry"><![CDATA[Просмотреть Задание]]></string>
@@ -279,8 +289,26 @@
     <string name="_bx_tasks_search_extended"><![CDATA[Задания Поиск]]></string>
     <string name="_bx_tasks_search_extended_cmts"><![CDATA[Задания Комментарии Поиск]]></string>
 
+    <string name="_bx_tasks_pre_lists_types"><![CDATA[Типы]]></string>
+    <string name="_bx_tasks_type_1"><![CDATA[Ошибка]]></string>
+    <string name="_bx_tasks_type_2"><![CDATA[Свойство]]></string>
+    <string name="_bx_tasks_type_3"><![CDATA[Задача]]></string>
+    <string name="_bx_tasks_pre_lists_priorities"><![CDATA[Приоритеты]]></string>
+    <string name="_bx_tasks_priority_1"><![CDATA[Срочный]]></string>
+    <string name="_bx_tasks_priority_2"><![CDATA[Высокий]]></string>
+    <string name="_bx_tasks_priority_3"><![CDATA[Средний]]></string>
+    <string name="_bx_tasks_priority_4"><![CDATA[Низкий]]></string>
+    <string name="_bx_tasks_priority_5"><![CDATA[Нет приоритета]]></string>
+    <string name="_bx_tasks_pre_lists_states"><![CDATA[Состояния]]></string>
+    <string name="_bx_tasks_state_1"><![CDATA[Отставание]]></string>
+    <string name="_bx_tasks_state_2"><![CDATA[Запланировано]]></string>
+    <string name="_bx_tasks_state_3"><![CDATA[В ходе выполнения]]></string>
+    <string name="_bx_tasks_state_4"><![CDATA[В обзоре]]></string>
+    <string name="_bx_tasks_state_5"><![CDATA[Отменено]]></string>
+    <string name="_bx_tasks_state_6"><![CDATA[Дубликат]]></string>
+    <string name="_bx_tasks_state_7"><![CDATA[Выполнено]]></string>
     <string name="_bx_tasks_pre_lists_cats"><![CDATA[Категории заданий]]></string>
-	<string name="_bx_tasks_cat_Animals_Pets"><![CDATA[Животные]]></string>
+    <string name="_bx_tasks_cat_Animals_Pets"><![CDATA[Животные]]></string>
     <string name="_bx_tasks_cat_Architecture"><![CDATA[Архитектура]]></string>
     <string name="_bx_tasks_cat_Art"><![CDATA[Искусство]]></string>
     <string name="_bx_tasks_cat_Cars_Motorcycles"><![CDATA[Авто и мото]]></string>
@@ -327,7 +355,6 @@
     <string name="_bx_tasks_txt_processing_awaiting"><![CDATA[Задание будет опубликовано как только сконвертируется видео.]]></string>
     <string name="_bx_tasks_txt_processing_failed"><![CDATA[Задание не была опубликовано, тк произошла ошибка при конвертации видео. Обновите видео, чтобы решить проблему.]]></string>
     <string name="_bx_tasks_txt_scheduled_awaiting"><![CDATA[Дата публикации:  {date_publish_uf}]]></string>
-	
     <string name="_bx_tasks_txt_new_task_list"><![CDATA[Новый Список заданий]]></string>
     <string name="_bx_tasks_txt_new_task"><![CDATA[Новое Задание]]></string>
     <string name="_bx_tasks_txt_filter_all"><![CDATA[Все Задания]]></string>
@@ -336,6 +363,7 @@
     <string name="_bx_tasks_txt_err_cannot_perform_action"><![CDATA[Невозможно выполнить действие. Пожалуйста, оповестите нас об этой проблеме.]]></string>
     <string name="_bx_tasks_confirm_tasklist_deletion"><![CDATA[Вы удалите все задания, которые содержатся в этом списке заданий. Вы уверены?]]></string>
 
+    <string name="_bx_tasks_txt_err_cannot_perform_action"><![CDATA[Невозможно выполнить действие. Пожалуйста, оповестите нас об этой проблеме.]]></string>
     <string name="_bx_tasks_txt_msg_status_hidden"><![CDATA[Данное задание было скрыто.]]></string>
     <string name="_bx_tasks_txt_msg_status_pending"><![CDATA[Данное задание ожидает утверждения.]]></string>
 

+ 17 - 6
modules/boonex/tasks/classes/BxTasksConfig.php

@@ -19,6 +19,7 @@ class BxTasksConfig extends BxBaseModTextConfig
         $aMenuItems2Methods = array (
             'approve' => 'checkAllowedApprove',
             'edit-task' => 'checkAllowedEdit',
+            'edit-task-state' => 'checkAllowedManage',
             'delete-task' => 'checkAllowedDelete',
         );
 
@@ -42,6 +43,9 @@ class BxTasksConfig extends BxBaseModTextConfig
             'FIELD_TITLE' => 'title',
             'FIELD_TEXT' => 'text',
             'FIELD_TEXT_ID' => 'post-text',
+            'FIELD_TYPE' => 'type',
+            'FIELD_PRIORITY' => 'priority',
+            'FIELD_STATE' => 'state',
             'FIELD_CATEGORY' => 'cat',
             'FIELD_MULTICAT' => 'multicat',
             'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
@@ -122,18 +126,17 @@ class BxTasksConfig extends BxBaseModTextConfig
             'OBJECT_COMMENTS' => 'bx_tasks',
             'OBJECT_NOTES' => 'bx_tasks_notes',
             'OBJECT_CATEGORY' => 'bx_tasks_cats',
-			'OBJECT_CONNECTION' => 'bx_tasks_assignments',
+            'OBJECT_CONNECTION' => 'bx_tasks_assignments',
             'OBJECT_PRIVACY_VIEW' => 'bx_tasks_allow_view_to',
             'OBJECT_FORM_ENTRY' => 'bx_tasks',
             'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_tasks_entry_view',
             'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_tasks_entry_add',
             'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_tasks_entry_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT_STATE' => 'bx_tasks_entry_edit_state',
             'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_tasks_entry_delete',
-			
             'OBJECT_FORM_LIST_ENTRY' => 'bx_tasks_list',
             'OBJECT_FORM_LIST_ENTRY_DISPLAY_ADD' => 'bx_tasks_list_entry_add',
             'OBJECT_FORM_LIST_ENTRY_DISPLAY_EDIT' => 'bx_tasks_list_entry_edit',
-			
             'OBJECT_MENU_ENTRY_ATTACHMENTS' => 'bx_tasks_entry_attachments', // attachments menu in create/edit forms
             'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_tasks_view', // actions menu on view entry page
             'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_tasks_view_actions', // all actions menu on view entry page
@@ -148,9 +151,12 @@ class BxTasksConfig extends BxBaseModTextConfig
             'OBJECT_UPLOADERS' => array('bx_tasks_simple', 'bx_tasks_html5'),
             'OBJECT_CONTENT_INFO' => 'bx_tasks',
             'OBJECT_CMTS_CONTENT_INFO' => 'bx_tasks_cmts',
+            'OBJECT_PRE_LIST_TYPES' => 'bx_tasks_types',
+            'OBJECT_PRE_LIST_PRIORITIES' => 'bx_tasks_priorities',
+            'OBJECT_PRE_LIST_STATES' => 'bx_tasks_states',
             
             'BADGES_AVALIABLE' => true,
-			'COOKIE_SETTING_KEY' => 'bx_tasks_filters',
+            'COOKIE_SETTING_KEY' => 'bx_tasks_filters',
 
             // menu items which visibility depends on custom visibility checking
             'MENU_ITEM_TO_METHOD' => array (
@@ -213,13 +219,13 @@ class BxTasksConfig extends BxBaseModTextConfig
         $this->_aJsClasses = array_merge($this->_aJsClasses, array(
             'manage_tools' => 'BxTasksManageTools',
             'categories' => 'BxDolCategories',
-			'tasks' => 'BxTasksView'
+            'tasks' => 'BxTasksView'
         ));
 
         $this->_aJsObjects = array_merge($this->_aJsObjects, array(
             'manage_tools' => 'oBxTasksManageTools',
             'categories' => 'oBxDolCategories',
-			'tasks' => 'oBxTasksView'
+            'tasks' => 'oBxTasksView'
         ));
 
         $this->_aGridObjects = array(
@@ -229,6 +235,11 @@ class BxTasksConfig extends BxBaseModTextConfig
 
         $this->_bAttachmentsInTimeline = true;
     }
+
+    public function isCompleted($iState)
+    {
+        return in_array($iState, [BX_TASKS_STATE_CANCELLED, BX_TASKS_STATE_DUPLICATE, BX_TASKS_STATE_DONE]);
+    }
 }
 
 /** @} */

+ 4 - 6
modules/boonex/tasks/classes/BxTasksDb.php

@@ -49,18 +49,16 @@ class BxTasksDb extends BxBaseModTextDb
     {
         $CNF = &$this->_oConfig->CNF;
 
-        $aBindings = [
-            $CNF['FIELD_ALLOW_VIEW_TO'] => $iContextId,
-            $CNF['FIELD_TASKLIST'] => $iListId
-        ];
-
         $sWhereClause = " AND `" . $CNF['FIELD_ALLOW_VIEW_TO'] . "` = :" . $CNF['FIELD_ALLOW_VIEW_TO'] . " AND `" . $CNF['FIELD_TASKLIST'] . "` = :" . $CNF['FIELD_TASKLIST'];
 
         $oCf = BxDolContentFilter::getInstance();
         if($oCf->isEnabled())
             $sWhereClause .= $oCf->getSQLParts($CNF['TABLE_ENTRIES'], $CNF['FIELD_CF']);
 
-        return $this->getAll("SELECT * FROM `" . $CNF['TABLE_ENTRIES'] . "` WHERE 1" . $sWhereClause, $aBindings);
+        return $this->getAll("SELECT * FROM `" . $CNF['TABLE_ENTRIES'] . "` WHERE 1" . $sWhereClause, [
+            $CNF['FIELD_ALLOW_VIEW_TO'] => $iContextId,
+            $CNF['FIELD_TASKLIST'] => $iListId
+        ]);
     }
 	
     public function getEntriesByDate($sDateFrom, $sDateTo, $aSQLPart = array())

+ 10 - 1
modules/boonex/tasks/classes/BxTasksMenuViewActions.php

@@ -16,8 +16,12 @@ class BxTasksMenuViewActions extends BxBaseModTextMenuViewActions
     public function __construct($aObject, $oTemplate = false)
     {
         $this->_sModule = 'bx_tasks';
+
         parent::__construct($aObject, $oTemplate);
-		$this->addMarkers(array('js_object' => $this->_oModule->_oConfig->getJsObject('tasks')));
+
+        $this->addMarkers([
+            'js_object' => $this->_oModule->_oConfig->getJsObject('tasks')
+        ]);
     }
 
     protected function _getMenuItemEditTask($aItem)
@@ -25,6 +29,11 @@ class BxTasksMenuViewActions extends BxBaseModTextMenuViewActions
         return $this->_getMenuItemByNameActions($aItem);
     }
 
+    protected function _getMenuItemEditTaskState($aItem)
+    {
+        return $this->_getMenuItemByNameActions($aItem);
+    }
+
     protected function _getMenuItemDeleteTask($aItem)
     {
         return $this->_getMenuItemByNameActions($aItem);

+ 177 - 230
modules/boonex/tasks/classes/BxTasksModule.php

@@ -9,8 +9,16 @@
  */
 
 /**
- * Tasks module
+ * Task states
  */
+define('BX_TASKS_STATE_BACBLOG', 1);
+define('BX_TASKS_STATE_TODO', 2);
+define('BX_TASKS_STATE_IN_PROGRESS', 3);
+define('BX_TASKS_STATE_IN_REVIEW', 4);
+define('BX_TASKS_STATE_CANCELLED', 5);
+define('BX_TASKS_STATE_DUPLICATE', 6);
+define('BX_TASKS_STATE_DONE', 7);
+
 class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService 
 {
     function __construct(&$aModule)
@@ -178,45 +186,82 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         ));
     }
 	
-	public function actionProcessTaskForm($iContextId, $iListId)
+    public function actionProcessTaskForm($iContextId, $iListId)
     {
-        if (!$this->isAllowAdd(-$iContextId))
+        if(!$this->isAllowAdd(-$iContextId))
             return;
         
-		$CNF = &$this->_oConfig->CNF;
-		$oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_ADD']);
-		
-		$oForm->aFormAttrs['action'] = BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'process_task_form/' . $iContextId . '/' . $iListId . '/';
-		if (!$oForm)
+        $CNF = &$this->_oConfig->CNF;
+
+        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_ADD']);
+        $oForm->aFormAttrs['action'] = BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'process_task_form/' . $iContextId . '/' . $iListId . '/';
+        if(!$oForm)
             return '';
-		
-		$oForm->initChecker();
-		
+
+        $oForm->initChecker();
         if($oForm->isSubmittedAndValid()) {
-			$aValsToAdd[$CNF['FIELD_ALLOW_VIEW_TO']] = $iContextId;
-			$aValsToAdd[$CNF['FIELD_TASKLIST']] = $iListId;
-			$iContentId = $oForm->insert($aValsToAdd);
-			$this->onPublished($iContentId);
-			
-			return echoJson(array(
-				 'eval' => $this->_oConfig->getJsObject('tasks') . '.reloadData(oData, ' . $iContextId . ')',
-			));
+            $iContentId = $oForm->insert([$CNF['FIELD_ALLOW_VIEW_TO'] => $iContextId, $CNF['FIELD_TASKLIST'] => $iListId]);
+
+            $this->onPublished($iContentId);
+
+            return echoJson([
+                'eval' => $this->_oConfig->getJsObject('tasks') . '.reloadData(oData, ' . $iContextId . ')',
+            ]);
         }
-        else {	
-			$sContent = $this->_oTemplate->parseHtmlByName('popup_form.html', array(
-				'form_id' => $oForm->getId(),
-				'form' => $oForm->getCode(true)
-			));
+        else {
+            $sContent = $this->_oTemplate->parseHtmlByName('popup_form.html', [
+                'form_id' => $oForm->getId(),
+                'form' => $oForm->getCode(true)
+            ]);
 																	 
-			if (!$oForm->isSubmitted()){
-				echo $sContent;
-				return;
-			}
-            return echoJson(array('form' => $sContent, 'form_id' => $oForm->getId()));;
+            if (!$oForm->isSubmitted()) {
+                echo $sContent;
+                return;
+            }
+
+            return echoJson(['form' => $sContent, 'form_id' => $oForm->getId()]);
         }
-	}
-	
-	public function actionCalendarData()
+    }
+
+    public function actionProcessTaskFormEditState($iContentId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+        if(!$this->isAllowAdd(abs($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']])))
+            return '';
+
+        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_EDIT_STATE']);
+        $oForm->aFormAttrs['action'] = BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'process_task_form_edit_state/' . $iContentId . '/';
+        if(!$oForm)
+            return '';
+
+        $oForm->initChecker($aContentInfo);
+        if($oForm->isSubmittedAndValid()) {
+            $iState = $oForm->getCleanValue($CNF['FIELD_STATE']);
+            if(!$oForm->update($iContentId, [$CNF['FIELD_COMPLETED'] => (int)$this->_oConfig->isCompleted($iState)]))
+                return echoJson(['msg' => _t('_bx_tasks_txt_err_cannot_perform_action')]);
+
+            return echoJson([
+                'eval' => $this->_oConfig->getJsObject('tasks') . '.reload(oData)',
+            ]);
+        }
+        else {
+            $sContent = $this->_oTemplate->parseHtmlByName('popup_form.html', [
+                'form_id' => $oForm->getId(),
+                'form' => $oForm->getCode(true)
+            ]);
+																	 
+            if (!$oForm->isSubmitted()) {
+                echo $sContent;
+                return;
+            }
+
+            return echoJson(['form' => $sContent, 'form_id' => $oForm->getId()]);
+        }
+    }
+
+    public function actionCalendarData()
     {
         // check permissions
         $aSQLPart = array();
@@ -389,32 +434,38 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         return $aResult;
     }
 
-    public function serviceIsCompleted($iContentId)
+    public function serviceCheckAllowedManage($iContentId)
     {
-        if (!$this->serviceIsAllowManage($iContentId))
+        if(!$this->isAllowManage($iContentId))
             return false;
-        
-        $CNF = &$this->_oConfig->CNF;
 
-        $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
-        return $aContentInfo[$CNF['FIELD_COMPLETED']] ? false: true;
+        return true; 
     }
-    
-    public function serviceIsUncompleted($iContentId)
+
+    public function serviceCheckAllowedComplete($iContentId)
     {
-        if (!$this->serviceIsAllowManage($iContentId))
+        if(!$this->serviceCheckAllowedManage($iContentId))
             return false;
-        
-		$CNF = &$this->_oConfig->CNF;
-		$aContentInfo = $this->_oDb->getContentInfoById($iContentId);
-        return $aContentInfo[$CNF['FIELD_COMPLETED']] ? true : false;
+
+        return !$this->isCompleted($iContentId);
     }
     
-    public function serviceIsAllowManage($iContentId)
+    public function serviceCheckAllowedUncomplete($iContentId)
     {
-        if (!$this->isAllowManage($iContentId))
+        if(!$this->serviceCheckAllowedManage($iContentId))
             return false;
-        return true; 
+
+        return $this->isCompleted($iContentId);
+    }
+
+    public function serviceIsCompleted($iContentId)
+    {
+        return $this->isCompleted($iContentId);
+    }
+
+    public function serviceIsUncompleted($iContentId)
+    {
+        return !$this->isCompleted($iContentId);
     }
     
     public function serviceIsAllowBadges($iContentId)
@@ -427,38 +478,39 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         
         return true; 
     }
-	
-	public function serviceEntityAssignments($iContentId = 0, $bAsArray = false)
-	{
-		if (!$iContentId)
+
+    public function serviceEntityAssignments($iContentId = 0, $bAsArray = false)
+    {
+        if(!$iContentId)
             $iContentId = bx_process_input(bx_get('id'), BX_DATA_INT);
-        if (!$iContentId)
+        if(!$iContentId)
             return false;
 
-		$mixedResult = BxDolConnection::getObjectInstance($this->_oConfig->CNF['OBJECT_CONNECTION'])->getConnectedInitiators($iContentId);
-        if(!$bAsArray) {
-			$s = '';
-            foreach ($mixedResult as $mixedProfile) {
-				$bProfile = is_array($mixedProfile);
+        $CNF = &$this->_oConfig->CNF;
 
-				$oProfile = BxDolProfile::getInstance($bProfile ? (int)$mixedProfile['id'] : (int)$mixedProfile);
-				if(!$oProfile)
-					continue;
+        $aProfiles = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION'])->getConnectedInitiators($iContentId);
+        if($bAsArray)
+            return $aProfiles;
 
-				$aUnitParams = array('template' => array('name' => 'unit', 'size' => 'thumb'));
+        $sResult = '';
+        foreach ($aProfiles as $mixedProfile) {
+            $bProfile = is_array($mixedProfile);
 
-				if($bProfile && is_array($mixedProfile['info']))
-					$aUnitParams['template']['vars'] = $mixedProfile['info'];
+            $oProfile = BxDolProfile::getInstance($bProfile ? (int)$mixedProfile['id'] : (int)$mixedProfile);
+            if(!$oProfile)
+                continue;
 
-				$s .= $oProfile->getUnit(0, $aUnitParams);
-			}
-			$mixedResult = $s;
-			
-            if (!$mixedResult)
-                return MsgBox(_t('_sys_txt_empty'));
+            $aUnitParams = array('template' => array('name' => 'unit', 'size' => 'thumb'));
+            if($bProfile && is_array($mixedProfile['info']))
+                $aUnitParams['template']['vars'] = $mixedProfile['info'];
+
+            $sResult .= $oProfile->getUnit(0, $aUnitParams);
         }
 
-        return $mixedResult;
+        if(!$sResult)
+            $sResult = MsgBox(_t('_sys_txt_empty'));
+
+        return $sResult;
     }
 	
     public function serviceCheckAllowedCommentsTask($iContentId, $sObjectComments) 
@@ -471,7 +523,7 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         return parent::serviceCheckAllowedCommentsTask($iContentId, $sObjectComments);
     }
 	
-	public function serviceCheckAllowedCommentsView($iContentId, $sObjectComments) 
+    public function serviceCheckAllowedCommentsView($iContentId, $sObjectComments) 
     {
         $CNF = &$this->_oConfig->CNF;
         $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
@@ -513,166 +565,46 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         return $o->display($sTemplate);
     }
 	
-	public function serviceGetCalendarEntries($iProfileId)
+    public function serviceGetCalendarEntries($iProfileId)
     {
-		$CNF = &$this->_oConfig->CNF;
+        $CNF = &$this->_oConfig->CNF;
         $oConn = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION']);
         $aData = $oConn->getConnectedInitiators($iProfileId);
-		$aData2 = array(0);
-        foreach($aData as $iProfileId2){
+        $aData2 = array(0);
+        foreach($aData as $iProfileId2) {
             $oProfile = BxDolProfile::getInstance($iProfileId2);
             array_push($aData2, $oProfile->getContentId());
         }
         $aSQLPart['where'] = " AND " . $CNF['TABLE_ENTRIES'] . ".`" . $CNF['FIELD_ID'] . "` IN(" . implode(',', $aData2) . ")";
         return $this->_oDb->getEntriesByDate(bx_get('start'), bx_get('end'), null, $aSQLPart);
-	}
+    }
 	
     public function serviceBrowseContext ($iProfileId = 0, $aParams = array())
     {
-		if(!$iProfileId)
+        if(!$iProfileId)
             $iProfileId = bx_process_input(bx_get('profile_id'), BX_DATA_INT);
         if(!$iProfileId)
             return '';
+
         return $this->serviceBrowseTasks (-$iProfileId, $aParams);
     }
 	
     public function serviceBrowseTasks ($iContextId = 0, $aParams = array())
     {
-        if(!$this->isAllowView(-$iContextId))
+        $_iContextId = abs($iContextId);
+
+        if(!$this->isAllowView($_iContextId))
             return;  
 
-        if(!($oProfileContext = BxDolProfile::getInstance(-$iContextId)) || $oProfileContext->checkAllowedProfileView(-$iContextId) !== CHECK_ACTION_RESULT_ALLOWED)
+        if(!($oProfileContext = BxDolProfile::getInstance($_iContextId)) || $oProfileContext->checkAllowedProfileView($_iContextId) !== CHECK_ACTION_RESULT_ALLOWED)
             return false;
 
-        $CNF = &$this->_oConfig->CNF;
-
-        $this->_oTemplate->addCssJs();
-        $aVars = array();
-        $aLists = $this->_oDb->getLists($iContextId);
-        $aListsVars = array();
-        $oConn = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION']);
-
-        $aFilterValues = array();
-        if (isset($_COOKIE[$CNF['COOKIE_SETTING_KEY']]))
-                $aFilterValues = json_decode($_COOKIE[$CNF['COOKIE_SETTING_KEY']], true);
-
-        $bAllowAdd = $this->isAllowAdd(-$iContextId);
-        $bAllowManage = $this->isAllowManageByContext(-$iContextId);
-        
-        foreach($aLists as $aList) {
-			$aTasks = $this->_oDb->getTasks($iContextId, $aList['id']);
-			$aTasksVars = array();
-			foreach($aTasks as $aTask) {
-				$aMembers = $oConn->getConnectedInitiators($aTask[$CNF['FIELD_ID']]);
-				$aMembersVars = array();
-				foreach($aMembers as $iMember) {
-					$oProfile = BxDolProfile::getInstance($iMember);
-                    if($oProfile && !($oProfile instanceof BxDolProfileUndefined))
-					   $aMembersVars[] = array('info' => $oProfile->getUnit(0, array('template' => 'unit_wo_info')));
-				}
-				$aTasksVars[] = array(
-					'id' => $aTask[$CNF['FIELD_ID']],
-					'title' => bx_process_output($aTask[$CNF['FIELD_TITLE']]),
-					'created' => bx_time_js($aTask[$CNF['FIELD_ADDED']]),
-					'class' => $aTask[$CNF['FIELD_COMPLETED']] == 1 ? 'completed' : 'uncompleted',
-					'due' => $aTask[$CNF['FIELD_DUEDATE']] > 0 ? bx_time_js($aTask[$CNF['FIELD_DUEDATE']]) : '',
-					'bx_repeat:members' => $aMembersVars,
-					'badges' => $this->serviceGetBadges($aTask[$CNF['FIELD_ID']], true),
-					'url' => bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aTask[$CNF['FIELD_ID']])),
-					'object' => $this->_oConfig->getJsObject('tasks'),
-                    'bx_if:allow_manage' => array(
-				        'condition' => $bAllowManage,
-				        'content' => array(
-                            'id' => $aTask[$CNF['FIELD_ID']],
-                            'object' => $this->_oConfig->getJsObject('tasks'),
-                            'checked' => $aTask[$CNF['FIELD_COMPLETED']] == 1 ? 'checked' : '',
-                        )
-			        ),
-                    'bx_if:deny_manage' => array(
-				        'condition' => !$bAllowManage,
-				        'content' => array(
-                            'id' => $aTask[$CNF['FIELD_ID']],
-                            'checked' => $aTask[$CNF['FIELD_COMPLETED']] == 1 ? 'checked' : '',
-                        )
-			        ),
-				);
-			}
-            
-			$sClass = $sCompleted = $sAll = "";
-			if (isset($aFilterValues[$aList[$CNF['FIELD_ID']]])){
-				$sClass = $aFilterValues[$aList[$CNF['FIELD_ID']]];
-				if ($sClass == 'completed')
-					$sCompleted= 'selected';
-				if ($sClass == 'all')
-					$sAll = 'selected';
-			}
-            
-			$aListsVars[] = array(
-               'bx_if:allow_edit_list' => array(
-				    'condition' => $bAllowAdd,
-				    'content' => array(
-                        'title' => $aList[$CNF['FIELD_TITLE']],
-                        'context_id' => $iContextId,
-                        'list_id' => $aList[$CNF['FIELD_ID']],
-                        'object' => $this->_oConfig->getJsObject('tasks'),
-                    )
-			    ),
-               'bx_if:allow_add' => array(
-				    'condition' => $bAllowAdd,
-				    'content' => array(
-                        'context_id' => $iContextId,
-                        'list_id' => $aList[$CNF['FIELD_ID']],
-                        'object' => $this->_oConfig->getJsObject('tasks'),
-                    )
-			    ),
-                'bx_if:allow_delete_list' => array(
-				    'condition' => $bAllowManage,
-				    'content' => array(
-                        'context_id' => $iContextId,
-                        'list_id' => $aList[$CNF['FIELD_ID']],
-                        'object' => $this->_oConfig->getJsObject('tasks'),
-                    )
-			    ),
-                'bx_if:deny_edit_list' => array(
-				    'condition' => !$bAllowAdd,
-				    'content' => array(
-                        'title' => $aList[$CNF['FIELD_TITLE']],
-                    )
-			    ),
-				'id' => $aList['id'],
-				'bx_repeat:tasks' =>  $aTasksVars,
-				'context_id' => $iContextId,
-				'list_id' => $aList[$CNF['FIELD_ID']],
-				'object' => $this->_oConfig->getJsObject('tasks'),
-				'class' => $sClass,
-				'completed' => $sCompleted,
-				'all' => $sAll,
-			);
-		}
-		
-		$aVars = array(
-			'bx_repeat:task_lists' => $aListsVars,
-			'bx_if:allow_add_list' => array(
-				'condition' => $bAllowAdd,
-				'content' => array(
-                    'context_id' => $iContextId,
-                    'object' => $this->_oConfig->getJsObject('tasks'),
-                )
-			),
-		);
-		
-		$this->_oTemplate->addJs(array(
-			'jquery-ui/jquery-ui.min.js',
-			'tasks.js',
-            'modules/base/general/js/|forms.js'
-    	));
-		
-		return $this->_oTemplate->getJsCode('tasks', array('t_confirm_block_deletion' => _t('_bx_tasks_confirm_tasklist_deletion'))) . $this->_oTemplate->parseHtmlByName('browse_tasks.html', $aVars);
+        return $this->_oTemplate->getEntriesList($iContextId);
     }
 	
     /**
-    * Common methods
-    */
+     * Common methods
+     */
     public function onExpired($iContentId)
     {
         $CNF = &$this->_oConfig->CNF;
@@ -706,24 +638,23 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         }
     }
     
-    function isAllowView($iContextId)
+    public function isAllowView($iContextId)
     {
-        if(!($oProfileContext = BxDolProfile::getInstance($iContextId)) || $oProfileContext->checkAllowedProfileView($iContextId) !== CHECK_ACTION_RESULT_ALLOWED)
+        if(!($oContext = BxDolProfile::getInstance($iContextId)) || $oContext->checkAllowedProfileView($iContextId) !== CHECK_ACTION_RESULT_ALLOWED)
             return false;
 
         return true;
     }
 
-    function isAllowAdd($iContextId)
+    public function isAllowAdd($iContextId)
     {
-        $oProfileContext = BxDolProfile::getInstance($iContextId);
-        $mixedResult = $oProfileContext->checkAllowedPostInProfile($iContextId);
-        if($mixedResult !== CHECK_ACTION_RESULT_ALLOWED)
+        if(!($oContext = BxDolProfile::getInstance($iContextId)) || $oContext->checkAllowedPostInProfile($iContextId) !== CHECK_ACTION_RESULT_ALLOWED)
             return false;
+
         return true;
     }
-    
-    function isAllowManageByContext($iContextId)
+
+    public function isAllowManageByContext($iContextId)
     {
         if(isAdmin())
             return true;
@@ -731,31 +662,47 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         $oProfileContext = BxDolProfile::getInstance($iContextId);
         if(BxDolService::call($oProfileContext->getModule(), 'is_admin', array($iContextId)))
             return true;
+        
+        return false;
     }
     
-    function isAllowManage($iContentId)
+    public function isAllowManage($mixedContent)
     {
         $CNF = &$this->_oConfig->CNF;
-        
-        $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
-        $bRv = $this->isAllowManageByContext(-$aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']]);
-        if ($bRv)
-            return $bRv;
-        
-        if ($aContentInfo[$CNF['FIELD_AUTHOR']] == bx_get_logged_profile_id())
+
+        $aContentInfo = !is_array($mixedContent) ? $this->_oDb->getContentInfoById((int)$mixedContent) : $mixedContent;
+        if($this->checkAllowedEdit($aContentInfo) === CHECK_ACTION_RESULT_ALLOWED)
             return true;
-       
-        $oConnection = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION']);
-        if($oConnection) {
-            $aProfileIds = $oConnection->getConnectedContent($iContentId);
-            if(!empty($aProfileIds) && is_array($aProfileIds)){
-                if (in_array(bx_get_logged_profile_id(), $aProfileIds))
-                    return true;
-            }
+
+        if($this->isAllowManageByContext(abs($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']])))
+            return true;
+
+        if(($oConnection = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION'])) !== false) {
+            $iLoggedId = bx_get_logged_profile_id();
+            $aProfileIds = $oConnection->getConnectedInitiators($aContentInfo[$CNF['FIELD_ID']]);
+            if(!empty($aProfileIds) && is_array($aProfileIds) && in_array($iLoggedId, $aProfileIds))
+                return true;
         }
 
         return false;
     }
+
+    /**
+     * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden. So make sure to make strict(===) checking.
+     */
+    public function checkAllowedManage ($aDataEntry, $isPerformAction = false)
+    {
+        return $this->isAllowManage($aDataEntry) ? CHECK_ACTION_RESULT_ALLOWED : _t('_sys_txt_access_denied');
+    }
+
+    public function isCompleted($iContentId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+
+        return (bool)$aContentInfo[$CNF['FIELD_COMPLETED']];
+    }
 }
 
 /** @} */

+ 3 - 3
modules/boonex/tasks/classes/BxTasksSearchResult.php

@@ -24,9 +24,9 @@ class BxTasksSearchResult extends BxBaseModTextSearchResult
             'searchFields' => array(),
             'restriction' => array(
                 'author' => array('value' => '', 'field' => 'author', 'operator' => '='),
-        		'featured' => array('value' => '', 'field' => 'featured', 'operator' => '<>'),
-        		'status' => array('value' => 'active', 'field' => 'status', 'operator' => '='),
-        		'statusAdmin' => array('value' => 'active', 'field' => 'status_admin', 'operator' => '='),
+                'featured' => array('value' => '', 'field' => 'featured', 'operator' => '<>'),
+                'status' => array('value' => 'active', 'field' => 'status', 'operator' => '='),
+                'statusAdmin' => array('value' => 'active', 'field' => 'status_admin', 'operator' => '='),
             ),
             'paginate' => array('perPage' => getParam('bx_tasks_per_page_browse'), 'start' => 0),
             'sorting' => 'last',

+ 139 - 0
modules/boonex/tasks/classes/BxTasksTemplate.php

@@ -36,6 +36,145 @@ class BxTasksTemplate extends BxBaseModTextTemplate
 
         return $this->parseHtmlByName($sTemplateName, $aVars);
     }
+
+    public function getEntriesList($iContextId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $oPermalinks = BxDolPermalinks::getInstance();
+        $oConnection = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION']);
+
+        $aTypes = BxDolFormQuery::getDataItems($CNF['OBJECT_PRE_LIST_TYPES']);
+        $aPriorities = BxDolFormQuery::getDataItems($CNF['OBJECT_PRE_LIST_PRIORITIES']);
+        $aStates = BxDolFormQuery::getDataItems($CNF['OBJECT_PRE_LIST_STATES']);
+
+        $aFilterValues = array();
+        if(isset($_COOKIE[$CNF['COOKIE_SETTING_KEY']]))
+            $aFilterValues = json_decode($_COOKIE[$CNF['COOKIE_SETTING_KEY']], true);
+
+        $_iContextId = abs($iContextId);
+
+        $oModule = $this->getModule();
+        $bAllowAdd = $oModule->isAllowAdd($_iContextId);
+        $bAllowManage = $oModule->isAllowManageByContext($_iContextId);
+
+        $aLists = $this->_oDb->getLists($iContextId);
+
+        $aListsVars = array();
+        foreach($aLists as $aList) {
+            $aTasks = $this->_oDb->getTasks($iContextId, $aList['id']);
+            $aTasksVars = array();
+            foreach($aTasks as $aTask) {
+                $aMembers = $oConnection->getConnectedInitiators($aTask[$CNF['FIELD_ID']]);
+
+                $aMembersVars = array();
+                foreach($aMembers as $iMember) {
+                    $oProfile = BxDolProfile::getInstance($iMember);
+                    if($oProfile && !($oProfile instanceof BxDolProfileUndefined))
+                        $aMembersVars[] = array('info' => $oProfile->getUnit(0, array('template' => 'unit_wo_info')));
+                }
+
+                $aTasksVars[] = array(
+                    'id' => $aTask[$CNF['FIELD_ID']],
+                    'title' => bx_process_output($aTask[$CNF['FIELD_TITLE']]),
+                    'created' => bx_time_js($aTask[$CNF['FIELD_ADDED']]),
+                    'class' => $aTask[$CNF['FIELD_COMPLETED']] == 1 ? 'completed' : 'uncompleted',
+                    'due' => $aTask[$CNF['FIELD_DUEDATE']] > 0 ? bx_time_js($aTask[$CNF['FIELD_DUEDATE']]) : '',
+                    'type' => $aTypes[$aTask[$CNF['FIELD_TYPE']]] ?? '',
+                    'priority' => $aPriorities[$aTask[$CNF['FIELD_PRIORITY']]] ?? '',
+                    'state' => $aStates[$aTask[$CNF['FIELD_STATE']]] ?? '',
+                    'bx_repeat:members' => $aMembersVars,
+                    'badges' => $oModule->serviceGetBadges($aTask[$CNF['FIELD_ID']], true),
+                    'url' => bx_absolute_url($oPermalinks->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aTask[$CNF['FIELD_ID']])),
+                    'object' => $this->_oConfig->getJsObject('tasks'),
+                    'bx_if:allow_manage' => array(
+                        'condition' => $bAllowManage,
+                        'content' => array(
+                            'id' => $aTask[$CNF['FIELD_ID']],
+                            'object' => $this->_oConfig->getJsObject('tasks'),
+                            'checked' => $aTask[$CNF['FIELD_COMPLETED']] == 1 ? 'checked' : '',
+                        )
+                    ),
+                    'bx_if:deny_manage' => array(
+                        'condition' => !$bAllowManage,
+                        'content' => array(
+                            'id' => $aTask[$CNF['FIELD_ID']],
+                            'checked' => $aTask[$CNF['FIELD_COMPLETED']] == 1 ? 'checked' : '',
+                        )
+                    ),
+                );
+            }
+
+            $sClass = $sCompleted = $sAll = "";
+            if (isset($aFilterValues[$aList[$CNF['FIELD_ID']]])){
+                $sClass = $aFilterValues[$aList[$CNF['FIELD_ID']]];
+                if ($sClass == 'completed')
+                    $sCompleted= 'selected';
+                if ($sClass == 'all')
+                    $sAll = 'selected';
+            }
+
+            $aListsVars[] = array(
+                'bx_if:allow_edit_list' => array(
+                    'condition' => $bAllowAdd,
+                    'content' => array(
+                        'title' => $aList[$CNF['FIELD_TITLE']],
+                        'context_id' => $iContextId,
+                        'list_id' => $aList[$CNF['FIELD_ID']],
+                        'object' => $this->_oConfig->getJsObject('tasks'),
+                    )
+                ),
+                'bx_if:allow_add' => array(
+                    'condition' => $bAllowAdd,
+                    'content' => array(
+                        'context_id' => $iContextId,
+                        'list_id' => $aList[$CNF['FIELD_ID']],
+                        'object' => $this->_oConfig->getJsObject('tasks'),
+                    )
+                ),
+                'bx_if:allow_delete_list' => array(
+                    'condition' => $bAllowManage,
+                    'content' => array(
+                        'context_id' => $iContextId,
+                        'list_id' => $aList[$CNF['FIELD_ID']],
+                        'object' => $this->_oConfig->getJsObject('tasks'),
+                    )
+                ),
+                'bx_if:deny_edit_list' => array(
+                    'condition' => !$bAllowAdd,
+                    'content' => array(
+                        'title' => $aList[$CNF['FIELD_TITLE']],
+                    )
+                ),
+                'id' => $aList['id'],
+                'bx_repeat:tasks' =>  $aTasksVars,
+                'context_id' => $iContextId,
+                'list_id' => $aList[$CNF['FIELD_ID']],
+                'object' => $this->_oConfig->getJsObject('tasks'),
+                'class' => $sClass,
+                'completed' => $sCompleted,
+                'all' => $sAll,
+            );
+        }
+
+        $this->addCssJs();
+        $this->addJs([
+            'jquery-ui/jquery-ui.min.js',
+            'tasks.js',
+            'modules/base/general/js/|forms.js'
+        ]);
+
+        return $this->getJsCode('tasks', ['t_confirm_block_deletion' => _t('_bx_tasks_confirm_tasklist_deletion')]) . $this->parseHtmlByName('browse_tasks.html', [
+            'bx_repeat:task_lists' => $aListsVars,
+            'bx_if:allow_add_list' => [
+                'condition' => $bAllowAdd,
+                'content' => [
+                    'context_id' => $iContextId,
+                    'object' => $this->_oConfig->getJsObject('tasks'),
+                ]
+            ],
+        ]);
+    }
 }
 
 /** @} */

+ 52 - 24
modules/boonex/tasks/install/langs/en.xml

@@ -17,6 +17,7 @@
     <string name="_bx_tasks_form_entry"><![CDATA[Tasks]]></string>
     <string name="_bx_tasks_form_entry_display_add"><![CDATA[Add Task]]></string>
     <string name="_bx_tasks_form_entry_display_edit"><![CDATA[Edit Task]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_state"><![CDATA[Edit Task's State]]></string>
     <string name="_bx_tasks_form_entry_display_delete"><![CDATA[Delete Task]]></string>
     <string name="_bx_tasks_form_entry_display_view"><![CDATA[View Task]]></string>
     <string name="_bx_tasks_form_entry_input_author"><![CDATA[Author]]></string>
@@ -30,9 +31,16 @@
     <string name="_bx_tasks_form_entry_input_do_cancel_edit"><![CDATA[Cancel]]></string>
     <string name="_bx_tasks_form_entry_input_sys_controls"><![CDATA[Controls]]></string>
     <string name="_bx_tasks_form_entry_input_sys_controls_edit"><![CDATA[Controls (Edit form)]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_controls_edit_popup"><![CDATA[Controls (Edit form in popup)]]></string>
     <string name="_bx_tasks_form_entry_input_sys_title"><![CDATA[Title]]></string>
     <string name="_bx_tasks_form_entry_input_title"><![CDATA[Title]]></string>
     <string name="_bx_tasks_form_entry_input_title_err"><![CDATA[Title is essential. Please, fill in this field]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_type"><![CDATA[Type]]></string>
+    <string name="_bx_tasks_form_entry_input_type"><![CDATA[Type]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_priority"><![CDATA[Priority]]></string>
+    <string name="_bx_tasks_form_entry_input_priority"><![CDATA[Priority]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_state"><![CDATA[State]]></string>
+    <string name="_bx_tasks_form_entry_input_state"><![CDATA[State]]></string>
     <string name="_bx_tasks_form_entry_input_sys_cat"><![CDATA[Category]]></string>
     <string name="_bx_tasks_form_entry_input_cat"><![CDATA[Category]]></string>
     <string name="_bx_tasks_form_entry_input_cat_err"><![CDATA[Please select category]]></string>
@@ -69,21 +77,21 @@
     <string name="_bx_tasks_form_entry_input_sys_allow_comments"><![CDATA[Allow comments]]></string>
     <string name="_bx_tasks_form_entry_input_allow_comments"><![CDATA[Allow comments]]></string>
 	
-	<string name="_bx_tasks_form_entry_input_sys_tasks_list"><![CDATA[Task list]]></string>
-	<string name="_bx_tasks_form_entry_input_tasks_list"><![CDATA[Task list]]></string>
-	<string name="_bx_tasks_form_profile_input_sys_initial_members"><![CDATA[Assign to]]></string>
-	<string name="_bx_tasks_form_profile_input_initial_members"><![CDATA[Assign to]]></string>
-	<string name="_bx_tasks_form_entry_input_sys_date_due_date"><![CDATA[Due date]]></string>
-	<string name="_bx_tasks_form_entry_input_date_due_date"><![CDATA[Due date]]></string>
-	
-	<string name="_bx_tasks_form_list_entry"><![CDATA[Tasklists]]></string>
-	<string name="_bx_tasks_form_list_entry_display_add"><![CDATA[Add Tasklist]]></string>
-	<string name="_bx_tasks_form_list_entry_display_edit"><![CDATA[Edit Tasklist]]></string>
-	<string name="_bx_tasks_form_list_entry_input_do_submit"><![CDATA[Submit]]></string>
-	<string name="_bx_tasks_form_list_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
-	<string name="_bx_tasks_form_list_entry_input_sys_title"><![CDATA[Title]]></string>
-	<string name="_bx_tasks_form_list_entry_input_title"><![CDATA[Title]]></string>
-	<string name="_bx_tasks_form_list_entry_input_title_err"><![CDATA[Title is essential. Please, fill in this field]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_tasks_list"><![CDATA[Task list]]></string>
+    <string name="_bx_tasks_form_entry_input_tasks_list"><![CDATA[Task list]]></string>
+    <string name="_bx_tasks_form_profile_input_sys_initial_members"><![CDATA[Assign to]]></string>
+    <string name="_bx_tasks_form_profile_input_initial_members"><![CDATA[Assign to]]></string>
+    <string name="_bx_tasks_form_entry_input_sys_date_due_date"><![CDATA[Due date]]></string>
+    <string name="_bx_tasks_form_entry_input_date_due_date"><![CDATA[Due date]]></string>
+
+    <string name="_bx_tasks_form_list_entry"><![CDATA[Tasklists]]></string>
+    <string name="_bx_tasks_form_list_entry_display_add"><![CDATA[Add Tasklist]]></string>
+    <string name="_bx_tasks_form_list_entry_display_edit"><![CDATA[Edit Tasklist]]></string>
+    <string name="_bx_tasks_form_list_entry_input_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_tasks_form_list_entry_input_sys_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_tasks_form_list_entry_input_sys_title"><![CDATA[Title]]></string>
+    <string name="_bx_tasks_form_list_entry_input_title"><![CDATA[Title]]></string>
+    <string name="_bx_tasks_form_list_entry_input_title_err"><![CDATA[Title is essential. Please, fill in this field]]></string>
 
     <string name="_bx_tasks_category_form_entry"><![CDATA[Categories Form]]></string>
     <string name="_bx_tasks_category_display_add"><![CDATA[Add category]]></string>
@@ -93,12 +101,12 @@
     <string name="_bx_tasks_category_form_entry_input_value_err"><![CDATA[Value is essential. Please, fill in this field]]></string>
     <string name="_bx_tasks_lmi_cpt_categories"><![CDATA[Categories]]></string>
 
-  <string name="_bx_tasks_acl_action_create_entry"><![CDATA[Create Task]]></string>
+    <string name="_bx_tasks_acl_action_create_entry"><![CDATA[Create Task]]></string>
     <string name="_bx_tasks_acl_action_delete_entry"><![CDATA[Delete Task]]></string>
     <string name="_bx_tasks_acl_action_view_entry"><![CDATA[View Task]]></string>
     <string name="_bx_tasks_acl_action_set_thumb"><![CDATA[Set Task Header Image]]></string>
     <string name="_bx_tasks_acl_action_edit_any_entry"><![CDATA[Edit Any Task]]></string>
-	<string name="_bx_tasks_acl_action_delete_any_entry"><![CDATA[Delete Any Task]]></string>
+    <string name="_bx_tasks_acl_action_delete_any_entry"><![CDATA[Delete Any Task]]></string>
 
     <string name="_bx_tasks_page_title_sys_create_entry"><![CDATA[New Task]]></string>
     <string name="_bx_tasks_page_title_create_entry"><![CDATA[New Task]]></string>
@@ -129,10 +137,10 @@
     <string name="_bx_tasks_page_block_title_recent_entries_view_full"><![CDATA[Latest Tasks (Full View)]]></string>
     <string name="_bx_tasks_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
     <string name="_bx_tasks_page_block_title_entry_author"><![CDATA[Author]]></string>
-	<string name="_bx_tasks_page_block_title_entry_assignments"><![CDATA[Assignments]]></string>
+    <string name="_bx_tasks_page_block_title_entry_assignments"><![CDATA[Assignments]]></string>
     <string name="_bx_tasks_page_block_title_entry_actions"><![CDATA[Actions]]></string>
     <string name="_bx_tasks_page_block_title_entry_comments"><![CDATA[Comments]]></string>
-	<string name="_bx_tasks_page_block_title_entry_reports"><![CDATA[Reports]]></string>
+    <string name="_bx_tasks_page_block_title_entry_reports"><![CDATA[Reports]]></string>
     <string name="_bx_tasks_page_block_title_entry_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
     <string name="_bx_tasks_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
     <string name="_bx_tasks_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
@@ -187,10 +195,10 @@
     <string name="_bx_tasks_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Tasks]]></string>
     <string name="_bx_tasks_page_block_title_sys_entry_context"><![CDATA[Posted in]]></string>
     <string name="_bx_tasks_page_block_title_entry_context"><![CDATA[Posted in]]></string>
-	<string name="_bx_tasks_page_block_title_sys_calendar_in_context"><![CDATA[Calendar]]></string>
-	<string name="_bx_tasks_page_block_title_calendar_in_context"><![CDATA[Calendar]]></string>
-	<string name="_bx_tasks_page_block_title_sys_calendar_of_author"><![CDATA[Calendar]]></string>
-	<string name="_bx_tasks_page_block_title_calendar_of_author"><![CDATA[Calendar]]></string>
+    <string name="_bx_tasks_page_block_title_sys_calendar_in_context"><![CDATA[Calendar]]></string>
+    <string name="_bx_tasks_page_block_title_calendar_in_context"><![CDATA[Calendar]]></string>
+    <string name="_bx_tasks_page_block_title_sys_calendar_of_author"><![CDATA[Calendar]]></string>
+    <string name="_bx_tasks_page_block_title_calendar_of_author"><![CDATA[Calendar]]></string>
 
     <string name="_bx_tasks_menu_title_entry_attachments"><![CDATA[Form Attachments]]></string>
     <string name="_bx_tasks_menu_set_title_entry_attachments"><![CDATA[Form Attachments]]></string>
@@ -217,6 +225,8 @@
     <string name="_bx_tasks_menu_item_title_create_entry"><![CDATA[Task]]></string>
     <string name="_bx_tasks_menu_item_title_system_edit_entry"><![CDATA[Edit]]></string>
     <string name="_bx_tasks_menu_item_title_edit_entry"><![CDATA[Edit]]></string>
+    <string name="_bx_tasks_menu_item_title_system_edit_entry_state"><![CDATA[Edit State]]></string>
+    <string name="_bx_tasks_menu_item_title_edit_entry_state"><![CDATA[Edit State]]></string>
     <string name="_bx_tasks_menu_item_title_system_delete_entry"><![CDATA[Delete]]></string>
     <string name="_bx_tasks_menu_item_title_delete_entry"><![CDATA[Delete]]></string>
     <string name="_bx_tasks_menu_item_title_system_view_entry"><![CDATA[View Task]]></string>
@@ -281,6 +291,24 @@
     <string name="_bx_tasks_search_extended"><![CDATA[Tasks Search]]></string>
     <string name="_bx_tasks_search_extended_cmts"><![CDATA[Tasks Comments Search]]></string>
 
+    <string name="_bx_tasks_pre_lists_types"><![CDATA[Types]]></string>
+    <string name="_bx_tasks_type_1"><![CDATA[Bug]]></string>
+    <string name="_bx_tasks_type_2"><![CDATA[Feature]]></string>
+    <string name="_bx_tasks_type_3"><![CDATA[Chore]]></string>
+    <string name="_bx_tasks_pre_lists_priorities"><![CDATA[Priorities]]></string>
+    <string name="_bx_tasks_priority_1"><![CDATA[Urgent]]></string>
+    <string name="_bx_tasks_priority_2"><![CDATA[High]]></string>
+    <string name="_bx_tasks_priority_3"><![CDATA[Medium]]></string>
+    <string name="_bx_tasks_priority_4"><![CDATA[Low]]></string>
+    <string name="_bx_tasks_priority_5"><![CDATA[No Priority]]></string>
+    <string name="_bx_tasks_pre_lists_states"><![CDATA[States]]></string>
+    <string name="_bx_tasks_state_1"><![CDATA[Backlog]]></string>
+    <string name="_bx_tasks_state_2"><![CDATA[Todo]]></string>
+    <string name="_bx_tasks_state_3"><![CDATA[In Progress]]></string>
+    <string name="_bx_tasks_state_4"><![CDATA[In Review]]></string>
+    <string name="_bx_tasks_state_5"><![CDATA[Cancelled]]></string>
+    <string name="_bx_tasks_state_6"><![CDATA[Duplicate]]></string>
+    <string name="_bx_tasks_state_7"><![CDATA[Done]]></string>
     <string name="_bx_tasks_pre_lists_cats"><![CDATA[Task categories]]></string>
     <string name="_bx_tasks_cat_Animals_Pets"><![CDATA[Animals & Pets]]></string>
     <string name="_bx_tasks_cat_Architecture"><![CDATA[Architecture]]></string>
@@ -329,7 +357,6 @@
     <string name="_bx_tasks_txt_processing_awaiting"><![CDATA[Scheduled for publishing as soon as video conversion is complete.]]></string>
     <string name="_bx_tasks_txt_processing_failed"><![CDATA[Task isn't published because video conversion failed, edit video to fix the issue.]]></string>
     <string name="_bx_tasks_txt_scheduled_awaiting"><![CDATA[Task publishing date is {date_publish_uf}]]></string>
-	
     <string name="_bx_tasks_txt_new_task_list"><![CDATA[New TaskList]]></string>
     <string name="_bx_tasks_txt_new_task"><![CDATA[New Task]]></string>
     <string name="_bx_tasks_txt_filter_all"><![CDATA[All Tasks]]></string>
@@ -338,6 +365,7 @@
     <string name="_bx_tasks_txt_err_cannot_perform_action"><![CDATA[Cannot perform action. Please report.]]></string>
     <string name="_bx_tasks_confirm_tasklist_deletion"><![CDATA[You will delete all tasks that are contained in this tasklist. Are you sure?]]></string>
   
+    <string name="_bx_tasks_txt_err_cannot_perform_action"><![CDATA[Cannot perform action. Please report.]]></string>
     <string name="_bx_tasks_txt_msg_status_hidden"><![CDATA[This task was hidden.]]></string>
     <string name="_bx_tasks_txt_msg_status_pending"><![CDATA[This task is pending approval.]]></string>
 

+ 9 - 7
modules/boonex/tasks/install/sql/enable.sql

@@ -111,9 +111,10 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 ('bx_tasks_view', 'bx_tasks', '_bx_tasks_menu_set_title_view_entry', 0);
 
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES 
-('bx_tasks_view', 'bx_tasks', 'edit-task', '_bx_tasks_menu_item_title_system_edit_entry', '_bx_tasks_menu_item_title_edit_entry', 'page.php?i=edit-task&id={content_id}', '', '', 'pencil-alt', '', 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:15:"is_allow_manage";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 1),
-('bx_tasks_view', 'bx_tasks', 'delete-task', '_bx_tasks_menu_item_title_system_delete_entry', '_bx_tasks_menu_item_title_delete_entry', 'page.php?i=delete-task&id={content_id}', '', '', 'remove', '', 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:15:"is_allow_manage";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 2),
-('bx_tasks_view', 'bx_tasks', 'approve', '_sys_menu_item_title_system_va_approve', '_sys_menu_item_title_va_approve', 'javascript:void(0)', 'javascript:bx_approve(this, ''{module_uri}'', {content_id});', '', 'check', '', 2147483647, '', 1, 0, 3);
+('bx_tasks_view', 'bx_tasks', 'edit-task', '_bx_tasks_menu_item_title_system_edit_entry', '_bx_tasks_menu_item_title_edit_entry', 'page.php?i=edit-task&id={content_id}', '', '', 'pencil-alt', '', 2147483647, '', 1, 0, 1),
+('bx_tasks_view', 'bx_tasks', 'edit-task-state', '_bx_tasks_menu_item_title_system_edit_entry_state', '_bx_tasks_menu_item_title_edit_entry_state', 'javascript:void(0)', 'javascript:{js_object}.processTaskEditState({content_id}, this)', '', 'pencil-alt', '', 2147483647, '', 1, 0, 2),
+('bx_tasks_view', 'bx_tasks', 'delete-task', '_bx_tasks_menu_item_title_system_delete_entry', '_bx_tasks_menu_item_title_delete_entry', 'page.php?i=delete-task&id={content_id}', '', '', 'remove', '', 2147483647, '', 1, 0, 3),
+('bx_tasks_view', 'bx_tasks', 'approve', '_sys_menu_item_title_system_va_approve', '_sys_menu_item_title_va_approve', 'javascript:void(0)', 'javascript:bx_approve(this, ''{module_uri}'', {content_id});', '', 'check', '', 2147483647, '', 1, 0, 4);
 
 
 -- MENU: all actions menu for view entry 
@@ -125,10 +126,11 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 ('bx_tasks_view_actions', 'bx_tasks', '_sys_menu_set_title_view_actions', 0);
 
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES 
-('bx_tasks_view_actions', 'bx_tasks', 'edit-task', '_bx_tasks_menu_item_title_system_edit_entry', '', '', '', '', '', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:15:"is_allow_manage";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 10),
-('bx_tasks_view_actions', 'bx_tasks', 'delete-task', '_bx_tasks_menu_item_title_system_delete_entry', '', '', '', '', '', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:15:"is_allow_manage";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 20),
-('bx_tasks_view_actions', 'bx_tasks', 'set-completed', '_bx_tasks_menu_item_title_system_set_completed', '_bx_tasks_menu_item_title_set_completed', 'javascript:void(0)', 'javascript:{js_object}.setCompletedByMenu({content_id}, 1, this);', '', 'check', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:12:"is_completed";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 30),
-('bx_tasks_view_actions', 'bx_tasks', 'set-uncompleted', '_bx_tasks_menu_item_title_system_set_uncompleted', '_bx_tasks_menu_item_title_set_uncompleted', 'javascript:void(0)', 'javascript:{js_object}.setCompletedByMenu({content_id}, 0, this);', '', 'circle', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:14:"is_uncompleted";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 35),
+('bx_tasks_view_actions', 'bx_tasks', 'edit-task', '_bx_tasks_menu_item_title_system_edit_entry', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 10),
+('bx_tasks_view_actions', 'bx_tasks', 'edit-task-state', '_bx_tasks_menu_item_title_system_edit_entry_state', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 12),
+('bx_tasks_view_actions', 'bx_tasks', 'delete-task', '_bx_tasks_menu_item_title_system_delete_entry', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 20),
+('bx_tasks_view_actions', 'bx_tasks', 'set-completed', '_bx_tasks_menu_item_title_system_set_completed', '_bx_tasks_menu_item_title_set_completed', 'javascript:void(0)', 'javascript:{js_object}.setCompletedByMenu({content_id}, 1, this);', '', 'check', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:22:"check_allowed_complete";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 30),
+('bx_tasks_view_actions', 'bx_tasks', 'set-uncompleted', '_bx_tasks_menu_item_title_system_set_uncompleted', '_bx_tasks_menu_item_title_set_uncompleted', 'javascript:void(0)', 'javascript:{js_object}.setCompletedByMenu({content_id}, 0, this);', '', 'circle', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:24:"check_allowed_uncomplete";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 35),
 ('bx_tasks_view_actions', 'bx_tasks', 'approve', '_sys_menu_item_title_system_va_approve', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 40),
 ('bx_tasks_view_actions', 'bx_tasks', 'set-badges', '_sys_menu_item_title_system_set_badges', '_sys_menu_item_title_set_badges', 'javascript:void(0)', 'bx_menu_popup(''sys_set_badges'', window, {}, {module: ''bx_tasks'', content_id: {content_id}});', '', 'check-circle', '', '', 0, 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:15:"is_allow_badges";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', 1, 0, 50),
 ('bx_tasks_view_actions', 'bx_tasks', 'comment', '_sys_menu_item_title_system_va_comment', '', '', '', '', '', '', '', 0, 2147483647, '', 0, 0, 200),

+ 78 - 29
modules/boonex/tasks/install/sql/install.sql

@@ -7,6 +7,9 @@ CREATE TABLE IF NOT EXISTS `bx_tasks_tasks` (
   `published` int(11) NOT NULL,
   `thumb` int(11) NOT NULL,
   `title` varchar(255) NOT NULL,
+  `type` int(11) NOT NULL default '0',
+  `priority` int(11) NOT NULL default '0',
+  `state` int(11) NOT NULL default '0',
   `cat` int(11) NOT NULL,
   `multicat` text NOT NULL,
   `text` mediumtext NOT NULL,
@@ -377,6 +380,7 @@ INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`,
 ('bx_tasks', 'bx_tasks_entry_add', 'bx_tasks', 0, '_bx_tasks_form_entry_display_add'),
 ('bx_tasks', 'bx_tasks_entry_delete', 'bx_tasks', 0, '_bx_tasks_form_entry_display_delete'),
 ('bx_tasks', 'bx_tasks_entry_edit', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit'),
+('bx_tasks', 'bx_tasks_entry_edit_state', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit_state'),
 ('bx_tasks', 'bx_tasks_entry_view', 'bx_tasks', 1, '_bx_tasks_form_entry_display_view');
 
 INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES 
@@ -389,12 +393,16 @@ INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `ch
 ('bx_tasks', 'bx_tasks', 'do_cancel_edit', '_bx_tasks_form_entry_input_do_cancel_edit', '', 0, 'button', '_bx_tasks_form_entry_input_sys_do_cancel_edit', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:41:"window.open(''{edit_cancel_url}'', ''_self'')";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 0, 0),
 ('bx_tasks', 'bx_tasks', 'controls', '', 'do_publish,do_cancel', 0, 'input_set', '_bx_tasks_form_entry_input_sys_controls', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'controls_edit', '', 'do_submit,do_cancel_edit', 0, 'input_set', '_bx_tasks_form_entry_input_sys_controls_edit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_tasks', 'bx_tasks', 'controls_edit_popup', '', 'do_submit,do_cancel', 0, 'input_set', '_bx_tasks_form_entry_input_sys_controls_edit_popup', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'covers', 'a:1:{i:0;s:14:"bx_tasks_html5";}', 'a:1:{s:14:"bx_tasks_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_tasks_form_entry_input_sys_covers', '_bx_tasks_form_entry_input_covers', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'pictures', 'a:1:{i:0;s:21:"bx_tasks_photos_html5";}', 'a:1:{s:21:"bx_tasks_photos_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_tasks_form_entry_input_sys_pictures', '_bx_tasks_form_entry_input_pictures', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'videos', 'a:2:{i:0;s:21:"bx_tasks_videos_html5";i:1;s:28:"bx_tasks_videos_record_video";}', 'a:2:{s:21:"bx_tasks_videos_html5";s:25:"_sys_uploader_html5_title";s:28:"bx_tasks_videos_record_video";s:32:"_sys_uploader_record_video_title";}', 0, 'files', '_bx_tasks_form_entry_input_sys_videos', '_bx_tasks_form_entry_input_videos', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'files', 'a:1:{i:0;s:20:"bx_tasks_files_html5";}', 'a:1:{s:20:"bx_tasks_files_html5";s:25:"_sys_uploader_html5_title";}', 0, 'files', '_bx_tasks_form_entry_input_sys_files', '_bx_tasks_form_entry_input_files', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'text', '', '', 0, 'textarea', '_bx_tasks_form_entry_input_sys_text', '_bx_tasks_form_entry_input_text', '', 0, 0, 2, '', '', '', '', '', '', 'XssHtml', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'title', '', '', 0, 'text', '_bx_tasks_form_entry_input_sys_title', '_bx_tasks_form_entry_input_title', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_tasks_form_entry_input_title_err', 'Xss', '', 1, 0),
+('bx_tasks', 'bx_tasks', 'type', '', '#!bx_tasks_types', 0, 'select', '_bx_tasks_form_entry_input_sys_type', '_bx_tasks_form_entry_input_type', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_tasks', 'bx_tasks', 'priority', '', '#!bx_tasks_priorities', 0, 'select', '_bx_tasks_form_entry_input_sys_priority', '_bx_tasks_form_entry_input_priority', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_tasks', 'bx_tasks', 'state', '', '#!bx_tasks_states', 0, 'select', '_bx_tasks_form_entry_input_sys_state', '_bx_tasks_form_entry_input_state', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'cat', '', '#!bx_tasks_cats', 0, 'select', '_bx_tasks_form_entry_input_sys_cat', '_bx_tasks_form_entry_input_cat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_tasks_form_entry_input_cat_err', 'Xss', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'multicat', '', '', 0, 'custom', '_bx_tasks_form_entry_input_sys_multicat', '_bx_tasks_form_entry_input_multicat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_tasks_form_entry_input_multicat_err', 'Xss', '', 1, 0),
 ('bx_tasks', 'bx_tasks', 'added', '', '', 0, 'datetime', '_bx_tasks_form_entry_input_sys_date_added', '_bx_tasks_form_entry_input_date_added', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
@@ -408,39 +416,47 @@ INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `ch
 ('bx_tasks', 'bx_tasks', 'allow_comments', '1', '', 1, 'switcher', '_bx_tasks_form_entry_input_sys_allow_comments', '_bx_tasks_form_entry_input_allow_comments', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0);
 
 INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
-('bx_tasks_entry_add', 'delete_confirm', 2147483647, 0, 1),
-('bx_tasks_entry_add', 'title', 2147483647, 1, 2),
-('bx_tasks_entry_add', 'text', 2147483647, 1, 3),
-('bx_tasks_entry_add', 'initial_members', 192, 1, 4),
-('bx_tasks_entry_add', 'due_date', 192, 1, 5),
-('bx_tasks_entry_add', 'controls', 2147483647, 1, 6),
-('bx_tasks_entry_add', 'do_publish', 2147483647, 1, 7),
-('bx_tasks_entry_add', 'do_cancel', 2147483647, 1, 8),
+('bx_tasks_entry_add', 'title', 2147483647, 1, 1),
+('bx_tasks_entry_add', 'text', 2147483647, 1, 2),
+('bx_tasks_entry_add', 'initial_members', 192, 1, 3),
+('bx_tasks_entry_add', 'due_date', 192, 1, 4),
+('bx_tasks_entry_add', 'type', 2147483647, 1, 5),
+('bx_tasks_entry_add', 'priority', 2147483647, 1, 6),
+('bx_tasks_entry_add', 'controls', 2147483647, 1, 7),
+('bx_tasks_entry_add', 'do_publish', 2147483647, 1, 8),
+('bx_tasks_entry_add', 'do_cancel', 2147483647, 1, 9),
 
 ('bx_tasks_entry_delete', 'delete_confirm', 2147483647, 1, 1),
 ('bx_tasks_entry_delete', 'do_submit', 2147483647, 1, 2),
 
-('bx_tasks_entry_edit', 'do_publish', 2147483647, 0, 1),
-('bx_tasks_entry_edit', 'delete_confirm', 2147483647, 0, 2),
-('bx_tasks_entry_edit', 'title', 2147483647, 1, 3),
-('bx_tasks_entry_edit', 'text', 2147483647, 1, 4),
-('bx_tasks_entry_edit', 'attachments', 2147483647, 1, 5),
-('bx_tasks_entry_edit', 'pictures', 2147483647, 1, 6),
-('bx_tasks_entry_edit', 'videos', 2147483647, 1, 7),
-('bx_tasks_entry_edit', 'files', 2147483647, 1, 8),
-('bx_tasks_entry_edit', 'allow_view_to', 2147483647, 1, 9),
-('bx_tasks_entry_edit', 'cf', 2147483647, 1, 10),
-('bx_tasks_entry_edit', 'tasks_list', 192, 1, 11),
-('bx_tasks_entry_edit', 'initial_members', 192, 1, 12),
-('bx_tasks_entry_edit', 'due_date', 192, 1, 13),
-('bx_tasks_entry_edit', 'controls_edit', 2147483647, 1, 14),
-('bx_tasks_entry_edit', 'do_submit', 2147483647, 1, 15),
-('bx_tasks_entry_edit', 'do_cancel_edit', 2147483647, 1, 16),
-
-('bx_tasks_entry_view', 'cat', 2147483647, 1, 1),
-('bx_tasks_entry_view', 'added', 2147483647, 1, 2),
-('bx_tasks_entry_view', 'changed', 2147483647, 1, 3),
-('bx_tasks_entry_view', 'due_date', 192, 1, 4);
+('bx_tasks_entry_edit', 'title', 2147483647, 1, 1),
+('bx_tasks_entry_edit', 'text', 2147483647, 1, 2),
+('bx_tasks_entry_edit', 'attachments', 2147483647, 1, 3),
+('bx_tasks_entry_edit', 'pictures', 2147483647, 1, 4),
+('bx_tasks_entry_edit', 'videos', 2147483647, 1, 5),
+('bx_tasks_entry_edit', 'files', 2147483647, 1, 6),
+('bx_tasks_entry_edit', 'allow_view_to', 2147483647, 1, 7),
+('bx_tasks_entry_edit', 'cf', 2147483647, 1, 8),
+('bx_tasks_entry_edit', 'initial_members', 192, 1, 8),
+('bx_tasks_entry_edit', 'due_date', 192, 1, 10),
+('bx_tasks_entry_edit', 'type', 2147483647, 1, 11),
+('bx_tasks_entry_edit', 'priority', 2147483647, 1, 12),
+('bx_tasks_entry_edit', 'controls_edit', 2147483647, 1, 13),
+('bx_tasks_entry_edit', 'do_submit', 2147483647, 1, 14),
+('bx_tasks_entry_edit', 'do_cancel_edit', 2147483647, 1, 15),
+
+('bx_tasks_entry_edit_state', 'state', 2147483647, 1, 1),
+('bx_tasks_entry_edit_state', 'controls_edit_popup', 2147483647, 1, 2),
+('bx_tasks_entry_edit_state', 'do_submit', 2147483647, 1, 3),
+('bx_tasks_entry_edit_state', 'do_cancel', 2147483647, 1, 4),
+
+('bx_tasks_entry_view', 'type', 2147483647, 1, 1),
+('bx_tasks_entry_view', 'priority', 2147483647, 1, 2),
+('bx_tasks_entry_view', 'cat', 2147483647, 1, 3),
+('bx_tasks_entry_view', 'added', 2147483647, 1, 4),
+('bx_tasks_entry_view', 'changed', 2147483647, 1, 5),
+('bx_tasks_entry_view', 'due_date', 192, 1, 6),
+('bx_tasks_entry_view', 'state', 2147483647, 1, 7);
 
 
 -- FORMS: entry (tasklist)
@@ -471,6 +487,39 @@ INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for
 
 
 -- PRE-VALUES
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_tasks_types', '_bx_tasks_pre_lists_types', 'bx_tasks', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_tasks_types', '', 0, '_sys_please_select', ''),
+('bx_tasks_types', '1', 1, '_bx_tasks_type_1', ''),
+('bx_tasks_types', '2', 2, '_bx_tasks_type_2', ''),
+('bx_tasks_types', '3', 3, '_bx_tasks_type_3', '');
+
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_tasks_priorities', '_bx_tasks_pre_lists_priorities', 'bx_tasks', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_tasks_priorities', '', 0, '_sys_please_select', ''),
+('bx_tasks_priorities', '1', 1, '_bx_tasks_priority_1', ''),
+('bx_tasks_priorities', '2', 2, '_bx_tasks_priority_2', ''),
+('bx_tasks_priorities', '3', 3, '_bx_tasks_priority_3', ''),
+('bx_tasks_priorities', '4', 4, '_bx_tasks_priority_4', ''),
+('bx_tasks_priorities', '5', 5, '_bx_tasks_priority_5', '');
+
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_tasks_states', '_bx_tasks_pre_lists_states', 'bx_tasks', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_tasks_states', '', 0, '_sys_please_select', ''),
+('bx_tasks_states', '1', 1, '_bx_tasks_state_1', ''),
+('bx_tasks_states', '2', 2, '_bx_tasks_state_2', ''),
+('bx_tasks_states', '3', 3, '_bx_tasks_state_3', ''),
+('bx_tasks_states', '4', 4, '_bx_tasks_state_4', ''),
+('bx_tasks_states', '5', 5, '_bx_tasks_state_5', ''),
+('bx_tasks_states', '6', 6, '_bx_tasks_state_6', ''),
+('bx_tasks_states', '7', 7, '_bx_tasks_state_7', '');
+
 INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
 ('bx_tasks_cats', '_bx_tasks_pre_lists_cats', 'bx_tasks', '0');
 

+ 51 - 36
modules/boonex/tasks/js/tasks.js

@@ -9,6 +9,7 @@
 
 function BxTasksView(oOptions) {
     this._oOptions = oOptions
+
     var $this = this;
     $(document).ready(function () {
         $this.init();
@@ -17,69 +18,83 @@ function BxTasksView(oOptions) {
 
 BxTasksView.prototype.init = function () {
     var $this = this;
-}
+};
 
 BxTasksView.prototype.setCompleted = function (iId, oObj) {
     var $this = this;
-	var iVal = ($(oObj).prop('checked') ? 1 : 0);
-	$this._setCompleted(iId, iVal);
-}
+    var iVal = ($(oObj).prop('checked') ? 1 : 0);
+    $this._setCompleted(iId, iVal);
+};
 
 BxTasksView.prototype.setCompletedByMenu = function (iId, iValue, oObj) {
     var $this = this;
-	$(oObj).addClass('bx-btn-disabled');
-	$this._setCompleted(iId, iValue);
-	document.location.reload(true);
-}
+    $(oObj).addClass('bx-btn-disabled');
+    $this._setCompleted(iId, iValue);
+    document.location.reload(true);
+};
 
 BxTasksView.prototype._setCompleted = function (iId, iValue) {
-	var $this = this;
-	$.getJSON($this._oOptions.sActionUri + 'set_completed/' + iId + '/' + iValue + '/', {}, function () { });
-}
+    $.getJSON(this._oOptions.sActionUrl + 'set_completed/' + iId + '/' + iValue + '/', {}, function() {});
+};
 	
 BxTasksView.prototype.processTaskList = function (iContextId, iId, obj) {
     var $this = this;
-	$(window).dolPopupAjax({
-	    url: $this._oOptions.sActionUri + 'process_task_list_form/' + iContextId + '/' + iId + '/',
+    $(window).dolPopupAjax({
+        url: $this._oOptions.sActionUrl + 'process_task_list_form/' + iContextId + '/' + iId + '/',
         closeOnOuterClick: false,
-		removeOnClose: true
+        removeOnClose: true
     });   
-}
+};
 
 BxTasksView.prototype.deleteTaskList = function (iId, iContextId, obj) {
     var $this = this;
     bx_confirm($this._oOptions.t_confirm_block_deletion, function () {
-        $.getJSON($this._oOptions.sActionUri + 'delete_task_list/' + iId + '/' + iContextId + '/', {}, function (oData) {
+        $.getJSON($this._oOptions.sActionUrl + 'delete_task_list/' + iId + '/' + iContextId + '/', {}, function (oData) {
             $this.reloadData(oData, iContextId)
         });
     });
-}
+};
 	
-BxTasksView.prototype.processTask = function (iContextId, iListId, obj) {
+BxTasksView.prototype.processTask = function (iContextId, iListId, oSource) {
     var $this = this;
-	$(window).dolPopupAjax({
-	    url: $this._oOptions.sActionUri + 'process_task_form/' + iContextId + '/' + iListId + '/',
+    $(window).dolPopupAjax({
+        url: $this._oOptions.sActionUrl + 'process_task_form/' + iContextId + '/' + iListId + '/',
         closeOnOuterClick: false,
         removeOnClose: true
-    });   
-}
+    });
+};
+
+BxTasksView.prototype.processTaskEditState = function (iContentId, oSource) {
+    var $this = this;
+    $(window).dolPopupAjax({
+        url: $this._oOptions.sActionUrl + 'process_task_form_edit_state/' + iContentId + '/',
+        closeOnOuterClick: false,
+        removeOnClose: true
+    });
+};
 
 BxTasksView.prototype.reloadData = function (oData, iContextId) {
-	$(".bx-popup-applied:visible").dolPopupHide();
-	var $this = this;
-	loadDynamicBlockAuto($('.bx-tasks-tasklist-add'), window.location.href )
-}
+    $(".bx-popup-applied:visible").dolPopupHide();
+
+    loadDynamicBlockAuto($('.bx-tasks-tasklist-add'), window.location.href )
+};
+
+BxTasksView.prototype.reload = function (oData) {
+    $(".bx-popup-applied:visible").dolPopupHide();
+
+    document.location = document.location;
+};
 
 BxTasksView.prototype.setFilter = function (iListId, object) {
-	var $this = this;
-	var val = $(object).val();
-	
-	$('#bx-tasks-tasklist-' + iListId).removeClass (function (index, className) {
+    var $this = this;
+    var val = $(object).val();
+
+    $('#bx-tasks-tasklist-' + iListId).removeClass (function (index, className) {
     	return (className.match (/(^|\s)bx-tasks-tasklist-filter-\S+/g) || []).join(' ');
-	})
-	if (val)
-		$('#bx-tasks-tasklist-' + iListId).addClass('bx-tasks-tasklist-filter-' + val);
-  	
-	$.getJSON($this._oOptions.sActionUri + 'setFilterValue/' + iListId + '/' + val + '/', function (oData) {});
-}
+    });
+
+    if(val)
+        $('#bx-tasks-tasklist-' + iListId).addClass('bx-tasks-tasklist-filter-' + val);
 
+    $.getJSON($this._oOptions.sActionUrl + 'setFilterValue/' + iListId + '/' + val + '/', function (oData) {});
+};

+ 7 - 5
modules/boonex/tasks/template/browse_tasks.html

@@ -31,7 +31,7 @@
             </div>
             <bx_repeat:tasks>
                 <div class="bx-def-padding-sec  bx-def-border-bottom  bx-tasks-task bx-tasks-task-__class__">
-                    <div class="bx-tasks-task-checkbox bx-def-padding-sec-right">
+                    <div class="bx-tasks-task-checkbox pr-2">
                         <bx_if:allow_manage>
                             <input id="checkbox__id__" type="checkbox" __checked__ class="promoted-input-checkbox" onclick="__object__.setCompleted(__id__, this)">
                         </bx_if:allow_manage>
@@ -41,10 +41,12 @@
                         <label for="checkbox__id__"></label>
                     </div>
 
-                    <a href="__url__" class="bx-def-padding-sec-right bx-tasks-task-name" title="__title__">__title__</a>
-
-                    <span class="bx-def-font-small bx-def-font-grayed bx-def-padding-sec-right">__created__</span>
-                    <span class="bx-def-font-small bx-task-due-date bx-def-padding-sec-right">__due__</span>
+                    <a href="__url__" class="bx-tasks-task-name pr-2" title="__title__">__title__</a>
+                    <span class="bx-def-font-small bx-def-font-grayed pr-2">__created__</span>
+                    <span class="bx-def-font-small bx-def-font-grayed pr-2">__type__</span>
+                    <span class="bx-def-font-small col-green1 pr-2">__priority__</span>
+                    <span class="bx-task-due-date bx-def-font-small col-red1 pr-2">__due__</span>
+                    <span class="bx-def-font-small bx-def-font-grayed pr-2">__state__</span>
                     __badges__
                     <div class="bx-tasks-members">
                         <bx_repeat:members>

+ 0 - 3
modules/boonex/tasks/template/css/main.css

@@ -13,9 +13,6 @@
 	max-width: calc(100% - 220px);
 }
 
-.bx-task-due-date {
-    color: red;
-}
 .bx-tasks-members .bx-base-pofile-unit-wo-info {
     width: 2rem;
     height: 2rem;