Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.94 KB | None | 0 0
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  2. if(!isset($arParams["CACHE_TIME"]))
  3.     $arParams["CACHE_TIME"] = 0;
  4.  
  5. if($this->StartResultCache(false, ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups())))
  6. {
  7.     if(!CModule::IncludeModule("iblock"))
  8.     {
  9.         $this->AbortResultCache();
  10.         ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
  11.         return;
  12.     }
  13.    
  14.     if($_POST['gen']=='Y'){
  15.    
  16.         $res = CIBlockSection::GetList(array("SORT"=>"ASC"), array("IBLOCK_ID" => $arParams["IBLOCK_ID"]), false, array("ID", "NAME"), false);
  17.         while($ob = $res->GetNextElement()){ $arSection[] = $ob->GetFields(); }
  18.    
  19.         $arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"]);
  20.  
  21.         $arSelect = array("ID", "NAME", "IBLOCK_SECTION_ID", "CATALOG_GROUP_".$arParams['PRICE_CODE']);
  22.         $arProperties=array();
  23.         if($arParams["FIELD_CODE"]){
  24.             foreach ($arParams["FIELD_CODE"] as $data){
  25.                 $arProperties[] = $data;
  26.             }
  27.         }
  28.    
  29.         if($arParams["PROPERTY_CODE"]){
  30.             foreach ($arParams["PROPERTY_CODE"] as $data){
  31.                 $arSelect[] = "PROPERTY_".$data;
  32.                 $arProperties[] = "PROPERTY_".$data."_VALUE";
  33.             }
  34.         }
  35.        
  36.         $arFieldsName=array();
  37.         $arParams["FIELD_CODE_NAME"]=array('ID'=>'ID', 'NAME'=>GetMessage("NAME"));
  38.         foreach($arParams["FIELD_CODE"] as $data){
  39.             if(array_key_exists($data, $arParams["FIELD_CODE_NAME"])) $arFieldsName[]=$arParams["FIELD_CODE_NAME"][$data];
  40.         }
  41.    
  42.         $properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"]));
  43.         while ($prop_fields = $properties->GetNext())
  44.         {
  45.             if(in_array($prop_fields['CODE'], $arParams["PROPERTY_CODE"])) $arFieldsName[]=$prop_fields['NAME'];
  46.         }
  47.         if(CModule::IncludeModule("catalog")){
  48.             $arFieldsName[]=GetMessage("PRICE");
  49.             $arFieldsName[]=GetMessage("CURRENCY");
  50.         }
  51.         $addcolumns=0;
  52.         if($arParams["COLS_SECTION"] == "Y" && $arParams["CHECK_PARENT"] != "Y"){
  53.             $addcolumns+=2;
  54.             $arFieldsName[]=GetMessage("SECTION_ID");
  55.             $arFieldsName[]=GetMessage("SECTION_NAME");
  56.         }
  57.        
  58.         if($arParams["COLS_SECTION"] == "Y" && $arParams["CHECK_PARENT"] == "Y"){
  59.             $max=0;
  60.             $db_list = CIBlockSection::GetList(Array(), array('IBLOCK_ID'=>$arParams["IBLOCK_ID"]), true, array('ID', 'DEPTH_LEVEL'));
  61.             while($ar_result = $db_list->GetNext())
  62.                 $max=($ar_result['DEPTH_LEVEL']>$max)?$ar_result['DEPTH_LEVEL']:$max;
  63.        
  64.             for($i=1; $i<=$max; $i++){
  65.                 $addcolumns+=2;
  66.                 $arFieldsName[]=GetMessage("SECTION_ID")." #".$i;
  67.                 $arFieldsName[]=GetMessage("SECTION_NAME")." #".$i;
  68.             }
  69.         }
  70.    
  71.         if($arParams["CHECK_STOCK"] == "Y") $arFilter[">CATALOG_QUANTITY"] = 0;
  72.         if($arParams["CHECK_DATES"] == "Y") $arFilter["ACTIVE"] = "Y";
  73.    
  74.         $pricetrue=0;
  75.    
  76.         $multiSeparator=$arParams['MULTI_SEPARATOR'];
  77.         if(!$arParams['MULTI_SEPARATOR'])$multiSeparator=', ';
  78.        
  79.         $countElement=0;
  80.         // select all elements of the information unit
  81.         $res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, false, $arSelect);
  82.         while($ob = $res->GetNextElement()){
  83.             $arFields = $ob->GetFields();
  84.             foreach($arSection as $keySection => $valueSection){
  85.                 if($valueSection['ID']==$arFields['IBLOCK_SECTION_ID']){
  86.                     $arDEPTH='';
  87.                     if($arParams["CHECK_PARENT"] == "Y" && $arParams["CHECK_SECTION"] == "Y"){
  88.                         $countDEPTH=0;
  89.                         $nav = CIBlockSection::GetNavChain($arParams["IBLOCK_ID"], $valueSection['ID'], array('ID','IBLOCK_SECTION_ID','NAME','DEPTH_LEVEL'));
  90.                         while ($arNav=$nav->GetNext()){
  91.                             if($arParams["COLS_SECTION"] == "Y"){
  92.                                 $countDEPTH++;
  93.                                 $arDEPTH[$countDEPTH]['ID']=$arNav['ID'];
  94.                                 $arDEPTH[$countDEPTH]['NAME']=$arNav['NAME'];
  95.                             }
  96.                             else
  97.                                 (!empty($arDEPTH)) ? $arDEPTH.=' > '.$arNav['NAME'] : $arDEPTH.=$arNav['NAME'];
  98.                         }
  99.                        
  100.                     }
  101.                     else $arDEPTH=$valueSection['NAME'];
  102.                    
  103.                     $iProperty = -1;
  104.                    
  105.                     if($arParams["CHECK_SECTION"] != "Y") $valueSection['ID']=0;
  106.                     else $arResult["PROPERTIES"][$valueSection['ID']]['NAME']=$arDEPTH;
  107.                    
  108.                     if($arParams["COLS_SECTION"] == "Y" && $arParams["CHECK_PARENT"] != "Y"){
  109.                         $sectionID=$valueSection['ID'];
  110.                         $sectionName=$arResult["PROPERTIES"][$valueSection['ID']]['NAME'];
  111.                         unset($arResult["PROPERTIES"][$valueSection['ID']]['NAME']);
  112.                         $valueSection['ID']=0;
  113.                     }
  114.                     if($arParams["COLS_SECTION"] == "Y" && $arParams["CHECK_PARENT"] == "Y"){
  115.                         unset($arResult["PROPERTIES"][$valueSection['ID']]['NAME']);
  116.                         $valueSection['ID']=0;
  117.                     }
  118.                    
  119.                     foreach ($arProperties as $Property){
  120.                         $iProperty++;
  121.                         if($arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] && $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty]!=$arFields[$Property]){
  122.                             $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] .= $multiSeparator.$arFields[$Property];
  123.                             $countElement--;
  124.                         }else
  125.                             $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $arFields[$Property];
  126.                     }
  127.                     if($arFields['CATALOG_PRICE_'.$arParams['PRICE_CODE']])$pricetrue=2;
  128.                     if(CModule::IncludeModule("catalog")){
  129.                         $iProperty++;
  130.                         $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $arFields['CATALOG_PRICE_'.$arParams['PRICE_CODE']];
  131.                         $iProperty++;
  132.                         if($arParams['CURRENCY']!='iblock') $arFields['CATALOG_CURRENCY_'.$arParams['PRICE_CODE']]=$arParams['CURRENCY'];
  133.                         if($arParams['CURRENCY']=='main') $arFields['CATALOG_CURRENCY_'.$arParams['PRICE_CODE']]=$arParams['MAIN_CURRENCY'];
  134.                         $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $arFields['CATALOG_CURRENCY_'.$arParams['PRICE_CODE']];
  135.                     }
  136.                     if($arParams["COLS_SECTION"] == "Y" && $arParams["CHECK_PARENT"] != "Y"){
  137.                         $iProperty++;
  138.                         $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $sectionID;
  139.                         $iProperty++;
  140.                         $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $sectionName;
  141.                     }
  142.                     if($arParams["COLS_SECTION"] == "Y" && $arParams["CHECK_PARENT"] == "Y"){
  143.                         foreach($arDEPTH as $key => $val){
  144.                             $iProperty++;
  145.                             $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $val['ID'];
  146.                             $iProperty++;
  147.                             $arResult["PROPERTIES"][$valueSection['ID']][$arFields['ID']][$iProperty] = $val['NAME'];
  148.                         }
  149.                     }
  150.                     break;
  151.                 }
  152.             }
  153.             $arResult["COUNT_ELEMENT"]=++$countElement;
  154.         }
  155.        
  156.         foreach($arResult["PROPERTIES"] as $key => $val){
  157.             if(empty($val))
  158.                 unset($arResult["PROPERTIES"][$key]);
  159.         }
  160.         // line that begins displayed price itself
  161.         $startCatalog=4;
  162.         $startNameCatalog=$startCatalog-1;
  163.        
  164.     if($arParams['COLS_SECTION']=='Y' && $arParams['FORMATED_FILE']!='csv' && $arParams['HEADER']=='Y')
  165.             $startCatalog--;
  166.    
  167.     if($arParams['NAME_COLS']!='Y')
  168.         $startCatalog--;
  169.        
  170.  
  171.         $arResult["COUNT_ROW"] = $arResult["COUNT_ELEMENT"] + count($arResult["PROPERTIES"]) + $startCatalog-1;
  172.         $arResult["COUNT_COLUMN"] = count($arProperties)+$pricetrue+$addcolumns;
  173.        
  174.         $this->SetResultCacheKeys(array(
  175.                 "PROPERTIES",
  176.                 "COUNT_ELEMENT", // the number of columns in the table
  177.                 "COUNT_COLUMN", // number of columns
  178.                 "COUNT_ROW"
  179.         ));
  180.    
  181.         (!empty($arParams['COLOR']))?$color=substr($arParams['COLOR'], 1):$color='c0c0c0';
  182.         (!empty($arParams['FONT']))?$font=$arParams['FONT']:$font='Arial';
  183.         (!empty($arParams['FONT_SIZE']))?$fontsize=$arParams['FONT_SIZE']:$fontsize='10';
  184.         (!empty($arParams['FONT_COLOR']))?$fontcolor=substr($arParams['FONT_COLOR'], 1):$fontcolor='00000';
  185.        
  186.         (!empty($arParams['FORMATED_FILE_DIR']))?$arResult['PATH']=$arParams['FORMATED_FILE_DIR']:$arResult['PATH']='/upload/';
  187.         (!empty($arParams['FORMATED_FILE_NAME']))?$arResult['FILE_NAME']=$arParams['FORMATED_FILE_NAME']:$arResult['FILE_NAME']='price';
  188.         (!empty($arParams['FORMATED_FILE']))?$arResult['FILE_EXPANSION']=$arParams['FORMATED_FILE']:$arResult['FILE_EXPANSION']='xlsx';
  189.         (!empty($arParams['CSV_SEPARATOR']))?$csvsep=$arParams['CSV_SEPARATOR']:$csvsep=';';
  190.  
  191.        
  192.         $sectionSort=array();
  193.         $sectionSortParams=($arParams['SECTION_SORT']=='ASC')?SORT_ASC:SORT_DESC;
  194.        
  195.         if($arParams['SECTION_SORT_BY']=='NAME'){
  196.            
  197.             foreach ($arResult["PROPERTIES"] as $key => $row){
  198.                 $arResult["PROPERTIES"]["\"".$key."\""]  = $arResult["PROPERTIES"][$key];
  199.                 unset($arResult["PROPERTIES"][$key]);
  200.             }
  201.            
  202.             foreach ($arResult["PROPERTIES"] as $key => $row)
  203.                 $sectionSort[$key]  = $row['NAME'];
  204.  
  205.             array_multisort($sectionSort, $sectionSortParams, $arResult["PROPERTIES"]);
  206.         }
  207.         elseif($arParams['SECTION_SORT']=='ASC'){
  208.             ksort($arResult["PROPERTIES"], SORT_NUMERIC);
  209.         }
  210.         elseif($arParams['SECTION_SORT']=='DESC'){
  211.             krsort($arResult["PROPERTIES"], SORT_NUMERIC);
  212.         }
  213.        
  214.        
  215.         $elementSortParams=($arParams['ELEMENT_SORT']=='ASC')?SORT_ASC:SORT_DESC;
  216.         foreach ($arResult["PROPERTIES"] as $key =>$val){
  217.             $elementSort=array();
  218.             foreach($val as $keytwo => $valtwo){
  219.                 if($keytwo!='NAME'){
  220.                     $arResult["PROPERTIES"][$key]["\"".$keytwo."\""]=$arResult["PROPERTIES"][$key][$keytwo];
  221.                     unset($arResult["PROPERTIES"][$key][$keytwo]);
  222.                 }
  223.             }
  224.             foreach($val as $keytwo => $valtwo){
  225.                 if($keytwo!='NAME'){
  226.                     $elementSort["\"".$keytwo."\""]=$valtwo[$arParams['ELEMENT_SORT_BY']];
  227.                 }
  228.             }
  229.  
  230.             $name=$arResult["PROPERTIES"][$key]['NAME'];
  231.             unset($arResult["PROPERTIES"][$key]['NAME']);
  232.             array_multisort($elementSort, $elementSortParams, $arResult["PROPERTIES"][$key]);
  233.             if(!empty($name))$arResult["PROPERTIES"][$key]['NAME']=$name;
  234.         }
  235.        
  236.         require_once('classes/PHPExcel.php');
  237.        
  238.         switch ($arResult['FILE_EXPANSION']) {
  239.             case 'xls':
  240.                 require_once('classes/PHPExcel/Writer/Excel5.php');
  241.                 break;
  242.             case 'xlsx':
  243.                 require_once('classes/PHPExcel/Writer/Excel2007.php');
  244.                 break;
  245.             case 'htm':
  246.                 require_once('classes/PHPExcel/Writer/HTML.php');
  247.                 break;
  248.             case 'csv':
  249.                 require_once('classes/PHPExcel/Writer/CSV.php');
  250.                 break;
  251. /*              case 'pdf':
  252.                 $rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
  253.                 $rendererLibrary = 'dompdf';
  254.                 $rendererLibraryPath = $_SERVER["DOCUMENT_ROOT"].$componentPath.'/classes/PHPExcel/Writer/'.$rendererLibrary;
  255.                 break; */
  256.         }
  257.        
  258.         $priceTitle=GetMessage("PRICE_TITLE").date("j.n.Y");
  259.        
  260.         if(LANG_CHARSET=="windows-1251")
  261.             $priceTitle=$APPLICATION->ConvertCharset($priceTitle, LANG_CHARSET, "UTF-8");
  262.  
  263.         // create a class for working with Excel, select the first sheet
  264.         $xls = new PHPExcel();
  265.         $xls->setActiveSheetIndex(0);
  266.         $sheet = $xls->getActiveSheet();
  267.    
  268.         // configure caching and execution time
  269.         $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
  270.         $cacheSettings = array( 'memoryCacheSize ' => '256MB');
  271.         PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
  272.      
  273.         set_time_limit(0);
  274.         ini_set("max_execution_time", "0");
  275.        
  276.         // set the title sheet
  277.         $sheet->setTitle($priceTitle);
  278.    
  279.         // Detection alphabetic character column by its index
  280.         function cellsToMergeByColsRow($start = NULL, $end = NULL, $row = NULL){
  281.             $start = PHPExcel_Cell::stringFromColumnIndex($start);
  282.             $end = PHPExcel_Cell::stringFromColumnIndex($end);
  283.             $merge = "$start{$row}:$end{$row}";
  284.             return $merge;
  285.         }
  286.    
  287.         // preliminary cell formatting
  288.         $styleArray = array(
  289.                 'font'  => array(
  290.                         'bold'  => false,
  291.                         'color' => array('rgb' => $fontcolor),
  292.                         'size'  => $fontsize,
  293.                         'name'  => $font
  294.                 ));
  295.         $sheet->getDefaultStyle()->applyFromArray($styleArray);
  296.         /* $sheet->getDefaultStyle()->getFont()->setName($font)
  297.                                         ->setSize($fontsize); */
  298.         $sheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
  299.         $sheet->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  300.    
  301.         // formatting of the cell header and set the value
  302.        
  303.         if($arParams['FORMATED_FILE']!='csv' && $arParams['HEADER']=='Y'){
  304.             $sheet->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  305.             ->getStartColor()->setRGB($color);
  306.             $sheet->getStyle('A1')->getFont()->setBold(true);
  307.             $sheet->mergeCells(cellsToMergeByColsRow(0, $arResult["COUNT_COLUMN"]-1, 1));
  308.             $sheet->getRowDimension(1)->setRowHeight(16);
  309.             $sheet->setCellValue("A1", $priceTitle);
  310.         }
  311.         else {
  312.             $startCatalog-=3;
  313.             $startNameCatalog-=2;
  314.         }
  315.        
  316.         if($arParams['NAME_COLS']=='Y'){
  317.         // formatting and filling the column names
  318.         $sheet->getStyle(cellsToMergeByColsRow(0, $arResult["COUNT_COLUMN"]-1, $startNameCatalog))->getFont()->setBold(true);
  319.         $elementProperty=0;
  320.         foreach(range(PHPExcel_Cell::stringFromColumnIndex(0), PHPExcel_Cell::stringFromColumnIndex($arResult["COUNT_COLUMN"]-1)) as $charColumn){
  321.             if($arFieldsName[$elementProperty]==GetMessage("NAME")){
  322.                 $sheet->getStyle($charColumn.$startNameCatalog.':'.$charColumn.$arResult["COUNT_ROW"])->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  323.             }
  324.             if(LANG_CHARSET=="windows-1251")
  325.                 $arFieldsName[$elementProperty]=$APPLICATION->ConvertCharset($arFieldsName[$elementProperty], LANG_CHARSET, "UTF-8");
  326.             $sheet->setCellValue($charColumn.$startNameCatalog, htmlspecialchars_decode($arFieldsName[$elementProperty]));
  327.             $elementProperty++;
  328.         }
  329.         };
  330.    
  331.         // fill the table information block elements
  332.         $arElement=array();
  333.         if($arResult["PROPERTIES"]){
  334.         foreach($arResult["PROPERTIES"] as $keyResult => $valueResult){
  335.             if($arParams['CHECK_SECTION']=='Y' && $arParams['COLS_SECTION']!='Y' && $arParams['FORMATED_FILE']!='csv'){
  336.                 $sheet->mergeCells(cellsToMergeByColsRow(0, $arResult["COUNT_COLUMN"]-1, $startCatalog));
  337.                 $sheet->duplicateStyle($sheet->getStyle('A1'), 'A'.$startCatalog);
  338.                 if(LANG_CHARSET=="windows-1251")
  339.                     $valueResult['NAME']=$APPLICATION->ConvertCharset($valueResult['NAME'], LANG_CHARSET, "UTF-8");
  340.                 $sheet->setCellValue("A".$startCatalog, htmlspecialchars_decode($valueResult['NAME']));
  341.             }
  342.             unset($arResult["PROPERTIES"][$keyResult]['NAME']);
  343.             foreach($arResult["PROPERTIES"][$keyResult] as $keyResultElemet => $valueResultElemet){
  344.                 $startCatalog++;
  345.                 $elementProperty=0;
  346.                 foreach(range(PHPExcel_Cell::stringFromColumnIndex(0), PHPExcel_Cell::stringFromColumnIndex($arResult["COUNT_COLUMN"]-1)) as $charColumn){
  347.                     if(!$valueResultElemet[$elementProperty])$valueResultElemet[$elementProperty]=$arParams['NULL'];
  348.                     if(LANG_CHARSET=="windows-1251")
  349.                         $valueResultElemet[$elementProperty]=$APPLICATION->ConvertCharset($valueResultElemet[$elementProperty], LANG_CHARSET, "UTF-8");
  350.                     $sheet->setCellValue($charColumn.$startCatalog, htmlspecialchars_decode($valueResultElemet[$elementProperty]));
  351.                     $elementProperty++;
  352.                 }
  353.             }
  354.             if($arParams['CHECK_SECTION']=='Y' && $arParams['COLS_SECTION']!='Y' && $arParams['FORMATED_FILE']!='csv')$startCatalog++;
  355.         }
  356.         }
  357.    
  358.         // install automatic width for columns
  359.         foreach(range(PHPExcel_Cell::stringFromColumnIndex(0), PHPExcel_Cell::stringFromColumnIndex($arResult["COUNT_COLUMN"]-1)) as $charColumn){
  360.             $sheet->getColumnDimension($charColumn)->setAutoSize(true);
  361.         }
  362.    
  363.         // write to a file
  364.         switch ($arResult['FILE_EXPANSION']) {
  365.             case 'xls':
  366.                 $objWriter = new PHPExcel_Writer_Excel5($xls);
  367.                 break;
  368.             case 'xlsx':
  369.                 $objWriter = new PHPExcel_Writer_Excel2007($xls);
  370.                 break;
  371.             case 'htm':
  372.                 $objWriter = new PHPExcel_Writer_HTML($xls);
  373.                 break;
  374.             case 'csv':
  375.                 $objWriter = new PHPExcel_Writer_CSV($xls);
  376.                 $objWriter->setDelimiter($csvsep);
  377.                 break;
  378. /*          case 'pdf':
  379.                 if(!PHPExcel_Settings::setPdfRenderer($rendererName,$rendererLibraryPath)){
  380.                     die(
  381.                         'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
  382.                         '<br />' .
  383.                         'at the top of this script as appropriate for your directory structure'
  384.                         );
  385.                     }
  386.                 $objWriter = new PHPExcel_Writer_PDF($xls);
  387.                 break; */
  388.         }
  389.  
  390.         $objWriter->save($_SERVER['DOCUMENT_ROOT'].$arResult['PATH'].$arResult['FILE_NAME'].'.'.$arResult['FILE_EXPANSION']);  
  391.    
  392.         $arResult['RESULT']='Y';
  393.     }
  394.    
  395.     $this->IncludeComponentTemplate();
  396. }?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement