Your IP : 18.218.117.172


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/intranet.tasks_list/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/intranet.tasks_list/component.php

<?if(!Defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if (!CModule::IncludeModule("intranet"))
	return ShowError(GetMessage("EC_IBLOCK_MODULE_NOT_INSTALLED"));
if (!CModule::IncludeModule("iblock"))
	return ShowError(GetMessage("EC_IBLOCK_MODULE_NOT_INSTALLED"));
if (!CModule::IncludeModule("socialnetwork"))
	return ShowError(GetMessage("EC_SONET_MODULE_NOT_INSTALLED"));
if (!CModule::IncludeModule("bizproc"))
	return ShowError(GetMessage("EC_BIZPROC_MODULE_NOT_INSTALLED"));

require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/".$GLOBALS["DBType"]."/favorites.php");

$iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0);
$arParams["IBLOCK_ID"] = $iblockId;

$taskType = strtolower($arParams["TASK_TYPE"]);
if (!in_array($taskType, array("group", "user")))
	$taskType = "user";

global $USER, $APPLICATION;

$ownerId = IntVal($arParams["OWNER_ID"]);
if ($ownerId <= 0)
{
	$taskType = "user";
	$ownerId = $USER->GetID();
}
$ownerId = IntVal($ownerId);

$arParams["TASK_VAR"] = Trim($arParams["TASK_VAR"]);
if (StrLen($arParams["TASK_VAR"]) <= 0)
	$arParams["TASK_VAR"] = "task_id";

$arParams["GROUP_VAR"] = Trim($arParams["GROUP_VAR"]);
if (StrLen($arParams["GROUP_VAR"]) <= 0)
	$arParams["GROUP_VAR"] = "group_id";

$arParams["USER_VAR"] = Trim($arParams["USER_VAR"]);
if (StrLen($arParams["USER_VAR"]) <= 0)
	$arParams["USER_VAR"] = "user_id";

$arParams["VIEW_VAR"] = Trim($arParams["VIEW_VAR"]);
if (StrLen($arParams["VIEW_VAR"]) <= 0)
	$arParams["VIEW_VAR"] = "view_id";

$arParams["ACTION_VAR"] = Trim($arParams["ACTION_VAR"]);
if (StrLen($arParams["ACTION_VAR"]) <= 0)
	$arParams["ACTION_VAR"] = "action";

if (StrLen($arParams["PAGE_VAR"]) <= 0)
	$arParams["PAGE_VAR"] = "page";

$arParams["PATH_TO_GROUP_TASKS"] = Trim($arParams["PATH_TO_GROUP_TASKS"]);
if (StrLen($arParams["PATH_TO_GROUP_TASKS"]) <= 0)
	$arParams["PATH_TO_GROUP_TASKS"] = HtmlSpecialCharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=group_tasks&".$arParams["GROUP_VAR"]."=#group_id#");
$arParams["PATH_TO_USER_TASKS"] = Trim($arParams["PATH_TO_USER_TASKS"]);
if (StrLen($arParams["PATH_TO_USER_TASKS"]) <= 0)
	$arParams["PATH_TO_USER_TASKS"] = HtmlSpecialCharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=user_tasks&".$arParams["USER_VAR"]."=#user_id#");

$arParams["PATH_TO_GROUP_TASKS_TASK"] = Trim($arParams["PATH_TO_GROUP_TASKS_TASK"]);
if (StrLen($arParams["PATH_TO_GROUP_TASKS_TASK"]) <= 0)
	$arParams["PATH_TO_GROUP_TASKS_TASK"] = HtmlSpecialCharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=group_tasks_task&".$arParams["GROUP_VAR"]."=#group_id#&".$arParams["TASK_VAR"]."=#task_id#&".$arParams["ACTION_VAR"]."=#action#");
$arParams["PATH_TO_USER_TASKS_TASK"] = Trim($arParams["PATH_TO_USER_TASKS_TASK"]);
if (StrLen($arParams["PATH_TO_USER_TASKS_TASK"]) <= 0)
	$arParams["PATH_TO_USER_TASKS_TASK"] = HtmlSpecialCharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=user_tasks_task&".$arParams["USER_VAR"]."=#user_id#&".$arParams["TASK_VAR"]."=#task_id#&".$arParams["ACTION_VAR"]."=#action#");

$arParams["PATH_TO_GROUP_TASKS_VIEW"] = Trim($arParams["PATH_TO_GROUP_TASKS_VIEW"]);
if (StrLen($arParams["PATH_TO_GROUP_TASKS_VIEW"]) <= 0)
	$arParams["PATH_TO_GROUP_TASKS_VIEW"] = HtmlSpecialCharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=group_tasks_view&".$arParams["GROUP_VAR"]."=#group_id#&".$arParams["VIEW_VAR"]."=#view_id#&".$arParams["ACTION_VAR"]."=#action#");
