Просмотр исходного кода

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

AntonLV 6 месяцев назад
Родитель
Сommit
fd60906b85

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

@@ -100,6 +100,16 @@
     <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_context"><![CDATA[Контекст]]></string>
+    <string name="_bx_tasks_form_display_context_edit"><![CDATA[Редактировать контекст]]></string>
+    <string name="_bx_tasks_form_context_input_sys_repository"><![CDATA[Репозиторий]]></string>
+    <string name="_bx_tasks_form_context_input_repository"><![CDATA[Репозиторий]]></string>
+    <string name="_bx_tasks_form_context_input_sys_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_tasks_form_context_input_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_tasks_form_context_input_sys_do_cancel"><![CDATA[Отменить]]></string>
+    <string name="_bx_tasks_form_context_input_do_cancel"><![CDATA[Отменить]]></string>
+    <string name="_bx_tasks_form_context_input_sys_controls"><![CDATA[Элементы управления]]></string>
+
     <string name="_bx_tasks_form_time"><![CDATA[Время]]></string>
     <string name="_bx_tasks_form_display_time_add"><![CDATA[Добавить время]]></string>
     <string name="_bx_tasks_form_display_time_edit"><![CDATA[Редактировать время]]></string>
@@ -475,7 +485,8 @@
     <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_list"><![CDATA[Новый список заданий]]></string>
+    <string name="_bx_tasks_txt_new_settings"><![CDATA[Настройки]]></string>
     <string name="_bx_tasks_txt_new_task"><![CDATA[Новое Задание]]></string>
     <string name="_bx_tasks_txt_total"><![CDATA[Потрачено времени: {0}]]></string>
     <string name="_bx_tasks_txt_estimate"><![CDATA[Выделено времени: {0}]]></string>

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

@@ -34,6 +34,7 @@ class BxTasksConfig extends BxBaseModTextConfig
             // database tables
             'TABLE_ENTRIES' => $aModule['db_prefix'] . 'tasks',
             'TABLE_LISTS' => $aModule['db_prefix'] . 'lists',
+            'TABLE_CONTEXTS' => $aModule['db_prefix'] . 'contexts',
             'TABLE_ASSIGNMENTS' => $aModule['db_prefix'] . 'assignments',
             'TABLE_FILTERS' => $aModule['db_prefix'] . 'filters',
             'TABLE_TIME' => $aModule['db_prefix'] . 'time',
@@ -153,6 +154,8 @@ class BxTasksConfig extends BxBaseModTextConfig
             '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_FORM_CONTEXT' => 'bx_tasks_context',
+            'OBJECT_FORM_CONTEXT_DISPLAY_EDIT' => 'bx_tasks_context_edit',
             'OBJECT_FORM_TIME' => 'bx_tasks_time',
             'OBJECT_FORM_TIME_DISPLAY_ADD' => 'bx_tasks_time_add',
             'OBJECT_FORM_TIME_DISPLAY_EDIT' => 'bx_tasks_time_edit',

+ 31 - 0
modules/boonex/tasks/classes/BxTasksDb.php

@@ -24,6 +24,37 @@ class BxTasksDb extends BxBaseModTextDb
         ];
     }
 
+    public function getContexts($aParams = []) 
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aMethod = ['name' => 'getAll', 'params' => [0 => 'query']];
+        $sSelectClause = '`tc`.*';
+        $sJoinClause = $sWhereClause = $sOrderClause = '';
+
+        if(!empty($aParams))
+            switch($aParams['sample']) {
+                case 'id':
+                    $aMethod['name'] = 'getRow';
+                    $aMethod['params'][1] = [
+                        'id' => $aParams['id']
+                    ];
+
+                    $sWhereClause = "AND `tc`.`id` = :id";
+                    break;
+            }
+
+        if(!empty($sOrderClause))
+            $sOrderClause = "ORDER BY " . $sOrderClause;
+
+        $aMethod['params'][0] = "SELECT 
+                " . $sSelectClause . " 
+            FROM `" . $CNF['TABLE_CONTEXTS'] . "` AS `tc` " . $sJoinClause . " 
+            WHERE 1 " . $sWhereClause . " " . $sOrderClause;
+
+        return call_user_func_array([$this, $aMethod['name']], $aMethod['params']);
+    }
+
     public function getLists ($iContextId = 0)
     {
         $CNF = &$this->_oConfig->CNF;

+ 25 - 0
modules/boonex/tasks/classes/BxTasksFormContext.php

@@ -0,0 +1,25 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT 
+ * @defgroup    Tasks Tasks
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxTasksFormContext extends BxTemplFormView
+{
+    protected $_sModule;
+    protected $_oModule;
+
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_tasks';
+    	$this->_oModule = BxDolModule::getInstance($this->_sModule);
+
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 41 - 1
modules/boonex/tasks/classes/BxTasksModule.php

@@ -83,9 +83,49 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         ]);
     }
 
