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

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

AntonLV 11 месяцев назад
Родитель
Сommit
43decf3d26

+ 7 - 2
modules/boonex/russian/data/langs/bx_tasks/ru.xml

@@ -18,6 +18,11 @@
     <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_edit_body"><![CDATA[Редактировать тело задачи]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_type"><![CDATA[Редактировать тип задачи]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_priority"><![CDATA[Редактировать приоритет задачи]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_estimate"><![CDATA[Редактировать временные затраты задачи]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_due_date"><![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>
@@ -410,8 +415,8 @@
     <string name="_bx_tasks_txt_filter_all"><![CDATA[Все Задания]]></string>
     <string name="_bx_tasks_txt_filter_completed"><![CDATA[Завершенные Задания]]></string>
     <string name="_bx_tasks_txt_filter_uncompleted"><![CDATA[Незавершенные Задания]]></string>
-    <string name="_bx_tasks_txt_total"><![CDATA[Total: {0}]]></string>
-    <string name="_bx_tasks_txt_estimate"><![CDATA[Estimate: {0}]]></string>
+    <string name="_bx_tasks_txt_total"><![CDATA[Потрачено времени: {0}]]></string>
+    <string name="_bx_tasks_txt_estimate"><![CDATA[Выделено времени: {0}]]></string>
 
     <string name="_bx_tasks_txt_err_cannot_perform_action"><![CDATA[Невозможно выполнить действие. Пожалуйста, оповестите нас об этой проблеме.]]></string>
     <string name="_bx_tasks_txt_err_cannot_perform_action"><![CDATA[Невозможно выполнить действие. Пожалуйста, оповестите нас об этой проблеме.]]></string>

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

@@ -47,6 +47,7 @@ class BxTasksConfig extends BxBaseModTextConfig
             'FIELD_TEXT_ID' => 'post-text',
             'FIELD_TYPE' => 'type',
             'FIELD_PRIORITY' => 'priority',
+            'FIELD_ESTIMATE' => 'estimate',
             'FIELD_STATE' => 'state',
             'FIELD_CATEGORY' => 'cat',
             'FIELD_MULTICAT' => 'multicat',
@@ -136,6 +137,11 @@ class BxTasksConfig extends BxBaseModTextConfig
             '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_BODY' => 'bx_tasks_entry_edit_body',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT_TYPE' => 'bx_tasks_entry_edit_type',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT_PRIORITY' => 'bx_tasks_entry_edit_priority',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT_ESTIMATE' => 'bx_tasks_entry_edit_estimate',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT_DUE_DATE' => 'bx_tasks_entry_edit_due_date',
             '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',

+ 13 - 0
modules/boonex/tasks/classes/BxTasksFormEntry.php

@@ -81,6 +81,19 @@ class BxTasksFormEntry extends BxBaseModTextFormEntry
         $this->_iContextId = $iContextId;
     }
 
+    public function genViewRowValue(&$aInput)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sValue = parent::genViewRowValue($aInput);
+        if(in_array($aInput['name'], [$CNF['FIELD_TYPE'], $CNF['FIELD_PRIORITY'], $CNF['FIELD_ESTIMATE'], $CNF['FIELD_DUEDATE'], $CNF['FIELD_STATE']]))
+            $sValue = $this->_oModule->_oTemplate->parseLink('javascript:void(0)', $sValue ?: _t('_undefined'), [
+                'onclick' => 'javascript:' . $this->_oModule->_oConfig->getJsObject('tasks') . '.processTaskEdit' . bx_gen_method_name($aInput['name']) . '(' . $this->_iContentId . ', this)'
+            ]);
+
+        return $sValue;
+    }
+
     public function getCode($bDynamicMode = false)
     {
         $this->_replaceMarkersInControls('controls_edit');

+ 28 - 5
modules/boonex/tasks/classes/BxTasksModule.php

@@ -231,7 +231,7 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         }
     }
 