$arParams["PATH_TO_USER_TASKS_VIEW"] = Trim($arParams["PATH_TO_USER_TASKS_VIEW"]);
if (StrLen($arParams["PATH_TO_USER_TASKS_VIEW"]) <= 0)
	$arParams["PATH_TO_USER_TASKS_VIEW"] = HtmlSpecialCharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=user_tasks_view&".$arParams["USER_VAR"]."=#user_id#&".$arParams["VIEW_VAR"]."=#view_id#&".$arParams["ACTION_VAR"]."=#action#");

if ($taskType == "user")
{
	$arParams["PATH_TO_TASKS"] = Str_Replace("#user_id#", "#owner_id#", $arParams["PATH_TO_USER_TASKS"]);
	$arParams["PATH_TO_TASKS_TASK"] = Str_Replace("#user_id#", "#owner_id#", $arParams["PATH_TO_USER_TASKS_TASK"]);
	$arParams["PATH_TO_TASKS_VIEW"] = Str_Replace("#user_id#", "#owner_id#", $arParams["PATH_TO_USER_TASKS_VIEW"]);
}
else
{
	$arParams["PATH_TO_TASKS"] = Str_Replace("#group_id#", "#owner_id#", $arParams["PATH_TO_GROUP_TASKS"]);
	$arParams["PATH_TO_TASKS_TASK"] = Str_Replace("#group_id#", "#owner_id#", $arParams["PATH_TO_GROUP_TASKS_TASK"]);
	$arParams["PATH_TO_TASKS_VIEW"] = Str_Replace("#group_id#", "#owner_id#", $arParams["PATH_TO_GROUP_TASKS_VIEW"]);
}

$arParams["ITEMS_COUNT"] = IntVal($arParams["ITEMS_COUNT"]);
if ($arParams["ITEMS_COUNT"] <= 0)
	$arParams["ITEMS_COUNT"] = 5;

