Bläddra i källkod

Ticket #5425 - Tasks: Functionality improvements. Stage 2.

AntonLV 3 månader sedan
förälder
incheckning
f5cf862076

+ 10 - 12
modules/boonex/russian/data/langs/bx_tasks/ru.xml

@@ -246,7 +246,7 @@
     <string name="_bx_tasks_page_title_view_entry_comments"><![CDATA[Активность в {title}]]></string>
     <string name="_bx_tasks_page_title_sys_entries_of_author"><![CDATA[Задания автора]]></string>
     <string name="_bx_tasks_page_title_entries_of_author"><![CDATA[Задания от {display_name}]]></string>
-    <string name="_bx_tasks_page_title_sys_entries_in_context"><![CDATA[Задания в контексте]]></string>
+    <string name="_bx_tasks_page_title_sys_entries_in_context"><![CDATA[Контекст: Задания]]></string>
     <string name="_bx_tasks_page_title_entries_in_context"><![CDATA[Задания в {display_name}]]></string>
     <string name="_bx_tasks_page_block_title_favorites_of_author"><![CDATA[Избранное <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_tasks_page_block_title_sys_favorites_of_author"><![CDATA[Избранное автора]]></string>
@@ -291,9 +291,9 @@
     <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_title_sys_entries_time_in_context"><![CDATA[Мое время в контексте]]></string>
+    <string name="_bx_tasks_page_title_sys_entries_time_in_context"><![CDATA[Контекст: Мое время]]></string>
     <string name="_bx_tasks_page_title_entries_time_in_context"><![CDATA[Мое время в {display_name}]]></string>
-    <string name="_bx_tasks_page_title_sys_entries_time_in_context_administration"><![CDATA[Всё время в контексте]]></string>
+    <string name="_bx_tasks_page_title_sys_entries_time_in_context_administration"><![CDATA[Контекст: Всё время]]></string>
     <string name="_bx_tasks_page_title_entries_time_in_context_administration"><![CDATA[Всё время в {display_name}]]></string>
     <string name="_bx_tasks_page_block_title_sys_menu_in_context"><![CDATA[Меню просмотра контекста]]></string>
     <string name="_bx_tasks_page_block_title_menu_in_context"><![CDATA[Меню]]></string>
@@ -301,11 +301,11 @@
     <string name="_bx_tasks_page_block_title_entries_time_in_context"><![CDATA[Мое время в <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_tasks_page_block_title_sys_entries_time_in_context_administration"><![CDATA[Всё время в контексте]]></string>
     <string name="_bx_tasks_page_block_title_entries_time_in_context_administration"><![CDATA[Всё время в <a href="{profile_link}">{display_name}</a>]]></string>
-    <string name="_bx_tasks_page_title_sys_context_pre_values"><![CDATA[Списки и значения в контексте]]></string>
-    <string name="_bx_tasks_page_title_context_pre_values"><![CDATA[Списки и значения]]></string>
-    <string name="_bx_tasks_page_block_title_system_context_pre_values"><![CDATA[Списки и значения]]></string>
-    <string name="_bx_tasks_page_block_title_context_pre_values"><![CDATA[Списки и значения]]></string>
-    <string name="_bx_tasks_page_title_sys_context_settings"><![CDATA[Настройки]]></string>
+    <string name="_bx_tasks_page_title_sys_context_pre_values"><![CDATA[Контекст: Свойства]]></string>
+    <string name="_bx_tasks_page_title_context_pre_values"><![CDATA[Свойства]]></string>
+    <string name="_bx_tasks_page_block_title_system_context_pre_values"><![CDATA[Свойства]]></string>
+    <string name="_bx_tasks_page_block_title_context_pre_values"><![CDATA[Свойства]]></string>
+    <string name="_bx_tasks_page_title_sys_context_settings"><![CDATA[Контекст: Настройки]]></string>
     <string name="_bx_tasks_page_title_context_settings"><![CDATA[Настройки]]></string>
     <string name="_bx_tasks_page_block_title_system_context_authorize"><![CDATA[Авторизовать GitHub]]></string>
     <string name="_bx_tasks_page_block_title_context_authorize"><![CDATA[Авторизовать GitHub]]></string>
@@ -388,10 +388,8 @@
     <string name="_bx_tasks_menu_item_title_view_context_time"><![CDATA[Моё время]]></string>
     <string name="_bx_tasks_menu_item_title_system_view_context_time_administration"><![CDATA[Всё время]]></string>
     <string name="_bx_tasks_menu_item_title_view_context_time_administration"><![CDATA[Всё время]]></string>
-    <string name="_bx_tasks_menu_title_manage_context_submenu"><![CDATA[Управление контекстом - Подменю]]></string>
-    <string name="_bx_tasks_menu_set_title_manage_context_submenu"><![CDATA[Управление контекстом - Подменю]]></string>
-    <string name="_bx_tasks_menu_item_title_system_manage_context_pre_values"><![CDATA[Списки и значения]]></string>
-    <string name="_bx_tasks_menu_item_title_manage_context_pre_values"><![CDATA[Списки и значения]]></string>
+    <string name="_bx_tasks_menu_item_title_system_manage_context_pre_values"><![CDATA[Свойства]]></string>
+    <string name="_bx_tasks_menu_item_title_manage_context_pre_values"><![CDATA[Свойства]]></string>
     <string name="_bx_tasks_menu_item_title_system_manage_context_settings"><![CDATA[Настройки]]></string>
     <string name="_bx_tasks_menu_item_title_manage_context_settings"><![CDATA[Настройки]]></string>
     <string name="_bx_tasks_menu_title_use_tools_submenu"><![CDATA[Инструменты - Подменю]]></string>

+ 0 - 1
modules/boonex/tasks/classes/BxTasksConfig.php

@@ -182,7 +182,6 @@ class BxTasksConfig extends BxBaseModTextConfig
             'OBJECT_MENU_SNIPPET_META' => 'bx_tasks_snippet_meta', // menu for snippet meta info
             'OBJECT_MENU_MANAGE_TOOLS' => 'bx_tasks_menu_manage_tools', //manage menu in content administration tools
             'OBJECT_MENU_SUBMENU_VIEW_CONTEXT' => 'bx_tasks_view_context_submenu',
-            'OBJECT_MENU_SUBMENU_MANAGE_CONTEXT' => 'bx_tasks_manage_context_submenu',
             'OBJECT_MENU_USE_TOOLS_SUBMENU' => 'bx_tasks_use_tools_submenu',
             'OBJECT_MENU_MANAGE_TOOLS_SUBMENU' => 'bx_tasks_manage_tools_submenu',
             'OBJECT_MENU_MANAGE_TOOLS' => 'bx_tasks_menu_manage_tools', //manage item menu in content administration tools

+ 18 - 7
modules/boonex/tasks/classes/BxTasksFormEntry.php

@@ -293,13 +293,16 @@ class BxTasksFormEntry extends BxBaseModTextFormEntry
         $CNF = &$this->_oModule->_oConfig->CNF;
         $oConn = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTION']);
 
-        $aMembers2 = $oConn->getConnectedInitiators($iContentId);
+        if($this->_bIsApi && is_string($aMembers))
+            $aMembers = explode(',', $aMembers);
+
+        $aMembersCurrent = $oConn->getConnectedInitiators($iContentId);
 
         $aMembersToAdd = [];
-        $aMembersToRemove = $aMembers2;
+        $aMembersToRemove = $aMembersCurrent;
         if (is_array($aMembers)){
-            $aMembersToAdd = array_diff($aMembers, $aMembers2);
-            $aMembersToRemove = array_diff($aMembers2, $aMembers);
+            $aMembersToAdd = array_diff($aMembers, $aMembersCurrent);
+            $aMembersToRemove = array_diff($aMembersCurrent, $aMembers);
         }    
 
         $aContentInfo = $this->_oModule->_oDb->getContentInfoById($iContentId);
@@ -349,9 +352,17 @@ class BxTasksFormEntry extends BxBaseModTextFormEntry
 
     protected function genCustomInputInitialMembers ($aInput)
     {
-        return $this->genCustomInputUsernamesSuggestions(array_merge($aInput , [
-            'ajax_get_suggestions' => BX_DOL_URL_ROOT . "modules/?r=" . $this->_oModule->_oConfig->getUri() . "/ajax_get_initial_members/" . $this->_iContextId
-        ]));
+        if($this->_bIsApi) {
+            $aInput['ajax_get_suggestions'] = $this->MODULE . '/get_initial_members&params[]=' . $this->_iContextId . '&params[]=';
+
+            $aInput['value_data'] = [];
+            foreach($aInput['value'] as $iProfileId)
+                $aInput['value_data'][] = BxDolProfile::getData($iProfileId);
+        }
+        else
+            $aInput['ajax_get_suggestions'] = BX_DOL_URL_ROOT . "modules/?r=" . $this->_oModule->_oConfig->getUri() . "/ajax_get_initial_members/" . $this->_iContextId;
+
+        return $this->genCustomInputUsernamesSuggestions($aInput);
     }
 }
 

+ 35 - 13
modules/boonex/tasks/classes/BxTasksGridPreValues.php

@@ -49,24 +49,31 @@ class BxTasksGridPreValues extends BxBaseModGeneralGrid
         ]);
     }
 