+    public function actionProcessContextForm($iContextId)
+    {
+        $_iContextId = abs($iContextId);
+        if(!$this->isAllowManageByContext($_iContextId))
+            return;
+
+        $CNF = &$this->_oConfig->CNF;
+
+        $aContext = $this->_oDb->getContexts(['sample' => 'id', 'id' => $_iContextId]);
+        $bContext = !empty($aContext) && is_array($aContext);
+
+        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_CONTEXT'], $CNF['OBJECT_FORM_CONTEXT_DISPLAY_EDIT']);
+        $oForm->setAction(BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'process_context_form/' . $iContextId . '/');      
+        $oForm->initChecker($aContext);
+        if($oForm->isSubmittedAndValid()) {
+            if(!$bContext)
+                $oForm->insert(['id' => $_iContextId]);
+            else
+                $oForm->update($_iContextId);
+
+            echoJson([
+                'eval' => $this->_oConfig->getJsObject('tasks') . '.hidePopup(oData, ' . $iContextId . ')',
+            ]);
+        }
+        else {	
+            $sContent = $this->_oTemplate->parseHtmlByName('popup_form.html', [
+                'form_id' => $oForm->getId(),
+                'form' => $oForm->getCode(true)
+            ]);
+
+            if($oForm->isSubmitted()) 
+                return echoJson([
+                    'form' => $sContent, 
+                    'form_id' => $oForm->getId()
+                ]);
+
+            echo $sContent;
+        }
+    }
+
     public function actionProcessTaskListForm($iContextId, $iId)
     {
-        if (!$this->isAllowAdd(-$iContextId))
+        if (!$this->isAllowAdd(abs($iContextId)))
             return;
 
         $CNF = &$this->_oConfig->CNF;

+ 11 - 1
modules/boonex/tasks/classes/BxTasksTemplate.php

@@ -241,7 +241,10 @@ class BxTasksTemplate extends BxBaseModTextTemplate
         $sJsObject = $this->_oConfig->getJsObject('tasks');
 
         $oModule = $this->getModule();
-        $bAllowAdd = $oModule->isAllowAdd(abs($iContextId));
+
+        $_iContextId = abs($iContextId);
+        $bAllowAdd = $oModule->isAllowAdd($_iContextId);
+        $bAllowManage = $oModule->isAllowManageByContext($_iContextId);
 
         $aTmplVarsFilterItems = [];
 
@@ -284,6 +287,13 @@ class BxTasksTemplate extends BxBaseModTextTemplate
                     'object' => $sJsObject,
                 ]
             ],
+            'bx_if:allow_manage_settings' => [
+                'condition' => $bAllowManage,
+                'content' => [
+                    'context_id' => $iContextId,
+                    'object' => $sJsObject,
+                ]
+            ],
             'tasks' => $this->getEntries($iContextId, array_merge($aParams, [
                 'filter' => $iFilterSelected,
             ])),

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

@@ -100,6 +100,16 @@
     <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_context"><![CDATA[Context]]></string>
+    <string name="_bx_tasks_form_display_context_edit"><![CDATA[Edit Context]]></string>
+    <string name="_bx_tasks_form_context_input_sys_repository"><![CDATA[Repository]]></string>
+    <string name="_bx_tasks_form_context_input_repository"><![CDATA[Repository]]></string>
+    <string name="_bx_tasks_form_context_input_sys_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_tasks_form_context_input_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_tasks_form_context_input_sys_do_cancel"><![CDATA[Cancel]]></string>
+    <string name="_bx_tasks_form_context_input_do_cancel"><![CDATA[Cancel]]></string>
+    <string name="_bx_tasks_form_context_input_sys_controls"><![CDATA[Controls]]></string>
+
     <string name="_bx_tasks_form_time"><![CDATA[Time]]></string>
     <string name="_bx_tasks_form_display_time_add"><![CDATA[Add Time]]></string>
     <string name="_bx_tasks_form_display_time_edit"><![CDATA[Edit Time]]></string>