-    public function actionProcessTaskFormEditState($iContentId)
+    public function actionProcessTaskFormEditProperty($iContentId, $sProperty)
     {
         $CNF = &$this->_oConfig->CNF;
 
@@ -239,17 +239,27 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         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 . '/';
+        $sForm = '';
+        if(($sKey = 'OBJECT_FORM_ENTRY_DISPLAY_EDIT_' . strtoupper($sProperty)) && !empty($CNF[$sKey]))
+            $sForm = $CNF[$sKey];
+        else
+            return '';
+
+        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $sForm);
+        $oForm->setId($sForm);
+        $oForm->setName($sForm);
+        $oForm->setAction(BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'process_task_form_edit_property/' . $iContentId . '/' . $sProperty . '/');
         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)]))
+            if(!$oForm->update($iContentId))
                 return echoJson(['msg' => _t('_bx_tasks_txt_err_cannot_perform_action')]);
 
+            if(($sMethod = '_onEdit' . bx_gen_method_name($sProperty)) && method_exists($this, $sMethod))
+                $this->$sMethod($iContentId, $oForm);
+
             return echoJson([
                 'eval' => $this->_oConfig->getJsObject('tasks') . '.reload(oData)',
             ]);
@@ -269,6 +279,19 @@ class BxTasksModule extends BxBaseModTextModule implements iBxDolCalendarService
         }
     }
 