+    public function getFormCallBackUrlAPI($sAction, $iId = 0)
+    {
+         return '/api.php?r=system/perfom_action_api/TemplServiceGrid/&params[]=&o=' . $this->_sObject . '&a=' . $sAction . '&profile_id=' . $this->_iContextPid . '&id=' . $iId;
+    }
+
     public function performActionAdd()
     {
         if(!$this->_sList)
-            return echoJson(['msg' => _t('_bx_tasks_txt_err_empty_pre_list')]);
+            return $this->_getActionResult(($sMsg = _t('_bx_tasks_txt_err_empty_pre_list')) && $this->_bIsApi ? bx_api_get_msg($sMsg) : ['msg' => $sMsg]);
 
         $sAction = 'add';
 
         $oForm = $this->_getForm($sAction);
         $oForm->initChecker();
         if($oForm->isSubmittedAndValid()) {
-            if(($iId = (int)$oForm->insert(['context_id' => $this->_iContextPid, 'list' => $this->_sList])) != 0)
-                $aRes = ['grid' => $this->getCode(false), 'blink' => $iId];
-            else
-                $aRes = ['msg' => _t('_bx_tasks_txt_err_cannot_perform_action')];
+            $iId = (int)$oForm->insert(['context_id' => $this->_iContextPid, 'list' => $this->_sList]);                    
+            if(!$iId)
+                return $this->_getActionResult(['msg' => _t('_bx_tasks_txt_err_cannot_perform_action')]);
 
-            return echoJson($aRes);
+            return $this->_bIsApi ? [] : echoJson(['grid' => $this->getCode(false), 'blink' => $iId]);
         }
 
+        if($this->_bIsApi)
+            return $this->getFormBlockAPI($oForm, $sAction);
+
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('pre_values_popup') . $sAction, _t('_bx_tasks_popup_pv_title_' . $sAction), $this->_oModule->_oTemplate->parseHtmlByName('popup_pre_values.html', [
             'form_id' => $oForm->aFormAttrs['id'],
             'form' => $oForm->getCode(true),
@@ -81,21 +88,23 @@ class BxTasksGridPreValues extends BxBaseModGeneralGrid
     {
         $sAction = 'edit';
 
-        $aItem = $this->_oModule->_oDb->getPreValues(['sample' => 'id', 'id' => $this->_getIds()]);
+        $iItemId = $this->_getIds();
+        $aItem = $this->_oModule->_oDb->getPreValues(['sample' => 'id', 'id' => $iItemId]);
         if(!$aItem)
-            return echoJson([]);
+            return $this->_bIsApi ? [] : echoJson([]);
 
         $oForm = $this->_getForm($sAction, $aItem);
         $oForm->initChecker($aItem);
         if($oForm->isSubmittedAndValid()) {
-            if($oForm->update($aItem['id']) !== false)
-                $aRes = ['grid' => $this->getCode(false), 'blink' => $aItem['id']];
-            else
-                $aRes = ['msg' => _t('_bx_tasks_txt_err_cannot_perform_action')];
+            if(!$oForm->update($aItem['id']))
+                return $this->_getActionResult(['msg' => _t('_bx_tasks_txt_err_cannot_perform_action')]);
 
-            return echoJson($aRes);
+            return $this->_bIsApi ? [] : echoJson(['grid' => $this->getCode(false), 'blink' => $iItemId]);
         }
 
+        if($this->_bIsApi)
+            return $this->getFormBlockAPI($oForm, $sAction, $iItemId);
+
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oModule->_oConfig->getHtmlIds('pre_values_popup') . $sAction, _t('_bx_tasks_popup_pv_title_' . $sAction), $this->_oModule->_oTemplate->parseHtmlByName('popup_pre_values.html', [
             'form_id' => $oForm->aFormAttrs['id'],
             'form' => $oForm->getCode(true),
@@ -138,6 +147,19 @@ class BxTasksGridPreValues extends BxBaseModGeneralGrid
         return $sContent;
     }
 
+    protected function _getFilterControlsAPI($aFilters = [])
+    {
+        $aFilters = [
+            'list' => []
+        ];
+
+        $aLists = $this->_oModule->getPreLists();
+        foreach($aLists as $sKey => $sValue) 
+            $aFilters['list'][] = ['value' => $sKey, 'title' => $sValue];
+
+        return parent::_getFilterControlsAPI($aFilters);
+    }
+
     protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
     {
         if(!$this->_iContextPid || !$this->_sList)

+ 2 - 2
modules/boonex/tasks/classes/BxTasksMenuBrowse.php

@@ -80,9 +80,9 @@ class BxTasksMenuBrowse extends BxTemplMenu
             if(!$oContext)
                 continue;
 
-            $sUrl = $this->_oPermalink->permalink($CNF['URL_HOME'], [
+            $sUrl = bx_absolute_url(bx_append_url_params($this->_oPermalink->permalink($CNF['URL_HOME']), [
                 $this->_sParamName => $iId
-            ]);
+            ]));
 
             $aSubmenu[] = [
                 'id' => 'context-' . $iId, 

+ 14 - 17
modules/boonex/tasks/classes/BxTasksMenuManageContext.php → modules/boonex/tasks/classes/BxTasksMenuViewContext.php

@@ -2,35 +2,31 @@
 /**
  * Copyright (c) UNA, Inc - https://una.io
  * MIT License - https://opensource.org/licenses/MIT 
- * 
  * @defgroup    Tasks Tasks
  * @ingroup     UnaModules
  *
  * @{
  */
 
-class BxTasksMenuManageContext extends BxTemplMenu
+/**
+ * View entry menu
+ */
+class BxTasksMenuViewContext extends BxBaseModTextMenuView
 {
-    protected $_sModule;
-    protected $_oModule;
-
-    protected $_sParamName;
-    protected $_iParamValue;
+    protected $_iContextId;
 
     public function __construct($aObject, $oTemplate = false)
     {
-        $this->_sModule = 'bx_tasks';
-    	$this->_oModule = BxDolModule::getInstance($this->_sModule);
-
+        $this->MODULE = 'bx_tasks';
         parent::__construct($aObject, $oTemplate);
+    }
+
+    public function setContextId($iContextId)
+    {
+        $this->_iContextId = (int)$iContextId;
 
-        $this->_sParamName = 'context_pid';
-        if(($iParamValue = bx_get($this->_sParamName)) !== false)
-            $this->_iParamValue = (int)$iParamValue;
-        
         $this->addMarkers([
-            'js_object_view' => $this->_oModule->_oConfig->getJsObject('tasks'),
-            $this->_sParamName => $this->_iParamValue
+            'profile_id' => $this->_iContextId
         ]);
     }
 
@@ -41,8 +37,9 @@ class BxTasksMenuManageContext extends BxTemplMenu
 
         $bResult = true;
         switch ($a['name']) {
+            case 'tasks-context-time-administration':
             case 'tasks-context-values':
-                $bResult = $this->_oModule->isAllowManageByContext($this->_iParamValue);
+                $bResult = $this->_oModule->isAllowManageByContext($this->_iContextId);
                 break;
         }
 

+ 29 - 12
modules/boonex/tasks/classes/BxTasksModule.php

@@ -44,15 +44,9 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
     public function actionAjaxGetInitialMembers($iContextPid)
     {
         $sTerm = bx_get('term');
-        $sModule = $this->_oConfig->getName();
-
-        $a = bx_srv('system', 'profiles_search', [$sTerm, [
-            'module' => $sModule,
-            'search_params' => ['name' => $sModule . '_initial_members', 'context_pid' => $iContextPid]
-        ]], 'TemplServiceProfiles');
 
         header('Content-Type:text/javascript; charset=utf-8');
-        echo(json_encode($a));
+        echo json_encode($this->serviceGetInitialMembers($iContextPid, $sTerm));
     }
 
     public function actionSetCompleted($iContentId, $iCompleted)
@@ -72,7 +66,7 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
     {
         $mixedResult = $this->serviceCreateFilter($iContextId);
         if(is_array($mixedResult))
-            return echoJson($aRes);
+            return echoJson($mixedResult);
 
         $sContent = BxTemplFunctions::getInstance()->popupBox($this->_oConfig->getHtmlIds('filter_popup'), _t('_bx_tasks_popup_f_title_add'), $this->_oTemplate->parseHtmlByName('popup_form.html', [
             'form_id' => $mixedResult->getId(),
@@ -180,6 +174,9 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
     public function serviceGetSafeServices()
     {
         return array_merge(parent::serviceGetSafeServices(), [
+            'GetInitialMembers' => '',
+            'BrowseContext' => '',
+            'BrowseTasksByProfile' => '',
             'ProcessTaskListForm' => '',
             'DeleteTaskList' => '',
             'ProcessTaskForm' => '',
@@ -192,6 +189,26 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         ]);
     }
 
+    public function serviceGetInitialMembers($iContextPid, $sTerm)
+    {
+        if($this->_bIsApi) {
+            if(!$sTerm)
+                return [];
+
+            $aParams = json_decode($sTerm, true);
+            if(!isset($aParams['term']))
+                return [];
+
+            $sTerm = $aParams['term'];
+        }
+
+        $sModule = $this->_oConfig->getName();
+        return bx_srv('system', 'profiles_search', [$sTerm, [
+            'module' => $sModule,
+            'search_params' => ['name' => $sModule . '_initial_members', 'context_pid' => $iContextPid]
+        ]], 'TemplServiceProfiles');
+    }
+
     public function serviceProcessTaskListForm($iContextId, $iId)
     {
         if(!$this->isAllowAdd(abs($iContextId)))
@@ -627,7 +644,7 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         if(!$oMenu)
             return $this->_bIsApi ? [] : '';
 
-        $oMenu->addMarkers(['profile_id' => $iProfileId]);
+        $oMenu->setContextId($iProfileId);
         return $this->_bIsApi ? [bx_api_get_block('menu', [
             'title' => '', 
             'content' => $oMenu->getCodeAPI()
@@ -710,12 +727,12 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
             $iMessageTimer = $bResult ? 3 : 0;
         }
 
-        return $this->_bIsApi ? bx_api_get_block('form', $oForm->getCodeAPI(), [
+        return $this->_bIsApi ? [bx_api_get_block('form', $oForm->getCodeAPI(), [
             'ext' => [
                 'name' => $oForm->getName(),
-                'request' => ['url' => '/api.php?r=' . $this->MODULE . '/get_block_context_settings&profile_id=' . $iContextPid, 'immutable' => true]
+                'request' => ['url' => '/api.php?r=' . $this->_aModule['name'] . '/get_block_context_settings&profile_id=' . $iContextPid, 'immutable' => true]
             ]
-        ]) : (!empty($sMessageText) ? MsgBox(_t($sMessageText), $iMessageTimer) : '') . $oForm->getCode();
+        ])] : (!empty($sMessageText) ? MsgBox(_t($sMessageText), $iMessageTimer) : '') . $oForm->getCode();
     }
 
     public function serviceGetBlockManageTime($sType = 'common', $iContextPid = 0)

+ 10 - 15
modules/boonex/tasks/classes/BxTasksTemplate.php

@@ -312,26 +312,22 @@ class BxTasksTemplate extends BxBaseModTextTemplate
             if($bAllowAdd)
                 $aActions = array_merge($aActions, [[
                     'name' => 'add_list', 
+                    'title' => _t('_bx_tasks_txt_new_task_list'),
                     'type' => 'modal', 
                     'callback' => $this->MODULE . '/process_task_list_form&params[]=' . $iContextId . '&params[]=0',
                 ], [
                     'name' => 'add_task', 
+                    'title' => _t('_bx_tasks_txt_new_task'),
                     'type' => 'modal', 
                     'callback' => $this->MODULE . '/process_task_form&params[]=' . $iContextId . '&params[]=0',
                 ]]);
-            
-            if($bContext)
-                $aActions[] = [
-                    'name' => 'manage_settings', 
-                    'type' => 'menu', 
-                    'object' => $CNF['OBJECT_MENU_SUBMENU_MANAGE_CONTEXT']
-                ];
 
             return [
                 'context_id' => $iContextId,
                 'filters' => $mixedFilters,
                 'lists' => $aEntries,
-                'actions' => $aActions
+                'actions' => $aActions,
+                'request_url' => $this->MODULE . '/' . ($bContext ? 'browse_context' : 'browse_tasks_by_profile') . '&params[]=' . ($bContext ? $iContextId : $iLoggedId),
             ];
         }
 
@@ -367,12 +363,6 @@ class BxTasksTemplate extends BxBaseModTextTemplate
                     'object' => $sJsObject,
                 ]
             ],
-            'bx_if:allow_manage_settings' => [
-                'condition' => $bContext,
-                'content' => [
-                    'context_id' => $iContextId,
-                ]
-            ],
             'task_lists' => $aEntries,
             'js_code' => $this->getJsCode('tasks', ['t_confirm_block_deletion' => _t('_bx_tasks_txt_msg_confirm_tasklist_deletion')])
         ]);
@@ -465,8 +455,9 @@ class BxTasksTemplate extends BxBaseModTextTemplate
                 if($this->_bIsApi && $bTasksAllowManage)
                     $aActions[] = [
                         'name' => 'set_completed', 
+                        'title' => _t('_bx_tasks_menu_item_title_set_' . ($bCompleted ? 'uncompleted' : 'completed')),
                         'type' => 'callback', 
-                        'callback' => $this->MODULE . '/set_completed&params[]=' . $iTaskId . '&params[]=',
+                        'callback' => $this->MODULE . '/set_completed&params[]=' . $iTaskId . '&params[]=' . ($bCompleted ? 0 : 1),
                         'on_callback' => 'refresh'
                     ];
 
@@ -484,6 +475,7 @@ class BxTasksTemplate extends BxBaseModTextTemplate
                     'url' => $sUrl
                 ], $this->_bIsApi ? [
                     'url' => bx_api_get_relative_url($sUrl),
+                    'completed' => $bCompleted ? 1 : 0,
                     'members' => $aTmplVarsMembers,
                     'actions' => $aActions
                 ] : [
@@ -516,10 +508,12 @@ class BxTasksTemplate extends BxBaseModTextTemplate
                 if($bAllowAdd)
                     $aActions = array_merge($aActions, [[
                         'name' => 'edit_list', 
+                        'title' => _t('_bx_tasks_txt_edit_task_list'),
                         'type' => 'modal', 
                         'callback' => $this->MODULE . '/process_task_list_form&params[]=' . $iTasksContextId . '&params[]=' . $iListId,
                     ], [
                         'name' => 'add_task', 
+                        'title' => _t('_bx_tasks_txt_new_task'),
                         'type' => 'modal', 
                         'callback' => $this->MODULE . '/process_task_form&params[]=' . $iTasksContextId . '&params[]=' . $iListId,
                     ]]);
@@ -527,6 +521,7 @@ class BxTasksTemplate extends BxBaseModTextTemplate
                 if($bAllowManage)
                     $aActions[] = [
                         'name' => 'delete_list', 
+                        'title' => _t('_bx_tasks_txt_delete_task_list'),
                         'type' => 'callback', 
                         'callback' => $this->MODULE . '/delete_task_list&params[]=' . $iTasksContextId . '&params[]=' . $iListId,
                         'on_callback' => 'hide_row'

+ 9 - 6
modules/boonex/tasks/classes/BxTasksTime.php

@@ -22,10 +22,12 @@ class BxTasksTime extends BxTemplReport
         parent::__construct($sSystem, $iId, $iInit, $oTemplate);
 
         $this->_sModule = 'bx_tasks';
-    	$this->_oModule = BxDolModule::getInstance($this->_sModule);
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
 
         $this->_sUniqId = '';
 
+        $this->_aElementParamsApi = ['is_reported'];
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         $this->_oQuery = new BxTasksTimeQuery($this);
@@ -230,11 +232,12 @@ class BxTasksTime extends BxTemplReport
                 if($aTimer && ($iContentId = $aTimer['content_id'] ?? 0) && ($iProfileId = $aTimer['profile_id'] ?? 0)) {
                     $this->_oModule->serviceProcessTimer('clear', $iContentId, $iProfileId);
 
-                    $aResult = array_merge($aResult, [
-                        'label_title' => _t('_bx_tasks_txt_timer_log'),
-                        'eval' => $aResult['eval'] . '; ' . $this->_oModule->_oConfig->getJsObject('timer'). '.reload(this, ' . $iContentId . ', ' . $iProfileId . ');'
-                    ]);
-                } 
+                    if(!$this->_bApi)
+                        $aResult = array_merge($aResult, [
+                            'label_title' => _t('_bx_tasks_txt_timer_log'),
+                            'eval' => $aResult['eval'] . '; ' . $this->_oModule->_oConfig->getJsObject('timer'). '.reload(this, ' . $iContentId . ', ' . $iProfileId . ');'
+                        ]);
+                }
             }
 
             return $aResult;

+ 12 - 12
modules/boonex/tasks/install/langs/en.xml

@@ -246,7 +246,7 @@
     <string name="_bx_tasks_page_title_view_entry_comments"><![CDATA[Activity in {title}]]></string>
     <string name="_bx_tasks_page_title_sys_entries_of_author"><![CDATA[Tasks of author]]></string>
     <string name="_bx_tasks_page_title_entries_of_author"><![CDATA[Tasks by {display_name}]]></string>
-    <string name="_bx_tasks_page_title_sys_entries_in_context"><![CDATA[Tasks in context]]></string>
+    <string name="_bx_tasks_page_title_sys_entries_in_context"><![CDATA[Context: Tasks]]></string>
     <string name="_bx_tasks_page_title_entries_in_context"><![CDATA[Tasks in {display_name}]]></string>
     <string name="_bx_tasks_page_block_title_favorites_of_author"><![CDATA[Favorites by <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_tasks_page_block_title_sys_favorites_of_author"><![CDATA[Favorites of author]]></string>
@@ -291,9 +291,9 @@
     <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_title_sys_entries_time_in_context"><![CDATA[Time in context: My]]></string>
+    <string name="_bx_tasks_page_title_sys_entries_time_in_context"><![CDATA[Context: My time]]></string>
     <string name="_bx_tasks_page_title_entries_time_in_context"><![CDATA[My time in {display_name}]]></string>
-    <string name="_bx_tasks_page_title_sys_entries_time_in_context_administration"><![CDATA[Time in context: All]]></string>
+    <string name="_bx_tasks_page_title_sys_entries_time_in_context_administration"><![CDATA[Context: All time]]></string>
     <string name="_bx_tasks_page_title_entries_time_in_context_administration"><![CDATA[All time in {display_name}]]></string>
     <string name="_bx_tasks_page_block_title_sys_menu_in_context"><![CDATA[View context menu]]></string>
     <string name="_bx_tasks_page_block_title_menu_in_context"><![CDATA[Menu]]></string>
@@ -301,11 +301,11 @@
     <string name="_bx_tasks_page_block_title_entries_time_in_context"><![CDATA[My Time in <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_tasks_page_block_title_sys_entries_time_in_context_administration"><![CDATA[All time in context]]></string>
     <string name="_bx_tasks_page_block_title_entries_time_in_context_administration"><![CDATA[All Time in <a href="{profile_link}">{display_name}</a>]]></string>
-    <string name="_bx_tasks_page_title_sys_context_pre_values"><![CDATA[Lists and values in context]]></string>
-    <string name="_bx_tasks_page_title_context_pre_values"><![CDATA[Lists and values]]></string>
-    <string name="_bx_tasks_page_block_title_system_context_pre_values"><![CDATA[Lists and values]]></string>
-    <string name="_bx_tasks_page_block_title_context_pre_values"><![CDATA[Lists and values]]></string>
-    <string name="_bx_tasks_page_title_sys_context_settings"><![CDATA[Settings]]></string>
+    <string name="_bx_tasks_page_title_sys_context_pre_values"><![CDATA[Context: Properties]]></string>
+    <string name="_bx_tasks_page_title_context_pre_values"><![CDATA[Properties]]></string>
+    <string name="_bx_tasks_page_block_title_system_context_pre_values"><![CDATA[Properties]]></string>
+    <string name="_bx_tasks_page_block_title_context_pre_values"><![CDATA[Properties]]></string>
+    <string name="_bx_tasks_page_title_sys_context_settings"><![CDATA[Context: Settings]]></string>
     <string name="_bx_tasks_page_title_context_settings"><![CDATA[Settings]]></string>
     <string name="_bx_tasks_page_block_title_system_context_authorize"><![CDATA[Authorize GitHub]]></string>
     <string name="_bx_tasks_page_block_title_context_authorize"><![CDATA[Authorize GitHub]]></string>
@@ -390,10 +390,8 @@
     <string name="_bx_tasks_menu_item_title_view_context_time"><![CDATA[My Time]]></string>
     <string name="_bx_tasks_menu_item_title_system_view_context_time_administration"><![CDATA[All Time]]></string>
     <string name="_bx_tasks_menu_item_title_view_context_time_administration"><![CDATA[All Time]]></string>
-    <string name="_bx_tasks_menu_title_manage_context_submenu"><![CDATA[Manage Context Submenu]]></string>
-    <string name="_bx_tasks_menu_set_title_manage_context_submenu"><![CDATA[Manage Context Submenu]]></string>
-    <string name="_bx_tasks_menu_item_title_system_manage_context_pre_values"><![CDATA[Lists and values]]></string>
-    <string name="_bx_tasks_menu_item_title_manage_context_pre_values"><![CDATA[Lists and values]]></string>
+    <string name="_bx_tasks_menu_item_title_system_manage_context_pre_values"><![CDATA[Properties]]></string>
+    <string name="_bx_tasks_menu_item_title_manage_context_pre_values"><![CDATA[Properties]]></string>
     <string name="_bx_tasks_menu_item_title_system_manage_context_settings"><![CDATA[Settings]]></string>
     <string name="_bx_tasks_menu_item_title_manage_context_settings"><![CDATA[Settings]]></string>
     <string name="_bx_tasks_menu_title_use_tools_submenu"><![CDATA[Usage Tools Submenu]]></string>
@@ -561,6 +559,8 @@
     <string name="_bx_tasks_txt_list_title"><![CDATA[{0} ({1})]]></string>
     <string name="_bx_tasks_txt_list_inbox"><![CDATA[Inbox]]></string>
     <string name="_bx_tasks_txt_new_task_list"><![CDATA[New Task List]]></string>
+    <string name="_bx_tasks_txt_edit_task_list"><![CDATA[Edit Task List]]></string>
+    <string name="_bx_tasks_txt_delete_task_list"><![CDATA[Delete Task List]]></string>
     <string name="_bx_tasks_txt_new_task"><![CDATA[New Task]]></string>
     <string name="_bx_tasks_txt_total"><![CDATA[Total: {0}]]></string>
     <string name="_bx_tasks_txt_estimate"><![CDATA[Estimate: {0}]]></string>

+ 1 - 1
modules/boonex/tasks/install/sql/disable.sql

@@ -13,7 +13,7 @@ DELETE FROM `sys_pages_blocks` WHERE `module` = 'bx_tasks' OR `object` IN('bx_ta
 -- MENU
 DELETE FROM `sys_objects_menu` WHERE `module` = 'bx_tasks';
 DELETE FROM `sys_menu_sets` WHERE `module` = 'bx_tasks';
-DELETE FROM `sys_menu_items` WHERE `module` = 'bx_tasks' OR `set_name` IN('bx_tasks_create_task_attachments', 'bx_tasks_view', 'bx_tasks_view_actions', 'bx_tasks_view_submenu', 'bx_tasks_view_context_submenu', 'bx_tasks_manage_context_submenu', 'bx_tasks_use_tools_submenu', 'bx_tasks_manage_tools_submenu', 'bx_tasks_menu_manage_tools', 'bx_tasks_browse');
+DELETE FROM `sys_menu_items` WHERE `module` = 'bx_tasks' OR `set_name` IN('bx_tasks_create_task_attachments', 'bx_tasks_view', 'bx_tasks_view_actions', 'bx_tasks_view_submenu', 'bx_tasks_view_context_submenu', 'bx_tasks_use_tools_submenu', 'bx_tasks_manage_tools_submenu', 'bx_tasks_menu_manage_tools', 'bx_tasks_browse');
 
 -- PRIVACY 
 DELETE FROM `sys_objects_privacy` WHERE `object` = 'bx_tasks_allow_view_to';

+ 13 - 20
modules/boonex/tasks/install/sql/enable.sql

@@ -112,18 +112,20 @@ INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `t
 
 -- PAGE: pre lists and values in context
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
-('bx_tasks_context_pre_values', '_bx_tasks_page_title_sys_context_pre_values', '_bx_tasks_page_title_context_pre_values', 'bx_tasks', 5, 2147483647, 1, 'tasks-context-values', 'page.php?i=tasks-context-values', '', '', '', 0, 1, 0, 'BxTasksPageAuthor', 'modules/boonex/tasks/classes/BxTasksPageAuthor.php');
+('bx_tasks_context_pre_values', '_bx_tasks_page_title_sys_context_pre_values', '_bx_tasks_page_title_context_pre_values', 'bx_tasks', 13, 2147483647, 1, 'tasks-context-values', 'page.php?i=tasks-context-values', '', '', '', 0, 1, 0, 'BxTasksPageAuthor', 'modules/boonex/tasks/classes/BxTasksPageAuthor.php');
 
-INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
-('bx_tasks_context_pre_values', 1, 'bx_tasks', '_bx_tasks_page_block_title_system_context_pre_values', '_bx_tasks_page_block_title_context_pre_values', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:28:"get_block_context_pre_values";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 1, 0);
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_tasks_context_pre_values', 2, 'bx_tasks', '_bx_tasks_page_block_title_sys_menu_in_context', '_bx_tasks_page_block_title_menu_in_context', 13, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:22:"get_block_menu_context";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1, 1),
+('bx_tasks_context_pre_values', 3, 'bx_tasks', '_bx_tasks_page_block_title_system_context_pre_values', '_bx_tasks_page_block_title_context_pre_values', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:28:"get_block_context_pre_values";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1, 1);
 
 -- PAGE: context settings
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
-('bx_tasks_context_settings', '_bx_tasks_page_title_sys_context_settings', '_bx_tasks_page_title_context_settings', 'bx_tasks', 5, 2147483647, 1, 'tasks-context-settings', 'page.php?i=tasks-context-settings', '', '', '', 0, 1, 0, 'BxTasksPageAuthor', 'modules/boonex/tasks/classes/BxTasksPageAuthor.php');
+('bx_tasks_context_settings', '_bx_tasks_page_title_sys_context_settings', '_bx_tasks_page_title_context_settings', 'bx_tasks', 13, 2147483647, 1, 'tasks-context-settings', 'page.php?i=tasks-context-settings', '', '', '', 0, 1, 0, 'BxTasksPageAuthor', 'modules/boonex/tasks/classes/BxTasksPageAuthor.php');
 
-INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
-('bx_tasks_context_settings', 1, 'bx_tasks', '_bx_tasks_page_block_title_system_context_settings', '_bx_tasks_page_block_title_context_settings', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:26:"get_block_context_settings";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1),
-('bx_tasks_context_settings', 1, 'bx_tasks', '_bx_tasks_page_block_title_system_context_authorize', '_bx_tasks_page_block_title_context_authorize', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:27:"get_block_context_authorize";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 2);
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_tasks_context_settings', 2, 'bx_tasks', '_bx_tasks_page_block_title_sys_menu_in_context', '_bx_tasks_page_block_title_menu_in_context', 13, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:22:"get_block_menu_context";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1, 1),
+('bx_tasks_context_settings', 3, 'bx_tasks', '_bx_tasks_page_block_title_system_context_settings', '_bx_tasks_page_block_title_context_settings', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:26:"get_block_context_settings";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1, 1),
+('bx_tasks_context_settings', 3, 'bx_tasks', '_bx_tasks_page_block_title_system_context_authorize', '_bx_tasks_page_block_title_context_authorize', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:27:"get_block_context_authorize";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1, 2);
 
 -- PAGE: manage own entries
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
@@ -243,7 +245,7 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 
 -- MENU: context sub-menu
 INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
-('bx_tasks_view_context_submenu', '_bx_tasks_menu_title_view_context_submenu', 'bx_tasks_view_context_submenu', 'bx_tasks', 6, 0, 1, 'BxTasksMenuView', 'modules/boonex/tasks/classes/BxTasksMenuView.php');
+('bx_tasks_view_context_submenu', '_bx_tasks_menu_title_view_context_submenu', 'bx_tasks_view_context_submenu', 'bx_tasks', 6, 0, 1, 'BxTasksMenuViewContext', 'modules/boonex/tasks/classes/BxTasksMenuViewContext.php');
 
 INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
 ('bx_tasks_view_context_submenu', 'bx_tasks', '_bx_tasks_menu_set_title_view_context_submenu', 0);
@@ -251,18 +253,9 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 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_context_submenu', 'bx_tasks', 'tasks-context', '_bx_tasks_menu_item_title_system_view_context_entries', '_bx_tasks_menu_item_title_view_context_entries', 'page.php?i=tasks-context&profile_id={profile_id}', '', '', '', '', 2147483647, '', 1, 0, 1),
 ('bx_tasks_view_context_submenu', 'bx_tasks', 'tasks-context-time', '_bx_tasks_menu_item_title_system_view_context_time', '_bx_tasks_menu_item_title_view_context_time', 'page.php?i=tasks-context-time&profile_id={profile_id}', '', '', '', '', 2147483647, '', 1, 0, 2),
-('bx_tasks_view_context_submenu', 'bx_tasks', 'tasks-context-time-administration', '_bx_tasks_menu_item_title_system_view_context_time_administration', '_bx_tasks_menu_item_title_view_context_time_administration', 'page.php?i=tasks-context-time-administration&profile_id={profile_id}', '', '', '', '', 2147483647, 'a:3:{s:6:"module";s:8:"bx_tasks";s:6:"method";s:31:"check_allowed_manage_in_context";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 3);
-
--- MENU: manage context sub-menu
-INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
-('bx_tasks_manage_context_submenu', '_bx_tasks_menu_title_manage_context_submenu', 'bx_tasks_manage_context_submenu', 'bx_tasks', 6, 0, 1, 'BxTasksMenuManageContext', 'modules/boonex/tasks/classes/BxTasksMenuManageContext.php');
-
-INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
-('bx_tasks_manage_context_submenu', 'bx_tasks', '_bx_tasks_menu_set_title_manage_context_submenu', 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_manage_context_submenu', 'bx_tasks', 'tasks-context-values', '_bx_tasks_menu_item_title_system_manage_context_pre_values', '_bx_tasks_menu_item_title_manage_context_pre_values', 'page.php?i=tasks-context-values&profile_id={context_pid}', '', '', '', '', 2147483647, '', 1, 0, 1),
-('bx_tasks_manage_context_submenu', 'bx_tasks', 'tasks-context-settings', '_bx_tasks_menu_item_title_system_manage_context_settings', '_bx_tasks_menu_item_title_manage_context_settings', 'page.php?i=tasks-context-settings&profile_id={context_pid}', '', '', '', '', 2147483647, '', 1, 0, 2);
+('bx_tasks_view_context_submenu', 'bx_tasks', 'tasks-context-time-administration', '_bx_tasks_menu_item_title_system_view_context_time_administration', '_bx_tasks_menu_item_title_view_context_time_administration', 'page.php?i=tasks-context-time-administration&profile_id={profile_id}', '', '', '', '', 2147483647, '', 1, 0, 3),
+('bx_tasks_view_context_submenu', 'bx_tasks', 'tasks-context-values', '_bx_tasks_menu_item_title_system_manage_context_pre_values', '_bx_tasks_menu_item_title_manage_context_pre_values', 'page.php?i=tasks-context-values&profile_id={profile_id}', '', '', '', '', 2147483647, '', 1, 0, 4),
+('bx_tasks_view_context_submenu', 'bx_tasks', 'tasks-context-settings', '_bx_tasks_menu_item_title_system_manage_context_settings', '_bx_tasks_menu_item_title_manage_context_settings', 'page.php?i=tasks-context-settings&profile_id={profile_id}', '', '', '', '', 2147483647, '', 1, 0, 5);
 
 -- MENU: use tools submenu
 INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 

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

@@ -18,11 +18,6 @@
                 <bx_text:_bx_tasks_txt_new_task />
             </a>
         </bx_if:allow_add_task>
-        <bx_if:allow_manage_settings>
-            <a class="bx-btn bx-btn-small bx-def-margin-sec-right bx-tasks-tasklist-manage" href="javascript:void(0);" onclick="bx_menu_popup('bx_tasks_manage_context_submenu', this, {}, {context_pid: __context_id__});">
-                <bx_image_auto:cog />
-            </a>
-        </bx_if:allow_manage_settings>
     </span>
 </div>
 __task_lists__