Exemple #1
0
 private static function CheckFields($action, &$fields, $ID, $params = null)
 {
     global $DB;
     self::ClearErrors();
     if (!(is_array($fields) && count($fields) > 0)) {
         self::RegisterError(array('text' => 'Fields is not specified.'));
         return false;
     }
     if ($action == 'ADD') {
         // Validation
         if (!isset($fields['OWNER_ID'])) {
             self::RegisterError(array('text' => 'OWNER_ID is not assigned.'));
         }
         if (!isset($fields['OWNER_TYPE_ID'])) {
             self::RegisterError(array('text' => 'OWNER_TYPE_ID is not assigned.'));
         }
         if (!isset($fields['TYPE_ID'])) {
             self::RegisterError(array('text' => 'TYPE_ID is not assigned.'));
         } elseif (!CCrmActivityType::IsDefined($fields['TYPE_ID'])) {
             self::RegisterError(array('text' => 'TYPE_ID is not supported.'));
         }
         if (!isset($fields['SUBJECT'])) {
             self::RegisterError(array('text' => 'SUBJECT is not assigned.'));
         }
         //			if (!isset($fields['START_TIME'])) //is allowed for tasks
         //			{
         //				self::RegisterError(array('text' => 'START_TIME is not assigned.'));
         //			}
         if (!isset($fields['RESPONSIBLE_ID'])) {
             self::RegisterError(array('text' => 'RESPONSIBLE_ID is not assigned.'));
         }
         if (!isset($fields['NOTIFY_TYPE'])) {
             $fields['NOTIFY_TYPE'] = CCrmActivityNotifyType::None;
         }
         if ($fields['NOTIFY_TYPE'] == CCrmActivityNotifyType::None) {
             $fields['NOTIFY_VALUE'] = 0;
         } elseif (!isset($fields['NOTIFY_VALUE'])) {
             self::RegisterError(array('text' => 'NOTIFY_VALUE is not assigned.'));
         }
         if (isset($fields['COMPLETED'])) {
             $completed = strtoupper(strval($fields['COMPLETED']));
             if (!($completed == 'Y' || $completed == 'N')) {
                 $completed = intval($fields['COMPLETED']) > 0 ? 'Y' : 'N';
             }
             $fields['COMPLETED'] = $completed;
         } else {
             $fields['COMPLETED'] = 'N';
         }
         if (isset($fields['CREATED'])) {
             unset($fields['CREATED']);
         }
         if (isset($fields['LAST_UPDATED'])) {
             unset($fields['LAST_UPDATED']);
         }
         $fields['~CREATED'] = $fields['~LAST_UPDATED'] = $DB->CurrentTimeFunction();
         if (!isset($fields['AUTHOR_ID'])) {
             $currentUserId = CCrmPerms::GetCurrentUserID();
             $fields['AUTHOR_ID'] = $currentUserId > 0 ? $currentUserId : $fields['RESPONSIBLE_ID'];
         }
         $fields['EDITOR_ID'] = $fields['AUTHOR_ID'];
         if (!isset($fields['END_TIME']) && isset($fields['START_TIME'])) {
             $fields['END_TIME'] = $fields['START_TIME'];
         } elseif (!isset($fields['START_TIME']) && isset($fields['END_TIME'])) {
             $fields['START_TIME'] = $fields['END_TIME'];
         }
         //DEADLINE -->
         if (isset($fields['DEADLINE'])) {
             unset($fields['DEADLINE']);
         }
         $typeID = intval($fields['TYPE_ID']);
         if ($typeID === CCrmActivityType::Task && isset($fields['END_TIME'])) {
             $fields['DEADLINE'] = $fields['END_TIME'];
         } elseif ($typeID !== CCrmActivityType::Task && isset($fields['START_TIME'])) {
             $fields['DEADLINE'] = $fields['START_TIME'];
         }
         if (!isset($fields['DEADLINE'])) {
             $fields['~DEADLINE'] = CCrmDateTimeHelper::GetMaxDatabaseDate();
         }
         //<-- DEADLINE
         if (!isset($fields['ASSOCIATED_ENTITY_ID'])) {
             $fields['ASSOCIATED_ENTITY_ID'] = 0;
         }
         if (!isset($fields['PRIORITY'])) {
             $fields['PRIORITY'] = CCrmActivityPriority::Low;
         }
         if (!isset($fields['DIRECTION'])) {
             $fields['DIRECTION'] = CCrmActivityDirection::Undefined;
         }
         if (!isset($fields['DESCRIPTION_TYPE'])) {
             $fields['DESCRIPTION_TYPE'] = CCrmContentType::PlainText;
         }
         if (!isset($arFields['STORAGE_TYPE_ID'])) {
             $arFields['STORAGE_TYPE_ID'] = self::GetDefaultStorageTypeID();
         }
         if (!isset($arFields['PARENT_ID'])) {
             $arFields['PARENT_ID'] = 0;
         }
     } else {
         $prevFields = is_array($params) && isset($params['PREVIOUS_FIELDS']) && is_array($params['PREVIOUS_FIELDS']) ? $params['PREVIOUS_FIELDS'] : null;
         if (!is_array($prevFields) && !self::Exists($ID, false)) {
             self::RegisterError(array('text' => "Could not find CrmActivity(ID = {$ID})"));
         }
         if (isset($fields['COMPLETED'])) {
             $completed = strtoupper(strval($fields['COMPLETED']));
             if (!($completed == 'Y' || $completed == 'N')) {
                 $completed = intval($fields['COMPLETED']) > 0 ? 'Y' : 'N';
             }
             $fields['COMPLETED'] = $completed;
         }
         // Default settings
         if (isset($fields['CREATED'])) {
             unset($fields['CREATED']);
         }
         if (isset($fields['LAST_UPDATED'])) {
             unset($fields['LAST_UPDATED']);
         }
         $fields['~LAST_UPDATED'] = $DB->CurrentTimeFunction();
         if (!isset($fields['EDITOR_ID'])) {
             $userID = isset($fields['AUTHOR_ID']) ? $fields['AUTHOR_ID'] : 0;
             if ($userID <= 0) {
                 $userID = CCrmPerms::GetCurrentUserID();
             }
             $fields['EDITOR_ID'] = $userID > 0 ? $userID : $fields['RESPONSIBLE_ID'];
         }
         unset($fields['AUTHOR_ID']);
         // TYPE_ID -->
         if (isset($fields['TYPE_ID'])) {
             unset($fields['TYPE_ID']);
         }
         // <-- TYPE_ID
         //DEADLINE -->
         if (isset($fields['DEADLINE'])) {
             unset($fields['DEADLINE']);
         }
         $typeID = isset($prevFields['TYPE_ID']) ? intval($prevFields['TYPE_ID']) : CCrmActivityType::Undefined;
         if ($typeID === CCrmActivityType::Task && isset($fields['END_TIME'])) {
             $fields['DEADLINE'] = $fields['END_TIME'];
         } elseif ($typeID !== CCrmActivityType::Task && isset($fields['START_TIME'])) {
             $fields['DEADLINE'] = $fields['START_TIME'];
         }
         //<-- DEADLINE
     }
     return self::GetErrorCount() == 0;
 }
