Esempio n. 1
0
     }
     break;
 case 'CTaskCheckListItem::complete()':
 case 'CTaskCheckListItem::renew()':
 case 'CTaskCheckListItem::delete()':
 case 'CTaskCheckListItem::isComplete()':
 case 'CTaskCheckListItem::update()':
 case 'CTaskCheckListItem::moveAfterItem()':
     CTaskAssert::assert(isset($arAction['taskId'], $arAction['itemId']));
     // Is task id the result of previous operation in batch?
     $taskId = BXTasksResolveDynaParamValue($arAction['taskId'], array('$arOperationsResults' => $arOperationsResults));
     // Is item id the result of previous operation in batch?
     $itemId = BXTasksResolveDynaParamValue($arAction['itemId'], array('$arOperationsResults' => $arOperationsResults));
     CTaskAssert::assertLaxIntegers($taskId, $itemId);
     $oTask = CTaskItem::getInstanceFromPool($taskId, $loggedInUserId);
     $oCheckListItem = new CTaskCheckListItem($oTask, $itemId);
     $returnValue = null;
     switch ($arAction['operation']) {
         case 'CTaskCheckListItem::moveAfterItem()':
             $insertAfterItemId = BXTasksResolveDynaParamValue($arAction['insertAfterItemId'], array('$arOperationsResults' => $arOperationsResults));
             CTaskAssert::assertLaxIntegers($insertAfterItemId);
             $oCheckListItem->moveAfterItem($insertAfterItemId);
             break;
         case 'CTaskCheckListItem::complete()':
             $oCheckListItem->complete();
             break;
         case 'CTaskCheckListItem::renew()':
             $oCheckListItem->renew();
             break;
         case 'CTaskCheckListItem::delete()':
             $oCheckListItem->delete();
Esempio n. 2
0
 /**
  * Create a task by a template.
  *
  * @param integer $templateId - Id of task template.
  * @param integer $executiveUserId User id. Put 1 here to skip rights.
  * @param mixed[] $overrideTaskData Task data needs to be overrided externally.
  * @param mixed[] $parameters Various set of parameters.
  * 
  * 		<li> TEMPLATE_DATA mixed[] 			pre-cached data, if available we can get rid of additional queries
  * 		<li> CREATE_CHILD_TASKS boolean 	if false, sub-tasks wont be created
  * 		<li> CREATE_MULTITASK boolean		if false, discards template rule of "copying task to several responsibles"
  * 		<li> BEFORE_ADD_CALLBACK callable 		callback called before each task added, allows to modify data passed to CTaskItem::add()
  * 
  * @throws TasksException - on access denied, task not found
  * @throws CTaskAssertException
  * @throws Exception - on unexpected error
  *
  * @return CTaskItem[]
  */
 public static function addByTemplate($templateId, $executiveUserId, $overrideTaskData = array(), $parameters = array('TEMPLATE_DATA' => array(), 'CREATE_CHILD_TASKS' => true, 'CREATE_MULTITASK' => true, 'BEFORE_ADD_CALLBACK' => null, 'SPAWNED_BY_AGENT' => false))
 {
     CTaskAssert::assertLaxIntegers($executiveUserId);
     CTaskAssert::assert($executiveUserId > 0);
     global $DB;
     $templateId = (int) $templateId;
     if (!$templateId) {
         return array();
         // template id not set
     }
     if (!is_array($overrideTaskData)) {
         $overrideTaskData = array();
     }
     if (!is_array($parameters)) {
         $parameters = array();
     }
     if (!isset($parameters['CREATE_CHILD_TASKS'])) {
         $parameters['CREATE_CHILD_TASKS'] = true;
     }
     if (!isset($parameters['CREATE_MULTITASK'])) {
         $parameters['CREATE_MULTITASK'] = true;
     }
     if (!isset($parameters['BEFORE_ADD_CALLBACK'])) {
         $parameters['BEFORE_ADD_CALLBACK'] = null;
     }
     if (!isset($parameters['SPAWNED_BY_AGENT'])) {
         $parameters['SPAWNED_BY_AGENT'] = false;
     }
     // read template data
     if (is_array($parameters['TEMPLATE_DATA']) && !empty($parameters['TEMPLATE_DATA'])) {
         $arTemplate = $parameters['TEMPLATE_DATA'];
     } else {
         $arFilter = array('ID' => $templateId);
         $rsTemplate = CTaskTemplates::GetList(array(), $arFilter);
         $arTemplate = $rsTemplate->Fetch();
         if (!$arTemplate) {
             return array();
             // nothing to do
         }
     }
     $arTemplate = array_merge($arTemplate, $overrideTaskData);
     if (!isset($arTemplate['CHECK_LIST'])) {
         // get template checklist
         $arTemplate['CHECK_LIST'] = array();
         $res = \Bitrix\Tasks\Template\CheckListItemTable::getList(array('filter' => array('TEMPLATE_ID' => $templateId), 'select' => array('IS_COMPLETE', 'SORT_INDEX', 'TITLE')));
         while ($item = $res->fetch()) {
             $arTemplate['CHECK_LIST'][] = $item;
         }
     }
     //////////////////////////////////////////////
     //////////////////////////////////////////////
     //////////////////////////////////////////////
     unset($arTemplate['STATUS']);
     $arFields = $arTemplate;
     $arFields['CREATED_DATE'] = date($DB->DateFormatToPHP(CSite::GetDateFormat('FULL')), time() + CTimeZone::GetOffset());
     $arFields['ACCOMPLICES'] = unserialize($arFields['ACCOMPLICES']);
     $arFields['AUDITORS'] = unserialize($arFields['AUDITORS']);
     $arFields['TAGS'] = unserialize($arFields['TAGS']);
     $arFields['FILES'] = unserialize($arFields['FILES']);
     $arFields['DEPENDS_ON'] = unserialize($arFields['DEPENDS_ON']);
     $arFields['REPLICATE'] = 'N';
     $arFields['CHANGED_BY'] = $arFields['CREATED_BY'];
     $arFields['CHANGED_DATE'] = $arFields['CREATED_DATE'];
     if (!$arFields['ACCOMPLICES']) {
         $arFields['ACCOMPLICES'] = array();
     }
     if (!$arFields['AUDITORS']) {
         $arFields['AUDITORS'] = array();
     }
     unset($arFields['ID'], $arFields['REPLICATE'], $arFields['REPLICATE_PARAMS']);
     if ($arTemplate['DEADLINE_AFTER']) {
         $deadlineAfter = $arTemplate['DEADLINE_AFTER'] / (24 * 60 * 60);
         $deadline = strtotime(date('Y-m-d 00:00') . ' +' . $deadlineAfter . ' days');
         $arFields['DEADLINE'] = date($DB->DateFormatToPHP(CSite::GetDateFormat('SHORT')), $deadline);
     }
     $multitaskMode = false;
     if ($parameters['CREATE_MULTITASK']) {
         $arFields['RESPONSIBLES'] = unserialize($arFields['RESPONSIBLES']);
         // copy task to multiple responsibles
         if ($arFields['MULTITASK'] == 'Y' && !empty($arFields['RESPONSIBLES'])) {
             $arFields['RESPONSIBLE_ID'] = $arFields['CREATED_BY'];
             $multitaskMode = true;
         } else {
             $arFields['RESPONSIBLES'] = array();
         }
     } else {
         $arFields['MULTITASK'] = 'N';
         $arFields['RESPONSIBLES'] = array();
     }
     $arFields['FORKED_BY_TEMPLATE_ID'] = $templateId;
     // add main task to the create list
     $tasksToCreate = array($arFields);
     // if MULTITASK where set to Y, create a duplicate task for each of RESPONSIBLES
     if (!empty($arFields['RESPONSIBLES'])) {
         $arFields['MULTITASK'] = 'N';
         foreach ($arFields['RESPONSIBLES'] as $responsible) {
             $arFields['RESPONSIBLE_ID'] = $responsible;
             $tasksToCreate[] = $arFields;
         }
     }
     // get sub-templates
     $subTasksToCreate = array();
     if ($parameters['CREATE_CHILD_TASKS'] !== false) {
         $subTasksToCreate = static::getChildTemplateData($templateId);
     }
     $created = array();
     // first, create ROOT tasks
     $multitaskTaskId = false;
     $i = 0;
     foreach ($tasksToCreate as $arFields) {
         if ($multitaskMode && $i > 0) {
             if ($multitaskTaskId) {
                 // all following tasks will be subtasks of a base task in case of MULTITASK was turned on
                 $arFields['PARENT_ID'] = $multitaskTaskId;
             } else {
                 break;
                 // no child tasks will be created, because parent task failed to be created
             }
         }
         $add = true;
         if (is_callable($parameters['BEFORE_ADD_CALLBACK'])) {
             $result = call_user_func_array($parameters['BEFORE_ADD_CALLBACK'], array(&$arFields));
             if ($result === false) {
                 $add = false;
             }
         }
         if ($add) {
             // temporary commented out, because there is currently no way to pass
             // 'SPAWNED_BY_AGENT' => true
             // parameter to CTaskTemplate::add() :
             //$taskInstance = static::add($arFields, $executiveUserId);
             //$taskId = $taskInstance->getId();
             $task = new CTasks();
             $taskId = $task->Add($arFields, array('SPAWNED_BY_AGENT' => !!$parameters['SPAWNED_BY_AGENT'], 'USER_ID' => $executiveUserId));
             if (intval($taskId)) {
                 $taskInstance = static::getInstance($taskId, $executiveUserId);
                 // the first task should be mom in case of multitasking
                 if ($multitaskMode && $i == 0) {
                     $multitaskTaskId = $taskId;
                 }
                 // check list items for root task
                 foreach ($arTemplate['CHECK_LIST'] as $item) {
                     CTaskCheckListItem::add($taskInstance, $item);
                 }
                 $created[$taskId] = $taskInstance;
                 if (!empty($subTasksToCreate)) {
                     $notifADWasDisabled = CTaskNotifications::disableAutoDeliver();
                     $createdSubtasks = $taskInstance->addChildTasksByTemplate($templateId, array('CHILD_TEMPLATE_DATA' => $subTasksToCreate, 'BEFORE_ADD_CALLBACK' => $parameters['BEFORE_ADD_CALLBACK'], 'SPAWNED_BY_AGENT' => $parameters['SPAWNED_BY_AGENT']));
                     if ($notifADWasDisabled) {
                         CTaskNotifications::enableAutoDeliver();
                     }
                     if (is_array($createdSubtasks) && !empty($createdSubtasks)) {
                         foreach ($createdSubtasks as $ctId => $ctInst) {
                             $created[$ctId] = $ctInst;
                         }
                     }
                 }
             }
         }
         $i++;
     }
     return $created;
 }
Esempio n. 3
0
 protected static function filterData(array $data, Collection $errors)
 {
     // READ, WRITE, SORT, FILTER, DATE
     $fieldMap = \CTaskCheckListItem::getPublicFieldMap();
     return parent::filterData($data, $fieldMap, $errors);
 }
Esempio n. 4
0
 protected function getOwnerTaskId($itemId)
 {
     $taskId = \CTaskCheckListItem::getTaskIdByItemId($itemId);
     if (intval($taskId)) {
         return $taskId;
     } else {
         $this->add('ITEM_NOT_FOUND', 'Item not found');
     }
     return false;
 }
Esempio n. 5
0
 /**
  * @param $ID
  *
  * This method MUST be called after sync with all Outlook clients.
  * We can't determine such moment, so we should terminate zombies
  * for some time after task been deleted.
  */
 private static function terminateZombie($ID)
 {
     global $DB, $USER_FIELD_MANAGER;
     $res = CTasks::GetList(array(), array('ID' => (int) $ID, 'ZOMBIE' => 'Y'), array('ID'), array('bGetZombie' => true));
     if ($res && ($task = $res->fetch())) {
         CTaskCheckListItem::deleteByTaskId($ID);
         CTaskLog::DeleteByTaskId($ID);
         $USER_FIELD_MANAGER->Delete("TASKS_TASK", $ID);
         $strSql = "DELETE FROM b_tasks WHERE ID = " . (int) $ID;
         $DB->query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
 }
Esempio n. 6
0
             $oCheckListItem = CTaskCheckListItem::add($oTask, $arFields);
             $arFields['ID'] = $oCheckListItem->getId();
         } else {
             if ($arParams['TASK_ID'] > 0 && $arParams['MODE'] === 'JUST AFTER TASK EDITED') {
                 if (in_array($postId, $arChecklistItemsInDbIds)) {
                     foreach ($arChecklistItemsInDb as $oChecklistItem) {
                         if ($oChecklistItem->getId() == $postId) {
                             $arItemDataInDb = $oChecklistItem->getData();
                             if ($arItemDataInDb['~TITLE'] !== $arFields['TITLE'] || $arItemDataInDb['~IS_COMPLETE'] !== $arFields['IS_COMPLETE'] || $arItemDataInDb['~SORT_INDEX'] !== $arFields['SORT_INDEX']) {
                                 $oChecklistItem->update($arFields);
                             }
                             break;
                         }
                     }
                 } else {
                     $oCheckListItem = CTaskCheckListItem::add($oTask, $arFields);
                     $arFields['ID'] = $oCheckListItem->getId();
                 }
             }
         }
     }
     if (!isset($arFileds['ID'])) {
         $arFields['ID'] = $postId;
     }
     $arFields['~ID'] = $arFields['ID'];
     $arFields['~TITLE'] = $arFields['TITLE'];
     $arFields['~SORT_INDEX'] = $arFields['SORT_INDEX'];
     $arFields['~IS_COMPLETE'] = $arFields['IS_COMPLETE'];
     $arFields['TITLE'] = htmlspecialcharsbx($arFields['~TITLE']);
     $arChecklistItems[] = $arFields;
 } catch (Exception $e) {
Esempio n. 7
0
                ShowInFrame($this, true, $strError);
            } else {
                ShowError($strError);
            }
            return;
        }
        if ($redirectTo) {
            LocalRedirect($redirectTo);
        }
    }
    LocalRedirect($APPLICATION->GetCurPageParam("CALLBACK=CHANGED", array("ACTION", "sessid", "ELAPSED_ID")));
}
if ($arTask) {
    CTasks::UpdateViewed($arTask["ID"], $loggedInUserId);
    $arResult['CHECKLIST_ITEMS'] = array();
    list($arChecklistItems, $arMetaData) = CTaskCheckListItem::fetchList($oTask, array('SORT_INDEX' => 'ASC'));
    unset($arMetaData);
    foreach ($arChecklistItems as $oChecklistItem) {
        $checklistItemId = $oChecklistItem->getId();
        $arResult['CHECKLIST_ITEMS'][$checklistItemId] = $oChecklistItem->getData();
        $arResult['CHECKLIST_ITEMS'][$checklistItemId]['META:CAN_MODIFY'] = $oChecklistItem->isActionAllowed(CTaskCheckListItem::ACTION_MODIFY);
        $arResult['CHECKLIST_ITEMS'][$checklistItemId]['META:CAN_REMOVE'] = $oChecklistItem->isActionAllowed(CTaskCheckListItem::ACTION_REMOVE);
        $arResult['CHECKLIST_ITEMS'][$checklistItemId]['META:CAN_TOGGLE'] = $oChecklistItem->isActionAllowed(CTaskCheckListItem::ACTION_TOGGLE);
    }
    $arTask['META:ALLOWED_ACTIONS_CODES'] = $oTask->getAllowedTaskActions();
    $arTask['META:ALLOWED_ACTIONS'] = $oTask->getAllowedTaskActionsAsStrings();
    $arTask['META:IN_DAY_PLAN'] = 'N';
    $arTask['META:CAN_ADD_TO_DAY_PLAN'] = 'N';
    if (($arTask["RESPONSIBLE_ID"] == $loggedInUserId || in_array($loggedInUserId, $arTask['ACCOMPLICES'])) && CModule::IncludeModule("timeman") && (!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite())) {
        $arTask['META:CAN_ADD_TO_DAY_PLAN'] = 'Y';
        $arTasksInPlan = CTaskPlannerMaintance::getCurrentTasksList();