public static function SyncModifyTaskItem($arModifyEventArray) { global $DB; $ID = $arModifyEventArray["ID"]; // sanitize description here $Sanitizer = new CBXSanitizer(); $Sanitizer->SetLevel(CBXSanitizer::SECURE_LEVEL_LOW); $Sanitizer->ApplyHtmlSpecChars(false); $Sanitizer->DeleteSanitizedTags(true); $arModifyEventArray['BODY'] = trim($Sanitizer->SanitizeHtml($arModifyEventArray['BODY'])); $arFields = array("RESPONSIBLE_ID" => $arModifyEventArray["USER_ID"], "SITE_ID" => SITE_ID, "EXCHANGE_ID" => $arModifyEventArray["XML_ID"], "EXCHANGE_MODIFIED" => $arModifyEventArray["MODIFICATION_LABEL"], "TITLE" => $arModifyEventArray["SUBJECT"], "DESCRIPTION" => $arModifyEventArray["BODY"], "DESCRIPTION_IN_BBCODE" => 'N', "CREATED_DATE" => $arModifyEventArray["DATE_CREATE"], "PRIORITY" => self::$PriorityMapping[strtolower($arModifyEventArray["IMPORTANCE"])], "DURATION_FACT" => ceil($arModifyEventArray["ACTUAL_WORK"] / 60), "START_DATE_PLAN" => $arModifyEventArray["START_DATE"], "DEADLINE" => $arModifyEventArray["DUE_DATE"], "STATUS" => self::$StatusMapping[strtolower($arModifyEventArray["STATUS"])], "DURATION_PLAN" => ceil($arModifyEventArray["TOTAL_WORK"] / 60), "DURATION_TYPE" => "hours"); $arExtraFields = array(); if (isset($arModifyEventArray['ExtendedProperty']) && is_array($arModifyEventArray['ExtendedProperty'])) { foreach ($arModifyEventArray['ExtendedProperty'] as $arExtendedProperty) { $arExtraFields[$arExtendedProperty['Name']] = $arExtendedProperty['Value']; } } if ($ID == 0) { $arFields["STATUS_CHANGED_BY"] = $arFields["CHANGED_BY"] = $arFields["CREATED_BY"] = $arFields["RESPONSIBLE_ID"]; $arFields["STATUS_CHANGED_DATE"] = $arFields["CHANGED_DATE"] = $arFields["CREATED_DATE"]; $ID = $DB->Add("b_tasks", $arFields, array("DESCRIPTION"), "tasks"); if ($ID) { $arFields["ID"] = $ID; CTaskNotifications::SendAddMessage($arFields); $arLogFields = array("TASK_ID" => $ID, "USER_ID" => $arFields["CREATED_BY"], "CREATED_DATE" => $arFields["CREATED_DATE"], "FIELD" => "NEW"); $log = new CTaskLog(); $log->Add($arLogFields); } } else { $strUpdate = $DB->PrepareUpdate("b_tasks", $arFields, "tasks"); $strSql = "UPDATE b_tasks SET " . $strUpdate . " WHERE ID=" . $ID; $arBinds = array('DESCRIPTION' => $arFields['DESCRIPTION']); $result = $DB->QueryBind($strSql, $arBinds, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if ($result) { $rsTask = CTasks::GetByID($ID, false); if ($arTask = $rsTask->Fetch()) { $arFields["CHANGED_BY"] = $arFields["RESPONSIBLE_ID"]; $arFields["CHANGED_DATE"] = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() + CTimeZone::GetOffset()); CTaskNotifications::SendUpdateMessage($arFields, $arTask); $arChanges = CTaskLog::GetChanges($arTask, $arFields); foreach ($arChanges as $key => $value) { $arLogFields = array("TASK_ID" => $ID, "USER_ID" => $arFields["CHANGED_BY"], "CREATED_DATE" => $arFields["CHANGED_DATE"], "FIELD" => $key, "FROM_VALUE" => $value["FROM_VALUE"], "TO_VALUE" => $value["TO_VALUE"]); $log = new CTaskLog(); $log->Add($arLogFields); } } } } }
/** * Sanitize tasks description if sanitizer enabled in task module options */ public static function SanitizeHtmlDescriptionIfNeed($rawHtml) { static $bUseHtmlSanitizer = null; static $oSanitizer = null; // Init sanitizer (if we need it) only once at hit if ($bUseHtmlSanitizer === null) { $bSanitizeLevel = COption::GetOptionString('tasks', 'sanitize_level'); if ($bSanitizeLevel >= 0) { $bUseHtmlSanitizer = true; if (!in_array($bSanitizeLevel, array(CBXSanitizer::SECURE_LEVEL_HIGH, CBXSanitizer::SECURE_LEVEL_MIDDLE, CBXSanitizer::SECURE_LEVEL_LOW))) { $bSanitizeLevel = CBXSanitizer::SECURE_LEVEL_HIGH; } $oSanitizer = new CBXSanitizer(); $oSanitizer->SetLevel($bSanitizeLevel); $oSanitizer->AddTags(array('blockquote' => array('style', 'class', 'id'), 'colgroup' => array('style', 'class', 'id'), 'col' => array('style', 'class', 'id', 'width', 'height', 'span', 'style'))); $oSanitizer->ApplyHtmlSpecChars(true); // if we don't disable this, than text such as "df 1 < 2 dasfa and 5 > 4 will be partially lost" $oSanitizer->DeleteSanitizedTags(false); } else { $bUseHtmlSanitizer = false; } } if (!$bUseHtmlSanitizer) { return $rawHtml; } return $oSanitizer->SanitizeHtml(htmlspecialcharsback($rawHtml)); }