Exemplo n.º 1
0
 function Add($arFields, $arParams = array())
 {
     global $DB, $USER_FIELD_MANAGER;
     $bCheckFilesPermissions = false;
     if (isset($arParams['CHECK_RIGHTS_ON_FILES']) && ($arParams['CHECK_RIGHTS_ON_FILES'] === true || $arParams['CHECK_RIGHTS_ON_FILES'] === 'Y')) {
         CTaskAssert::assert(isset($arParams['USER_ID']) && CTaskAssert::isLaxIntegers($arParams['USER_ID']) && $arParams['USER_ID'] > 0);
         $bCheckFilesPermissions = true;
     }
     $arParamsForCheckFields = array('CHECK_RIGHTS_ON_FILES' => $bCheckFilesPermissions);
     if (isset($arParams['USER_ID'])) {
         $arParamsForCheckFields['USER_ID'] = $arParams['USER_ID'];
     }
     if ($this->CheckFields($arFields, false, $arParamsForCheckFields)) {
         if ($USER_FIELD_MANAGER->CheckFields("TASKS_TASK_TEMPLATE", 0, $arFields, $effectiveUserId)) {
             $arBinds = array("DESCRIPTION", "REPLICATE_PARAMS", "ACCOMPLICES", "AUDITORS", "FILES", "TAGS", "DEPENDS_ON", "RESPONSIBLES");
             // fix for absent SITE_ID
             if ((string) $arFields['SITE_ID'] == '' || $arFields['SITE_ID'] == static::CURRENT_SITE_ID) {
                 $arFields['SITE_ID'] = SITE_ID;
             }
             $ID = $DB->Add("b_tasks_template", $arFields, $arBinds, "tasks");
             if (isset($arFields['FILES'])) {
                 CTaskFiles::removeTemporaryStatusForFiles(unserialize($arFields['FILES']), $arParams['USER_ID']);
             }
             $USER_FIELD_MANAGER->Update("TASKS_TASK_TEMPLATE", $ID, $arFields, $effectiveUserId);
             // periodic tasks
             if ($arFields["REPLICATE"] == "Y") {
                 // Firstly, remove all agents for this template
                 /** @noinspection PhpDynamicAsStaticMethodCallInspection */
                 CAgent::RemoveAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ');', 'tasks');
                 /** @noinspection PhpDynamicAsStaticMethodCallInspection */
                 CAgent::RemoveAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ', 0);', 'tasks');
                 /** @noinspection PhpDynamicAsStaticMethodCallInspection */
                 CAgent::RemoveAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ', 1);', 'tasks');
                 // Set up new agent
                 if ($arFields['REPLICATE'] === 'Y') {
                     $nextTime = CTasks::GetNextTime(unserialize($arFields['REPLICATE_PARAMS']));
                     if ($nextTime) {
                         CTimeZone::Disable();
                         /** @noinspection PhpDynamicAsStaticMethodCallInspection */
                         CAgent::AddAgent('CTasks::RepeatTaskByTemplateId(' . $ID . ', 0);', 'tasks', 'N', 86400, $nextTime, 'Y', $nextTime);
                         CTimeZone::Enable();
                     }
                 }
             }
             // template tree
             if (intval($arFields['BASE_TEMPLATE_ID'])) {
                 try {
                     Template\DependencyTable::createLink($ID, intval($arFields['BASE_TEMPLATE_ID']));
                 } catch (\Bitrix\Tasks\DB\Tree\LinkExistsException $e) {
                 }
             }
             return $ID;
         }
     }
     return false;
 }