Exemple #2
0
 public static function PrepareFilter(&$arFilter, $arFilter2Logic = null)
 {
     if (!is_array($arFilter2Logic)) {
         $arFilter2Logic = array('TITLE', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'POST', 'ADDRESS', 'COMMENTS');
     }
     // converts data from filter
     if (isset($arFilter['FIND_list']) && !empty($arFilter['FIND'])) {
         $arFilter[strtoupper($arFilter['FIND_list'])] = $arFilter['FIND'];
         unset($arFilter['FIND_list'], $arFilter['FIND']);
     }
     static $arImmutableFilters = array('FM', 'ID', 'COMPANY_ID', 'ASSIGNED_BY_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID', 'TYPE_ID', 'SOURCE_ID', 'GRID_FILTER_APPLIED', 'GRID_FILTER_ID');
     foreach ($arFilter as $k => $v) {
         if (in_array($k, $arImmutableFilters, true)) {
             continue;
         }
         $arMatch = array();
         if ($k === 'ORIGINATOR_ID') {
             // HACK: build filter by internal entities
             $arFilter['=ORIGINATOR_ID'] = $v !== '__INTERNAL' ? $v : null;
             unset($arFilter[$k]);
         } elseif ($k === 'ADDRESS' || $k === 'ADDRESS_2' || $k === 'ADDRESS_CITY' || $k === 'ADDRESS_REGION' || $k === 'ADDRESS_PROVINCE' || $k === 'ADDRESS_POSTAL_CODE' || $k === 'ADDRESS_COUNTRY') {
             $arFilter["=%{$k}"] = "{$v}%";
             unset($arFilter[$k]);
         } elseif (preg_match('/(.*)_from$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) {
             if (strlen($v) > 0) {
                 $arFilter['>=' . $arMatch[1]] = $v;
             }
             unset($arFilter[$k]);
         } elseif (preg_match('/(.*)_to$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) {
             if (strlen($v) > 0) {
                 if (($arMatch[1] == 'DATE_CREATE' || $arMatch[1] == 'DATE_MODIFY') && !preg_match('/\\d{1,2}:\\d{1,2}(:\\d{1,2})?$/' . BX_UTF_PCRE_MODIFIER, $v)) {
                     $v = CCrmDateTimeHelper::SetMaxDayTime($v);
                 }
                 $arFilter['<=' . $arMatch[1]] = $v;
             }
             unset($arFilter[$k]);
         } elseif (in_array($k, $arFilter2Logic)) {
             // Bugfix #26956 - skip empty values in logical filter
             $v = trim($v);
             if ($v !== '') {
                 $arFilter['?' . $k] = $v;
             }
             unset($arFilter[$k]);
         } elseif ($k != 'ID' && $k != 'LOGIC' && $k != '__INNER_FILTER' && strpos($k, 'UF_') !== 0 && preg_match('/^[^\\=\\%\\?\\>\\<]{1}/', $k) === 1) {
             $arFilter['%' . $k] = $v;
             unset($arFilter[$k]);
         }
     }
 }
    public static function RenderNearestActivity($arParams)
    {
        $gridManagerID = isset($arParams['GRID_MANAGER_ID']) ? $arParams['GRID_MANAGER_ID'] : '';
        $mgrID = strtolower($gridManagerID);
        $entityTypeName = isset($arParams['ENTITY_TYPE_NAME']) ? strtolower($arParams['ENTITY_TYPE_NAME']) : '';
        $entityID = isset($arParams['ENTITY_ID']) ? $arParams['ENTITY_ID'] : '';
        $allowEdit = isset($arParams['ALLOW_EDIT']) ? $arParams['ALLOW_EDIT'] : false;
        $menuItems = isset($arParams['MENU_ITEMS']) ? $arParams['MENU_ITEMS'] : array();
        $menuID = CUtil::JSEscape("bx_{$mgrID}_{$entityTypeName}_{$entityID}_activity_add");
        $ID = isset($arParams['ACTIVITY_ID']) ? intval($arParams['ACTIVITY_ID']) : 0;
        if ($ID > 0) {
            $subject = isset($arParams['ACTIVITY_SUBJECT']) ? $arParams['ACTIVITY_SUBJECT'] : '';
            $time = isset($arParams['ACTIVITY_TIME']) ? $arParams['ACTIVITY_TIME'] : '';
            if ($time !== '' && CCrmDateTimeHelper::IsMaxDatabaseDate($time)) {
                $time = '';
            }
            $timestamp = $time !== '' ? MakeTimeStamp($time) : 0;
            $timeFormatted = $timestamp > 0 ? CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', $timestamp)) : GetMessage('CRM_ACTIVITY_TIME_NOT_SPECIFIED');
            $isExpired = isset($arParams['ACTIVITY_EXPIRED']) ? $arParams['ACTIVITY_EXPIRED'] : $timestamp <= time() + CTimeZone::GetOffset();
            $result = '<div class="crm-nearest-activity-wrapper"><div class="crm-list-deal-date crm-nearest-activity-time' . ($isExpired ? '-expiried' : '') . '"><a class="crm-link" target = "_self" href = "#"
				onclick="BX.CrmInterfaceGridManager.viewActivity(\'' . CUtil::JSEscape($gridManagerID) . '\', ' . $ID . ', { enableEditButton:' . ($allowEdit ? 'true' : 'false') . ' }); return false;">' . htmlspecialcharsbx($timeFormatted) . '</a></div><div class="crm-nearest-activity-subject">' . htmlspecialcharsbx($subject) . '</div>';
            if ($allowEdit && !empty($menuItems)) {
                $result .= '<div class="crm-nearest-activity-plus" onclick="BX.CrmInterfaceGridManager.showMenu(\'' . $menuID . '\', this);"></div>
					<script type="text/javascript">BX.CrmInterfaceGridManager.createMenu("' . $menuID . '", ' . CUtil::PhpToJSObject($menuItems) . ');</script>';
            }
            $result .= '</div>';
            $responsibleID = isset($arParams['ACTIVITY_RESPONSIBLE_ID']) ? intval($arParams['ACTIVITY_RESPONSIBLE_ID']) : 0;
            if ($responsibleID > 0) {
                $nameTemplate = isset($arParams['NAME_TEMPLATE']) ? $arParams['NAME_TEMPLATE'] : '';
                if ($nameTemplate === '') {
                    $nameTemplate = CSite::GetNameFormat(false);
                }
                $responsibleFullName = CUser::FormatName($nameTemplate, array('LOGIN' => isset($arParams['ACTIVITY_RESPONSIBLE_LOGIN']) ? $arParams['ACTIVITY_RESPONSIBLE_LOGIN'] : '', 'NAME' => isset($arParams['ACTIVITY_RESPONSIBLE_NAME']) ? $arParams['ACTIVITY_RESPONSIBLE_NAME'] : '', 'LAST_NAME' => isset($arParams['ACTIVITY_RESPONSIBLE_LAST_NAME']) ? $arParams['ACTIVITY_RESPONSIBLE_LAST_NAME'] : '', 'SECOND_NAME' => isset($arParams['ACTIVITY_RESPONSIBLE_SECOND_NAME']) ? $arParams['ACTIVITY_RESPONSIBLE_SECOND_NAME'] : ''), true, false);
                $responsibleShowUrl = '';
                $pathToUserProfile = isset($arParams['PATH_TO_USER_PROFILE']) ? $arParams['PATH_TO_USER_PROFILE'] : '';
                if ($pathToUserProfile !== '') {
                    $responsibleShowUrl = CComponentEngine::MakePathFromTemplate($pathToUserProfile, array('user_id' => $responsibleID));
                }
                $result .= '<div class="crm-list-deal-responsible"><span class="crm-list-deal-responsible-grey">' . htmlspecialcharsbx(GetMessage('CRM_ENTITY_ACTIVITY_FOR_RESPONSIBLE')) . '</span><a class="crm-list-deal-responsible-name" target="_blank" href="' . htmlspecialcharsbx($responsibleShowUrl) . '">' . htmlspecialcharsbx($responsibleFullName) . '</a></div>';
            }
            return $result;
        } elseif ($allowEdit && !empty($menuItems)) {
            return '<span class="crm-activity-add-hint">' . htmlspecialcharsbx(GetMessage('CRM_ENTITY_ADD_ACTIVITY_HINT')) . '</span>
				<a class="crm-activity-add" onclick="BX.CrmInterfaceGridManager.showMenu(\'' . $menuID . '\', this); return false;">' . htmlspecialcharsbx(GetMessage('CRM_ENTITY_ADD_ACTIVITY')) . '</a>
				<script type="text/javascript">BX.CrmInterfaceGridManager.createMenu("' . $menuID . '", ' . CUtil::PhpToJSObject($menuItems) . ');</script>';
        }
        return '';
    }
Exemple #4
0
             $activityFields['CAN_DELETE'] = CCrmActivity::CheckDeletePermission($ownerTypeID, $ownerID, $userPermissions);
         } else {
             $activityFields['CAN_EDIT'] = $activityFields['CAN_DELETE'] = true;
         }
     }
     $responsibleID = isset($activityFields['~RESPONSIBLE_ID']) ? intval($activityFields['~RESPONSIBLE_ID']) : 0;
     $activityFields['~RESPONSIBLE_ID'] = $responsibleID;
     if ($responsibleID <= 0) {
         $activityFields['RESPONSIBLE_FULL_NAME'] = '';
         $activityFields['PATH_TO_RESPONSIBLE'] = '';
     } elseif (!in_array($responsibleID, $responsibleIDs, true)) {
         $responsibleIDs[] = $responsibleID;
     }
     $activityFields['REFERENCE_TITLE'] = $ownerTypeID > 0 && $ownerID > 0 && ($ownerTypeID === CCrmOwnerType::Lead || $ownerTypeID === CCrmOwnerType::Deal) ? CCrmOwnerType::GetCaption($ownerTypeID, $ownerID, false) : '';
     $activityFields['CLIENT_TITLE'] = '';
     if (isset($activityFields['~DEADLINE']) && CCrmDateTimeHelper::IsMaxDatabaseDate($activityFields['~DEADLINE'])) {
         $activityFields['~DEADLINE'] = $activityFields['DEADLINE'] = '';
     }
     $activities[$itemID] =& $activityFields;
     unset($activityFields);
 }
 if (!empty($activities)) {
     $clientInfos = CCrmActivity::PrepareClientInfos(array_keys($activities));
     foreach ($clientInfos as $itemID => &$clientInfo) {
         $ttl = isset($clientInfo['TITLE']) ? $clientInfo['TITLE'] : '';
         if ($ttl === '') {
             $ttl = CCrmOwnerType::GetCaption($clientInfo['ENTITY_TYPE_ID'], $clientInfo['ENTITY_ID']);
         }
         $activities[$itemID]['CLIENT_TITLE'] = $ttl;
     }
     unset($clientInfo);
Exemple #5
0
    $descriptionType = isset($arRes['DESCRIPTION_TYPE']) ? intval($arRes['DESCRIPTION_TYPE']) : CCrmContentType::PlainText;
    if ($descriptionType === CCrmContentType::BBCode) {
        $arRes['DESCRIPTION_HTML'] = $bbCodeParser->convertText($description);
        $arRes['DESCRIPTION_RAW'] = strip_tags(preg_replace('/(<br[^>]*>)+/is' . BX_UTF_PCRE_MODIFIER, "\n", $arRes['DESCRIPTION_HTML']));
        $arRes['ENABLE_DESCRIPTION_CUT'] = false;
    } elseif ($descriptionType === CCrmContentType::Html) {
        //Already sanitaized
        $arRes['DESCRIPTION_HTML'] = $description;
        $arRes['DESCRIPTION_RAW'] = html_entity_decode(strip_tags(preg_replace('/(<br[^>]*>)+/is' . BX_UTF_PCRE_MODIFIER, "\n", $description)));
        $arRes['ENABLE_DESCRIPTION_CUT'] = false;
    } else {
        $arRes['DESCRIPTION_HTML'] = preg_replace("/[\r\n]+/" . BX_UTF_PCRE_MODIFIER, "<br/>", htmlspecialcharsbx($description));
        $arRes['DESCRIPTION_RAW'] = $description;
        $arRes['ENABLE_DESCRIPTION_CUT'] = true;
    }
    if (isset($arRes['~DEADLINE']) && CCrmDateTimeHelper::IsMaxDatabaseDate($arRes['~DEADLINE'])) {
        $arRes['~DEADLINE'] = $arRes['DEADLINE'] = '';
    }
    $items[$itemID] = $arRes;
}
if ($displayClient && !empty($items)) {
    $clientInfos = CCrmActivity::PrepareClientInfos(array_keys($items));
    foreach ($clientInfos as $itemID => &$clientInfo) {
        $items[$itemID]['CLIENT_INFO'] = $clientInfo;
    }
    unset($clientInfo);
}
$arResult['ITEMS'] = array_values($items);
$responsibleInfos = array();
if (!empty($responsibleIDs)) {
    $dbUsers = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => implode('||', $responsibleIDs)), array('FIELDS' => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN')));
Exemple #6
0
 public static function PrepareFilter(&$arFilter, $arFilter2Logic = null)
 {
     if (!is_array($arFilter2Logic)) {
         $arFilter2Logic = array('TITLE', 'COMMENTS');
     }
     static $arImmutableFilters = array('FM', 'ID', 'ASSIGNED_BY_ID', 'CURRENCY_ID', 'CONTACT_ID', 'COMPANY_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID', 'PRODUCT_ROW_PRODUCT_ID', 'GRID_FILTER_APPLIED', 'GRID_FILTER_ID');
     foreach ($arFilter as $k => $v) {
         if (in_array($k, $arImmutableFilters, true)) {
             continue;
         }
         $arMatch = array();
         if (in_array($k, array('PRODUCT_ID', 'TYPE_ID', 'STAGE_ID', 'COMPANY_ID', 'CONTACT_ID'))) {
             // Bugfix #23121 - to suppress comparison by LIKE
             $arFilter['=' . $k] = $v;
             unset($arFilter[$k]);
         } elseif ($k === 'ORIGINATOR_ID') {
             // HACK: build filter by internal entities
             $arFilter['=ORIGINATOR_ID'] = $v !== '__INTERNAL' ? $v : null;
             unset($arFilter[$k]);
         } elseif (preg_match('/(.*)_from$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) {
             if (strlen($v) > 0) {
                 $arFilter['>=' . $arMatch[1]] = $v;
             }
             unset($arFilter[$k]);
         } elseif (preg_match('/(.*)_to$/i' . BX_UTF_PCRE_MODIFIER, $k, $arMatch)) {
             if (strlen($v) > 0) {
                 if (($arMatch[1] == 'DATE_CREATE' || $arMatch[1] == 'DATE_MODIFY') && !preg_match('/\\d{1,2}:\\d{1,2}(:\\d{1,2})?$/' . BX_UTF_PCRE_MODIFIER, $v)) {
                     $v = CCrmDateTimeHelper::SetMaxDayTime($v);
                 }
                 $arFilter['<=' . $arMatch[1]] = $v;
             }
             unset($arFilter[$k]);
         } elseif (in_array($k, $arFilter2Logic)) {
             // Bugfix #26956 - skip empty values in logical filter
             $v = trim($v);
             if ($v !== '') {
                 $arFilter['?' . $k] = $v;
             }
             unset($arFilter[$k]);
         } elseif ($k != 'ID' && $k != 'LOGIC' && $k != '__INNER_FILTER' && strpos($k, 'UF_') !== 0 && preg_match('/^[^\\=\\%\\?\\>\\<]{1}/', $k) === 1) {
             $arFilter['%' . $k] = $v;
             unset($arFilter[$k]);
         }
     }
 }