if ($GLOBALS["USER"]->IsAuthorized())
{	
	$arResult["FatalError"] = "";

	$arParams["TASK_TYPE"] = $taskType;
	$arParams["OWNER_ID"] = $ownerId;

	if (strlen($arResult["FatalError"]) <= 0)
	{
		if (!CIntranetTasks::IsTasksFeatureActive($taskType, $ownerId))
			$arResult["FatalError"] .= GetMessage("INTE_TASKS_OFF").".";
	}

	if (strlen($arResult["FatalError"]) <= 0)
	{
		if (!CIntranetTasks::CanCurrentUserPerformOperation($taskType, $ownerId, "view"))
			$arResult["FatalError"] .= GetMessage("INTE_NO_SONET_PERMS").".";
	}

	if (strlen($arResult["FatalError"]) <= 0)
	{
		$globalParentSectionId = CIntranetTasks::InitializeIBlock($taskType, $ownerId, $arParams["FORUM_ID"]);
		if ($globalParentSectionId <= 0)
			$arResult["FatalError"] .= GetMessage("INTE_TASK_NOT_FOUND").". ";
	}

	if (strlen($arResult["FatalError"]) <= 0)
	{
		$arResult["TaskFields"] = CIntranetTasks::GetTaskFields($taskType, $ownerId);
		$arResult["TaskFields"]["TASKSTATUS"] = array(
			"NAME" => GetMessage("INTASK_L_TASKSTATUS"),
			"FULL_NAME" => GetMessage("INTASK_L_TASKSTATUS"),
			"FILTERABLE" => true,
		);
		$arResult["TaskFieldsMap"] = CIntranetTasks::GetTaskFieldsMap($arResult["TaskFields"]);
		$arResult["TaskFieldsMap"]["TASKSTATUS"] = "TASKSTATUS";


		$arTaskStatusOldLink = array();
		$arTaskStatusOldLinkMap = array("NOTACCEPTED" => "NotAccepted", "NOTSTARTED" => "NotStarted", "INPROGRESS" => "InProgress", "COMPLETED" => "Closed", "WAITING" => "Waiting", "DEFERRED" => "Deferred");
		$dbRes = CIBlockProperty::GetPropertyEnum("TaskStatus", Array("SORT" => "ASC"), Array("IBLOCK_ID" => $iblockId));
		while ($arRes = $dbRes->Fetch())
			$arTaskStatusOldLink[$arRes["ID"]] = $arTaskStatusOldLinkMap[strtoupper($arRes["XML_ID"])];
	}

	/**************************  SETTINGS  **********************************/
	if (StrLen($arResult["FatalError"]) <= 0)
	{
		for ($i = 0; $i < 3; $i++)
		{
			$orderBy = $arParams["ORDER_BY_".$i];
			$orderDir = $arParams["ORDER_DIR_".$i];

			$orderBy = StrToUpper(Trim($orderBy));
			if (Array_Key_Exists($orderBy, $arResult["TaskFieldsMap"]))
			{
				$arParams["ORDER_BY_".$i] = $arResult["TaskFieldsMap"][$orderBy];
				$arParams["ORDER_DIR_".$i] = StrToUpper(Trim($orderDir));
				if (!In_Array($arParams["ORDER_DIR_".$i], array("ASC", "DESC")))
					$arParams["ORDER_DIR_".$i] = "ASC";
			}
			else
			{
				$arParams["ORDER_BY_".$i] = "";
				$arParams["ORDER_DIR_".$i] = "";
			}
		}

		foreach ($arParams as $key => $value)
		{
			if (StrToLower(SubStr($key, 0, 4)) != "FLT_")
				continue;
			if (!Is_Array($value) && StrLen($value) <= 0 || Is_Array($value) && Count($value) <= 0)
				continue;

			$key = StrToUpper(SubStr($key, 4));

			if (Array_Key_Exists($key, $arResult["TaskFieldsMap"]) && $arResult["TaskFields"][$arResult["TaskFieldsMap"][$key]]["FILTERABLE"])
			{
				$realKey = $arResult["TaskFieldsMap"][$key];
				$arFld = $arResult["TaskFields"][$realKey];
				if ($arFld["Type"] == "datetime")
				{
					if ($value == "current")
						$arParams["FILTER"][$realKey] = Date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATE));
					else
						$arParams["FILTER"][$realKey] = $value;
				}
				elseif ($arFld["Type"] == "user")
				{
					if ($value == "current")
						$arParams["FILTER"][$realKey] = $GLOBALS["USER"]->GetID();
					else
						$arParams["FILTER"][$realKey] = $value;
				}
				else
				{
					$arParams["FILTER"][$realKey] = $value;
				}
			}
		}

		if (count($arParams["COLUMNS"]) <= 0)
		{
			$arParams["COLUMNS"] = array(
				"NAME", "PROPERTY_TASKASSIGNEDTO", "PROPERTY_TASKPRIORITY", "DATE_ACTIVE_FROM", "DATE_ACTIVE_TO", "TASKSTATUS", "PROPERTY_TASKCOMPLETE"
			);
		}

		$arParams["FILTER"]["!TASKSTATUS"] = "Closed";
	}
	/**************************  END SETTINGS  **********************************/

	/**************************  FILTER  **********************************/
	if (strlen($arResult["FatalError"]) <= 0)
	{
		$arResult["Error"] = "";

		$arResult["isCurrentUser"] = false;
		if ($taskType == "user")
			$arResult["isCurrentUser"] = ($ownerId == $GLOBALS["USER"]->GetID());

		$arOrderBy = array();
		for ($i = 0; $i < 3; $i++)
		{
			if (strlen($arParams["ORDER_BY_".$i]) <= 0)
				continue;

			if (array_key_exists($arParams["ORDER_BY_".$i], $arResult["TaskFields"]))
			{
				$arParams["ORDER_DIR_".$i] = (strtoupper($arParams["ORDER_DIR_".$i]) == "ASC" ? "ASC" : "DESC");
				$arOrderBy[$arParams["ORDER_BY_".$i]] = $arParams["ORDER_DIR_".$i];
			}
		}

		if (count($arOrderBy) <= 0)
		{
			$arOrderBy = array(
				"DATE_ACTIVE_TO" => "ASC",
				"PROPERTY_TASKPRIORITY" => "ASC",
			);
		}

		if (count($arOrderBy) < 3)
			$arOrderBy["SORT"] = "ASC";
	}
	/**************************  END FILTER  **********************************/

	if (strlen($arResult["FatalError"]) <= 0)
	{
		$arSectionsChain = array();
		if (is_array($arParams["FILTER"]))
		{
			foreach ($arParams["FILTER"] as $key => $value)
			{
				$op = "";
				$opTmp = substr($key, 0, 1);
				if (in_array($opTmp, array("!", "<", ">")))
				{
					$op = $opTmp;
					$key = substr($key, 1);
				}

				if (array_key_exists($key, $arResult["TaskFields"]) && $arResult["TaskFields"][$key]["FILTERABLE"])
				{
					if ($key == "IBLOCK_SECTION_ID")
					{
						$bFirst = true;
						$dbSectionsChain = CIBlockSection::GetNavChain($iblockId, $value);
						while ($arSect = $dbSectionsChain->GetNext())
						{
							if ($bFirst)
							{
								if ($globalParentSectionId > 0 && $arSect["ID"] != $globalParentSectionId)
									break;
								$bFirst = false;
								continue;
							}
							$arSectionsChain[] = $arSect;
						}
						if (!$bFirst)
							$arFilter["SECTION_ID"] = $value;
					}
					else
					{
						$arFilter[$op.$key] = $value;
					}
				}
			}
		}

		$arFilter["CHECK_BP_TASKS_PERMISSIONS"] = $taskType."_".$ownerId."_read";

		$strCurrentUrlTmp = $GLOBALS["APPLICATION"]->GetCurPageParam("", array("back_url"));
		$strUrlAppendix = "back_url=".urlencode($strCurrentUrlTmp);
		if (array_key_exists("flt_iblock_section", $_REQUEST))
		{
			$fsId = intval($_REQUEST["flt_iblock_section"]);
			if ($fsId > 0)
				$strUrlAppendix .= "&flt_iblock_section=".$fsId;
		}

		$arNavStartParams = array("nPageSize" => $arParams["ITEMS_COUNT"], "bShowAll" => false, "bDescPageNumbering" => false);
		$arNavigation = CDBResult::GetNavParams($arNavStartParams);

		$arSelectFields = array("ID", "NAME", "IBLOCK_ID", "CREATED_BY", "DATE_ACTIVE_FROM", "DATE_ACTIVE_TO", "DETAIL_TEXT");
		foreach ($arParams["COLUMNS"] as $field)
		{
			if (!in_array($field, $arSelectFields) && array_key_exists($field, $arResult["TaskFieldsMap"]))
				$arSelectFields[] = $field;
		}

		$arResult["TasksPropsShow"] = array();
		foreach ($arParams["COLUMNS"] as $field)
		{
			if (array_key_exists($field, $arResult["TaskFieldsMap"]))
				$arResult["TasksPropsShow"][] = $arResult["TaskFieldsMap"][$field];
		}

		$arPermsCache = array();
		$dbTasksList = false;
		$arTasksListArray = array();

		if ($taskType == "user")
		{
			//if (!$arResult["isCurrentUser"])
			$arFilter["PROPERTY_TASKASSIGNEDTO"] = $ownerId;
		}
		else
		{
			$arFilter["SECTION_ID"] = $globalParentSectionId;
			$arFilter["INCLUDE_SUBSECTIONS"] = "Y";
		}

		//echo "<pre><b>CIBlockElement::GetList</b>\n".print_r(array($arOrderBy, $arFilter, false, $arNavStartParams, $arSelectFields), true)."</pre>";
		//echo "<pre>".print_r($arFilter, true)."</pre>";

		$dbTasksList = CIntranetTasks::GetList(
			$arOrderBy,
			$arFilter,
			false,
			$arNavStartParams,
			$arSelectFields
		);
		$dbTasksList->NavStart($arParams["ITEMS_COUNT"]);
		while ($arTask = $dbTasksList->Fetch())
		{
			$currentTaskAssignedToUser = $arTask["PROPERTY_TaskAssignedTo"];

			$currentTaskStatusId = $arTask["DocumentState"]["STATE_NAME"];
			$currentTaskStatus = $arTask["DocumentState"]["STATE_TITLE"];

			if (is_array($arTask["DocumentState"]["PROPERTY_TaskPriority"]))
			{
				foreach ($arTask["DocumentState"]["PROPERTY_TaskPriority"] as $k => $v)
				{
					$currentTaskPriorityId = $k;
					$currentTaskPriority = $v;
				}
			}

			$arTask["TASKSTATUS_PRINTABLE"] = $arTask["DocumentState"]["STATE_TITLE"];
			if (is_array($arTask["PROPERTY_TaskPriority_PRINTABLE"]))
			{
				foreach ($arTask["PROPERTY_TaskPriority_PRINTABLE"] as $v)
					$arTask["TASKPRIORITY_PRINTABLE"] = trim($v);
			}

			if ($arTask["TaskType"] == "group")
				$p1 = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP_TASKS_TASK"], array("group_id" => $arTask["OwnerId"], "task_id" => $arTask["ID"], "action" => "view"));
			else
				$p1 = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_TASKS_TASK"], array("user_id" => $arTask["OwnerId"], "task_id" => $arTask["ID"], "action" => "view"));

			$arResult["Tasks"][] = array(
				"FIELDS" => $arTask,
				"VIEW_URL" => $p1.(StrPos($p1, "?") === false ? "?" : "&").$strUrlAppendix,
				"IS_CURRENT_USER_TASK" => ($currentTaskAssignedToUser == $GLOBALS["USER"]->GetID()),
				"TASK_STATUS" => $currentTaskStatusId,
				"TASK_PRIORITY" => $currentTaskPriority,
			);
		}
	}
	//echo "<pre>".print_r($arResult, true)."</pre>";

	$this->IncludeComponentTemplate();
}
?>