@@ -478,7 +488,8 @@
     <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_list"><![CDATA[New Task List]]></string>
+    <string name="_bx_tasks_txt_new_settings"><![CDATA[Settings]]></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>

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

@@ -49,6 +49,13 @@ CREATE TABLE IF NOT EXISTS `bx_tasks_lists` (
   PRIMARY KEY (`id`)
 );
 
+-- TABLE: contexts
+CREATE TABLE IF NOT EXISTS `bx_tasks_contexts` (
+  `id` int(11) NOT NULL DEFAULT '0',
+  `repository` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`)
+);
+
 -- TABLE: assignment
 CREATE TABLE IF NOT EXISTS `bx_tasks_assignments` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
@@ -572,6 +579,25 @@ INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for
 ('bx_tasks_list_entry_edit', 'do_submit', 2147483647, 1, 3),
 ('bx_tasks_list_entry_edit', 'do_cancel', 2147483647, 1, 4);
 
+-- FORMS: context
+INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_attrs`, `submit_name`, `table`, `key`, `uri`, `uri_title`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_tasks_context', 'bx_tasks', '_bx_tasks_form_context', '', '', 'do_submit', 'bx_tasks_contexts', 'id', '', '', '', 0, 1, 'BxTasksFormContext', 'modules/boonex/tasks/classes/BxTasksFormContext.php');
+
+INSERT INTO `sys_form_displays` (`display_name`, `module`, `object`, `title`, `view_mode`) VALUES
+('bx_tasks_context_edit', 'bx_tasks', 'bx_tasks_context', '_bx_tasks_form_display_context_edit', 0);
+
+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
+('bx_tasks_context', 'bx_tasks', 'repository', '', '', 0, 'text', '_bx_tasks_form_context_input_sys_repository', '_bx_tasks_form_context_input_repository', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 0, 0),
+('bx_tasks_context', 'bx_tasks', 'do_submit', '_bx_tasks_form_context_input_do_submit', '', 0, 'submit', '_bx_tasks_form_context_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_tasks_context', 'bx_tasks', 'do_cancel', '_bx_tasks_form_context_input_do_cancel', '', 0, 'button', '_bx_tasks_form_context_input_sys_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 1, 0),
+('bx_tasks_context', 'bx_tasks', 'controls', '', 'do_submit,do_cancel', 0, 'input_set', '_bx_tasks_form_context_input_sys_controls', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0);
+
+INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES
+('bx_tasks_context_edit', 'repository', 2147483647, 1, 1),
+('bx_tasks_context_edit', 'controls', 2147483647, 1, 2),
+('bx_tasks_context_edit', 'do_submit', 2147483647, 1, 3),
+('bx_tasks_context_edit', 'do_cancel', 2147483647, 1, 4);
+
 -- FORMS: time
 INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_attrs`, `submit_name`, `table`, `key`, `uri`, `uri_title`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES
 ('bx_tasks_time', 'bx_tasks', '_bx_tasks_form_time', 'report.php', 'a:3:{s:2:"id";s:0:"";s:4:"name";s:0:"";s:5:"class";s:17:"bx-report-do-form";}', 'submit', '', 'id', '', '', '', 0, 1, 'BxTasksFormTime', 'modules/boonex/tasks/classes/BxTasksFormTime.php');
@@ -618,7 +644,6 @@ INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_fo
 ('bx_tasks_time_edit', 'submit', 2147483647, 1, 8),
 ('bx_tasks_time_edit', 'cancel', 2147483647, 1, 9);
 
-
 -- 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');

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

@@ -1,6 +1,6 @@
 
 -- TABLES
-DROP TABLE IF EXISTS `bx_tasks_tasks`, `bx_tasks_lists`, `bx_tasks_assignments`, `bx_tasks_filters`, `bx_tasks_covers`, `bx_tasks_files`, `bx_tasks_photos`, `bx_tasks_photos_resized`, `bx_tasks_videos`, `bx_tasks_videos_resized`, `bx_tasks_cmts`, `bx_tasks_cmts_notes`, `bx_tasks_votes`, `bx_tasks_votes_track`, `bx_tasks_reactions`, `bx_tasks_reactions_track`, `bx_tasks_views_track`, `bx_tasks_meta_keywords`, `bx_tasks_meta_locations`, `bx_tasks_meta_mentions`, `bx_tasks_reports`, `bx_tasks_reports_track`, `bx_tasks_time`, `bx_tasks_time_track`, `bx_tasks_timers`, `bx_tasks_favorites_track`, `bx_tasks_scores`, `bx_tasks_scores_track`;
+DROP TABLE IF EXISTS `bx_tasks_tasks`, `bx_tasks_lists`, `bx_tasks_contexts`, `bx_tasks_assignments`, `bx_tasks_filters`, `bx_tasks_covers`, `bx_tasks_files`, `bx_tasks_photos`, `bx_tasks_photos_resized`, `bx_tasks_videos`, `bx_tasks_videos_resized`, `bx_tasks_cmts`, `bx_tasks_cmts_notes`, `bx_tasks_votes`, `bx_tasks_votes_track`, `bx_tasks_reactions`, `bx_tasks_reactions_track`, `bx_tasks_views_track`, `bx_tasks_meta_keywords`, `bx_tasks_meta_locations`, `bx_tasks_meta_mentions`, `bx_tasks_reports`, `bx_tasks_reports_track`, `bx_tasks_time`, `bx_tasks_time_track`, `bx_tasks_timers`, `bx_tasks_favorites_track`, `bx_tasks_scores`, `bx_tasks_scores_track`;
 
 -- STORAGES & TRANSCODERS
 DELETE FROM `sys_objects_storage` WHERE `object` LIKE 'bx_tasks_%';

+ 14 - 1
modules/boonex/tasks/js/tasks.js

@@ -40,7 +40,16 @@ BxTasksView.prototype._setCompleted = function (iId, iValue, onComplete) {
             onComplete(oData);
     });
 };
-	
+
+BxTasksView.prototype.processContext = function (iContextId, obj) {
+    var $this = this;
+    $(window).dolPopupAjax({
+        url: $this._oOptions.sActionUrl + 'process_context_form/' + iContextId + '/',
+        closeOnOuterClick: false,
+        removeOnClose: true
+    });   
+};
+
 BxTasksView.prototype.processTaskList = function (iContextId, iId, obj) {
     var $this = this;
     $(window).dolPopupAjax({
@@ -97,6 +106,10 @@ BxTasksView.prototype.processTaskEditProperty = function (iContentId, sProperty,
     });
 };
 
+BxTasksView.prototype.hidePopup = function (oData) {
+    $(".bx-popup-applied:visible").dolPopupHide();
+};
+
 BxTasksView.prototype.reloadData = function (oData, iContextId) {
     $(".bx-popup-applied:visible").dolPopupHide();
 

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

@@ -6,11 +6,18 @@
             </bx_repeat:filter_items>
         </select>
     </bx_if:show_filters>
-    <bx_if:allow_add_list>
-        <a class="bx-btn bx-btn-small bx-def-margin-sec-right bx-tasks-tasklist-add" href="javascript:void(0);" onclick="__object__.processTaskList(__context_id__, 0, this)">
-            <bx_text:_bx_tasks_txt_new_task_list />
-        </a>
-    </bx_if:allow_add_list>
+    <span>
+        <bx_if:allow_add_list>
+            <a class="bx-btn bx-btn-small bx-def-margin-sec-right bx-tasks-tasklist-add" href="javascript:void(0);" onclick="__object__.processTaskList(__context_id__, 0, this)">
+                <bx_text:_bx_tasks_txt_new_task_list />
+            </a>
+        </bx_if:allow_add_list>
+        <bx_if:allow_manage_settings>
+            <a class="bx-btn bx-btn-small bx-def-margin-sec-right bx-tasks-tasklist-add" href="javascript:void(0);" onclick="__object__.processContext(__context_id__, this)">
+                <bx_text:_bx_tasks_txt_new_settings />
+            </a>
+        </bx_if:allow_manage_settings>
+    </span>
 </div>
 __tasks__
 __js_code__