Пример #1
0
 public static function RenderProgressControl($arParams)
 {
     if (!is_array($arParams)) {
         return '';
     }
     CCrmComponentHelper::RegisterScriptLink('/bitrix/js/crm/progress_control.js');
     $entityTypeName = isset($arParams['ENTITY_TYPE_NAME']) ? $arParams['ENTITY_TYPE_NAME'] : '';
     $leadTypeName = CCrmOwnerType::ResolveName(CCrmOwnerType::Lead);
     $dealTypeName = CCrmOwnerType::ResolveName(CCrmOwnerType::Deal);
     $invoiceTypeName = CCrmOwnerType::ResolveName(CCrmOwnerType::Invoice);
     $quoteTypeName = CCrmOwnerType::ResolveName(CCrmOwnerType::Quote);
     $infos = isset($arParams['INFOS']) ? $arParams['INFOS'] : null;
     if (!is_array($infos) || empty($infos)) {
         if ($entityTypeName === $leadTypeName) {
             if (!self::$LEAD_STATUSES) {
                 self::$LEAD_STATUSES = CCrmStatus::GetStatus('STATUS');
             }
             $infos = self::$LEAD_STATUSES;
         } elseif ($entityTypeName === $dealTypeName) {
             if (!self::$DEAL_STAGES) {
                 self::$DEAL_STAGES = CCrmStatus::GetStatus('DEAL_STAGE');
             }
             $infos = self::$DEAL_STAGES;
         } elseif ($entityTypeName === $quoteTypeName) {
             if (!self::$QUOTE_STATUSES) {
                 self::$QUOTE_STATUSES = CCrmStatus::GetStatus('QUOTE_STATUS');
             }
             $infos = self::$QUOTE_STATUSES;
         } elseif ($entityTypeName === $invoiceTypeName) {
             if (!self::$INVOICE_STATUSES) {
                 self::$INVOICE_STATUSES = CCrmStatus::GetStatus('INVOICE_STATUS');
             }
             $infos = self::$INVOICE_STATUSES;
         }
     }
     if (!is_array($infos) || empty($infos)) {
         return '';
     }
     $registerSettings = isset($arParams['REGISTER_SETTINGS']) && is_bool($arParams['REGISTER_SETTINGS']) ? $arParams['REGISTER_SETTINGS'] : false;
     $registrationScript = '';
     if ($registerSettings) {
         if ($entityTypeName === $leadTypeName) {
             $registrationScript = self::RenderLeadStatusSettings();
         } elseif ($entityTypeName === $dealTypeName) {
             $registrationScript = self::RenderDealStageSettings();
         } elseif ($entityTypeName === $quoteTypeName) {
             $registrationScript = self::RenderQuoteStatusSettings();
         } elseif ($entityTypeName === $invoiceTypeName) {
             $registrationScript = self::RenderInvoiceStatusSettings();
         }
     }
     $finalID = isset($arParams['FINAL_ID']) ? $arParams['FINAL_ID'] : '';
     if ($finalID === '') {
         if ($entityTypeName === $leadTypeName) {
             $finalID = 'CONVERTED';
         } elseif ($entityTypeName === $dealTypeName) {
             $finalID = 'WON';
         } elseif ($entityTypeName === $quoteTypeName) {
             $finalID = 'APPROVED';
         } elseif ($entityTypeName === $invoiceTypeName) {
             $finalID = 'P';
         }
     }
     $finalUrl = isset($arParams['FINAL_URL']) ? $arParams['FINAL_URL'] : '';
     if ($finalUrl === '' && $entityTypeName === $leadTypeName) {
         $arParams['FINAL_URL'] = isset($arParams['LEAD_CONVERT_URL']) ? $arParams['LEAD_CONVERT_URL'] : '';
     }
     $currentInfo = null;
     $currentID = isset($arParams['CURRENT_ID']) ? $arParams['CURRENT_ID'] : '';
     if ($currentID !== '' && isset($infos[$currentID])) {
         $currentInfo = $infos[$currentID];
     }
     $currentSort = is_array($currentInfo) && isset($currentInfo['SORT']) ? intval($currentInfo['SORT']) : -1;
     $finalInfo = null;
     if ($finalID !== '' && isset($infos[$finalID])) {
         $finalInfo = $infos[$finalID];
     }
     $finalSort = is_array($finalInfo) && isset($finalInfo['SORT']) ? intval($finalInfo['SORT']) : -1;
     $isSuccessful = $currentSort === $finalSort;
     $isFailed = $currentSort > $finalSort;
     $stepHtml = '';
     foreach ($infos as &$info) {
         $ID = isset($info['STATUS_ID']) ? $info['STATUS_ID'] : '';
         $sort = isset($info['SORT']) ? intval($info['SORT']) : 0;
         if ($sort > $finalSort) {
             break;
         }
         $stepHtml .= '<td class="crm-list-stage-bar-part';
         if ($sort <= $currentSort) {
             $stepHtml .= ' crm-list-stage-passed';
         }
         $stepHtml .= '"><div class="crm-list-stage-bar-block  crm-stage-' . htmlspecialcharsbx(strtolower($ID)) . '"><div class="crm-list-stage-bar-btn"></div></div></td>';
     }
     unset($info);
     $wrapperClass = '';
     if ($isSuccessful) {
         $wrapperClass = ' crm-list-stage-end-good';
     } elseif ($isFailed) {
         $wrapperClass = ' crm-list-stage-end-bad';
     }
     $prefix = isset($arParams['PREFIX']) ? $arParams['PREFIX'] : '';
     $entityID = isset($arParams['ENTITY_ID']) ? intval($arParams['ENTITY_ID']) : 0;
     $controlID = isset($arParams['CONTROL_ID']) ? $arParams['CONTROL_ID'] : '';
     if ($controlID === '') {
         $controlID = $entityTypeName !== '' && $entityID > 0 ? "{$prefix}{$entityTypeName}_{$entityID}" : uniqid($prefix);
     }
     $isReadOnly = isset($arParams['READ_ONLY']) ? (bool) $arParams['READ_ONLY'] : false;
     $legendContainerID = isset($arParams['LEGEND_CONTAINER_ID']) ? $arParams['LEGEND_CONTAINER_ID'] : '';
     $displayLegend = $legendContainerID === '' && (!isset($arParams['DISPLAY_LEGEND']) || $arParams['DISPLAY_LEGEND']);
     $legendHtml = '';
     if ($displayLegend) {
         $legendHtml = '<div class="crm-list-stage-bar-title">' . htmlspecialcharsbx(isset($infos[$currentID]) && isset($infos[$currentID]['NAME']) ? $infos[$currentID]['NAME'] : $currentID) . '</div>';
     }
     return $registrationScript . '<div class="crm-list-stage-bar' . $wrapperClass . '" id="' . htmlspecialcharsbx($controlID) . '"><table class="crm-list-stage-bar-table"><tr>' . $stepHtml . '</tr></table>' . '<script type="text/javascript">BX.ready(function(){ BX.CrmProgressControl.create("' . CUtil::JSEscape($controlID) . '"' . ', BX.CrmParamBag.create({"containerId": "' . CUtil::JSEscape($controlID) . '"' . ', "entityType":"' . CUtil::JSEscape($entityTypeName) . '"' . ', "entityId":"' . CUtil::JSEscape($entityID) . '"' . ', "legendContainerId":"' . CUtil::JSEscape($legendContainerID) . '"' . ', "serviceUrl":"' . (isset($arParams['SERVICE_URL']) ? CUtil::JSEscape($arParams['SERVICE_URL']) : '') . '"' . ', "finalUrl":"' . (isset($arParams['FINAL_URL']) ? CUtil::JSEscape($arParams['FINAL_URL']) : '') . '"' . ', "finalScript":"' . (isset($arParams['FINAL_SCRIPT']) ? CUtil::JSEscape($arParams['FINAL_SCRIPT']) : '') . '"' . ', "currentStepId":"' . CUtil::JSEscape($currentID) . '"' . ', "readOnly":' . ($isReadOnly ? 'true' : 'false') . ' }));});</script>' . '</div>' . $legendHtml;
 }