+    protected function _onEditState($iContentId, &$oForm)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $iState = $oForm->getCleanValue($CNF['FIELD_STATE']);
+
+        $this->_oDb->updateEntriesBy([
+            $CNF['FIELD_COMPLETED'] => (int)$this->_oConfig->isCompleted($iState)
+        ], [
+            $CNF['FIELD_ID'] => $iContentId
+        ]);
+    }
+
     public function actionCalendarData()
     {
         // check permissions

+ 12 - 2
modules/boonex/tasks/classes/BxTasksTemplate.php

@@ -32,9 +32,19 @@ class BxTasksTemplate extends BxBaseModTextTemplate
     
     public function entryText ($aData, $sTemplateName = 'entry-text.html')
     {
-        $aVars = $this->getTmplVarsText($aData);
+        $CNF = &$this->_oConfig->CNF;
+        $iLoggedId = bx_get_logged_profile_id();
+
+        $sResult = '';
+        if($aData[$CNF['FIELD_AUTHOR']] != $iLoggedId) {
+            $aVars = $this->getTmplVarsText($aData);
+
+            $sResult = $this->parseHtmlByName($sTemplateName, $aVars);
+        }
+        else 
+            $sResult = $this->getModule()->serviceEntityEdit($aData[$CNF['FIELD_ID']], $CNF['OBJECT_FORM_ENTRY_DISPLAY_EDIT_BODY']);
 
-        return $this->parseHtmlByName($sTemplateName, $aVars);
+        return $sResult;
     }
 
     public function entryAssignments ($aProfiles)

+ 5 - 0
modules/boonex/tasks/install/langs/en.xml

@@ -18,6 +18,11 @@
     <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_body"><![CDATA[Edit Task's Body]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_type"><![CDATA[Edit Task's Type]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_priority"><![CDATA[Edit Task's Priority]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_estimate"><![CDATA[Edit Task's Estimate]]></string>
+    <string name="_bx_tasks_form_entry_display_edit_due_date"><![CDATA[Edit Task's Due Date]]></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>

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

@@ -404,6 +404,11 @@ 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_body', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit_body'),
+('bx_tasks', 'bx_tasks_entry_edit_type', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit_type'),
+('bx_tasks', 'bx_tasks_entry_edit_priority', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit_priority'),
+('bx_tasks', 'bx_tasks_entry_edit_estimate', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit_estimate'),
+('bx_tasks', 'bx_tasks_entry_edit_due_date', 'bx_tasks', 0, '_bx_tasks_form_entry_display_edit_due_date'),
 ('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');
 
@@ -472,11 +477,35 @@ INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for
 ('bx_tasks_entry_edit', 'do_submit', 2147483647, 1, 15),
 ('bx_tasks_entry_edit', 'do_cancel_edit', 2147483647, 1, 16),
 
+('bx_tasks_entry_edit_body', 'title', 2147483647, 1, 1),
+('bx_tasks_entry_edit_body', 'text', 2147483647, 1, 2),
+('bx_tasks_entry_edit_body', 'do_submit', 2147483647, 1, 3),
+
 ('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_edit_type', 'type', 2147483647, 1, 1),
+('bx_tasks_entry_edit_type', 'controls_edit_popup', 2147483647, 1, 2),
+('bx_tasks_entry_edit_type', 'do_submit', 2147483647, 1, 3),
+('bx_tasks_entry_edit_type', 'do_cancel', 2147483647, 1, 4),
+
+('bx_tasks_entry_edit_priority', 'priority', 2147483647, 1, 1),
+('bx_tasks_entry_edit_priority', 'controls_edit_popup', 2147483647, 1, 2),
+('bx_tasks_entry_edit_priority', 'do_submit', 2147483647, 1, 3),
+('bx_tasks_entry_edit_priority', 'do_cancel', 2147483647, 1, 4),
+
+('bx_tasks_entry_edit_estimate', 'estimate', 2147483647, 1, 1),
+('bx_tasks_entry_edit_estimate', 'controls_edit_popup', 2147483647, 1, 2),
+('bx_tasks_entry_edit_estimate', 'do_submit', 2147483647, 1, 3),
+('bx_tasks_entry_edit_estimate', 'do_cancel', 2147483647, 1, 4),
+
+('bx_tasks_entry_edit_due_date', 'due_date', 192, 1, 1),
+('bx_tasks_entry_edit_due_date', 'controls_edit_popup', 2147483647, 1, 2),
+('bx_tasks_entry_edit_due_date', 'do_submit', 2147483647, 1, 3),
+('bx_tasks_entry_edit_due_date', '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', 'estimate', 2147483647, 1, 3),

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

@@ -64,10 +64,30 @@ BxTasksView.prototype.processTask = function (iContextId, iListId, oSource) {
     });
 };
 
+BxTasksView.prototype.processTaskEditType = function (iContentId, oSource) {
+    this.processTaskEditProperty(iContentId, 'type', oSource);
+};
+
+BxTasksView.prototype.processTaskEditPriority = function (iContentId, oSource) {
+    this.processTaskEditProperty(iContentId, 'priority', oSource);
+};
+
+BxTasksView.prototype.processTaskEditEstimate = function (iContentId, oSource) {
+    this.processTaskEditProperty(iContentId, 'estimate', oSource);
+};
+
+BxTasksView.prototype.processTaskEditDueDate = function (iContentId, oSource) {
+    this.processTaskEditProperty(iContentId, 'due_date', oSource);
+};
+
 BxTasksView.prototype.processTaskEditState = function (iContentId, oSource) {
+    this.processTaskEditProperty(iContentId, 'state', oSource);
+};
+
+BxTasksView.prototype.processTaskEditProperty = function (iContentId, sProperty, oSource) {
     var $this = this;
     $(window).dolPopupAjax({
-        url: $this._oOptions.sActionUrl + 'process_task_form_edit_state/' + iContentId + '/',
+        url: $this._oOptions.sActionUrl + 'process_task_form_edit_property/' + iContentId + '/' + sProperty + '/',
         closeOnOuterClick: false,
         removeOnClose: true
     });

+ 6 - 0
modules/boonex/tasks/template/css/forms.css

@@ -1,3 +1,9 @@
+/*-- Entry Form: View --*/
+.bx-form-advanced-wrapper.bx_tasks_wrapper .bx-form-row-view-value a {
+    text-decoration: underline;
+}
+
+
 /*-- Time Form --*/
 #bx-form-element-value .bx-form-input-wrapper-input_set {
     display: flex;