php

D7 Работа с ExpressionField в getList

10.10.2016 Bitrix, php, php скрипты ,


$resOrder = Bitrix\Sale\OrderTable::getList(
    array(
        'filter' => array('=USER_ID' => 1),
        'group' => array('PAYED'),
        'runtime' => array(           
            new Bitrix\Main\Entity\ExpressionField('IDS', 'GROUP_CONCAT(%s)', array('ID')),
        ),
    )
);

Bitrix d7 получить список пользователей по группам

10.08.2016 Bitrix, php, php скрипты ,

           $arUsers = Bitrix\Main\UserGroupTable::getList(
		array(
			'order'=>array('USER_ID' => 'asc'),
			'group'=>array('USER_ID'),
			'select' => array(
				'USER_ID',
				'USER_DATE_REGISTER' => 'USER.DATE_REGISTER',
				'USER_ACTIVE' => 'USER.ACTIVE',
				'USER_EMAIL' => 'USER.EMAIL',
				'USER_LOGIN' => 'USER.LOGIN',
				'USER_WORK_COMPANY' => 'USER.WORK_COMPANY',
				'USER_NAME' => 'USER.NAME',
				'USER_GROUP_STR',
			),
			'filter' => array(
				'GROUP.ACTIVE' => 'Y',
				'USER.ACTIVE' => 'Y',
				'GROUP_ID' => array(3, 4),
				array(
					'LOGIC' => 'OR',
					'=DATE_ACTIVE_FROM' => null,
					'<=DATE_ACTIVE_FROM' => $nowTimeExpression,
				),
				array(
					'LOGIC' => 'OR',
					'=DATE_ACTIVE_TO' => null,
					'>=DATE_ACTIVE_TO' => $nowTimeExpression,
				),
			),
			'runtime' => array(
				'USER_GROUP_STR' => array(
					'data_type' => 'string',
					'expression' => array('GROUP_CONCAT(%s)', 'GROUP_ID')
				),

			)
		)
	)->fetchAll();

Отпарвка формы с вложенными файлами.

28.07.2016 Bitrix, php ,

function OnOnBeforeEventAdd(&$event, &$lid, &$arFields, &$message_id, &$files){
    if ($event == 'ololo_form_event') {		
        $isFiltered = false;
		$by="s_id";
		$order="desc";
		/// код совойства в которм должны быть файлы
		$arFilterField = Array(
			"SID"	=> "FILE_CODE_QUESTION"
		);
		$rsQuestions = CFormField::GetList(
			$arFields['RS_FORM_ID'], 
			"N", 
			$by, 
			$order, 
			$arFilterField, 
			$isFiltered
		);
		if($isFiltered){		
			if ($arQuestion = $rsQuestions->Fetch()){
				$arFilterAnswer = Array(
					"FIELD_TYPE" => "file",
				);
				$rsAnswers = CFormAnswer::GetList(
					$arQuestion['ID'], 
					$by, 
					$order, 
					$arFilterAnswer, 
					$isFiltered
				);
				if($isFiltered){
					while ($arAnswer = $rsAnswers->Fetch()){
						$file = CFormResult::GetFileByAnswerID($arFields['RS_RESULT_ID'], $arAnswer['ID']);
						if(intval($file['USER_FILE_ID']) > 0){
							$files[] = $file['USER_FILE_ID'];
						}
					}						
				}					
			}				
		}
        return $arFields;
    }
}

Отпарвка письма с влоожениями

07.07.2016 Bitrix, php, php скрипты ,

Подробней тут http://www.spravkaweb.ru/php/sovet/mail/file

        $mailFields = array (
		'TITLE' => 'Тема письма ололо',
		'TEXT' => 'Текст ололо',
	);

	$arFile = array (
		0 => $_SERVER['DOCUMENT_ROOT'].'/upload/test.php',
		1 => $_SERVER['DOCUMENT_ROOT'].'/robots.txt',
	);


	function sendMessage($mailFields, $arFile)
	{
		$subject = '=?windows-1251?B?'.base64_encode($mailFields['TITLE']).'?=';
		// Subject: =?<кодировка текста>?<способ кодирования>?<закодированный Subject>?= 
		// Кодировка текста = windows-1251 или koi8-r или .... смотря в какой кодировке был текст когда ты его (Subject) кодировал.
		// Способ кодирования = Q (quoted_printable) или B (base64)
		// Соответственно функции quoted_printable_encode или base64_encode
		// Но лучше не изобретать велосипед, а использовать iconv_mime_encode (благо тут уже все придумано).

		$comment_mail = $mailFields['TEXT'];

		$arAttachment = array();
		
		if (!empty($arFile)) {
			foreach($arFile as $file) {
				$arFile = CFile::MakeFileArray($file);
				if($arFile){				
					$file = fopen($arFile['tmp_name'], "r");
					$text = fread($file, filesize($arFile['tmp_name']));
					fclose($file);					
					$arAttachment[] = array(
						"attachment" => chunk_split(base64_encode($text)),
						"name" => $arFile["name"],
						"type" => $arFile["type"],
						"arFile" => $arFile,
					);
				}
			}
		}
		
		$boundary = '#####' . time();
		$sStartOrEndLetter = '--';
		$sImplode = "\r\n";
		
		$sHeader = '';
		$sHeader.= 'From: "Ололий" <ololo@ololo.com>'.$sImplode;	
		$sHeader.= 'To: ololo@ololo.com'.$sImplode;						
		$sHeader.= 'Subject: '.$subject.$sImplode;		
		$sHeader.= 'Mime-Version: 1.0'.$sImplode;	
		$sHeader.= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'.$sImplode;	
		
		$sMessage = '';
		$sMessage.= $sStartOrEndLetter.$boundary.$sImplode;
		$sMessage.= 'Content-type: text/plain; charset="windows-1251"'.$sImplode;
		$sMessage.= 'Content-Transfer-Encoding: quoted-printable'.$sImplode;
		$sMessage.= "\n";
		$sMessage.= $comment_mail;
		$sMessage.= "\n\n";
		
		
		if(count($arAttachment) > 0){
		
			foreach($arAttachment as $attachment){
				$sMessage.= $sStartOrEndLetter.$boundary.$sImplode;		
				$sMessage.= 'Content-Type: application/x-rar-compressed; name="'.$attachment['name'].'"'.$sImplode;
				$sMessage.= 'Content-Transfer-Encoding:base64'.$sImplode;
				$sMessage.= 'Content-Disposition:attachment;'.$sImplode;
				$sMessage.= $sImplode;
				$sMessage.= $attachment['attachment'];
				$sMessage.= $sImplode;		
			}
			
		}

		$sMessage.= $sStartOrEndLetter.$boundary.$sStartOrEndLetter.$sImplode;
		
		// echo "<pre>";
			// print_r($sHeader);	
			// print_r($sMessage);
		// echo "</pre>";

		if(mail('ololo@ololo.com', $subject, $sMessage, $sHeader) ){
			print_r('cool');
		}else{
			print_r('bad');
		}
	}

Bitrix Загрука файла, ресайз, сохранение в базу

27.06.2016 Bitrix, php, php скрипты ,

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
	$arFileToUploads = $_FILES['userfile'];
	CAllFile::ResizeImage(
		&$arFileToUploads, // путь к изображению, сюда же будет записан уменьшенный файл
		array(
			"width" => 1000,  // новая ширина
			"height" => 5000 // новая высота
		),
		BX_RESIZE_IMAGE_PROPORTIONAL // метод масштабирования. обрезать прямоугольник без учета пропорций
	);
	$arFileToUploads['MODULE_ID'] = 'iblock';	
	$sPathToSave = 'posts';
	if(intval($USER->GetID()) > 0){
		$sPathToSave .= '/user_'.intval($USER->GetID());
	}
	$iFileId = CFile::SaveFile($arFileToUploads, $sPathToSave);	
	$arFile = CFile::GetFileArray($iFileId);
exit;

Curl для dadata.ru

07.10.2015 php, php скрипты

       $url = "https://dadata.ru/api/v2/suggest/address"; 
     
        $headers = array( 
            "Content-type: application/json", 
            "Accept: application/json", 
			"Authorization: Token ДЛИННЫЙ_КЛЮЧ" 
        ); 
       
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL,$url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU"); 

        curl_setopt($ch, CURLOPT_POST, 1); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, '{ "query": "Москва Площадь Ленина 5 6", "count": 5 }'); 

        $data = curl_exec($ch); 
		
		

        if (curl_errno($ch)) { 
		
			echo  "Error: " . curl_error($ch);			
         
			
        } else { 
		
			curl_close($ch);			
			echo json_decode($data, true);	
        }

Удалить все пробелы

15.09.2014 php, php скрипты, Парсинг

$line = str_replace(' ', '', trim($line));
$line = trim(preg_replace('/\s{2,}/', ' ', $line))

Заменить данные

                                    $arItem['BODY_FORMATED'] = str_replace(
                                        array("<b>", "</b>"),
                                        array("<mark>", "</mark>"),
                                        $arItem['BODY_FORMATED']
                                    );

Для дебага в файл

11.04.2014 php, php скрипты

ob_start(); echo '<pre>';var_dump($arDebug);echo "</pre>\n"; $body = ob_get_contents(); ob_end_clean();
$f=@fopen('fail_'.md5('ololo_').".txt","a+"); fputs($f,"$body"); fclose($f);

Обрезать PREVIEW_TEXT с html тегами

09.04.2014 Bitrix, php, php скрипты ,

 preg_replace('/\s[^\s]+$/', '', substr(strip_tags($arItem["PREVIEW_TEXT"]), 0, 40)).'...';
$obParser = new CTextParser;
		if($arParams["PREVIEW_TRUNCATE_LEN"] > 0){
			$arItem["PREVIEW_TEXT"] = $obParser->html_cut($arItem["PREVIEW_TEXT"], $arParams["PREVIEW_TRUNCATE_LEN"]);	
		}

Объединение многомерных массивов _array_merge_recursive

25.12.2013 php ,

function _array_merge_recursive($dest, $new) {
			if (!is_array($dest) &&  is_array($new)) return $new;
			if ( is_array($dest) && !is_array($new)) return $dest;
			if (!is_array($dest) && !is_array($new)) return array();
			foreach ($new as $k => $v) {
				if (is_array($v) && isset($dest[$k]) && !is_numeric($k)) {
					$dest[$k] = _array_merge_recursive($dest[$k], $v);
				} else if (!is_numeric($k)) {
					$dest[$k] = $new[$k];
				} else {
					$dest[] = $new[$k];
				}
			}
			return $dest;
		}

Первый массив

Array
(
    [s1] => Array
        (
            [0] => 1
        )

    [BASKER_QUANTITY] => Array
        (
            [0] => 1
        )

    [ORDER] => Array
        (
            [632] => Array
                (
                    [0] => 1
                )

        )

)

Второй массив

Array
(
    [s1] => Array
        (
            [0] => 1
        )

    [BASKER_QUANTITY] => Array
        (
            [0] => 1
        )

    [ORDER] => Array
        (
            [1249] => Array
                (
                    [0] => 1
                )

        )

)

Результат

Array
(
    [s1] => Array
        (
            [0] => 1
            [1] => 1
        )

    [BASKER_QUANTITY] => Array
        (
            [0] => 1
            [1] => 1
        )

    [ORDER] => Array
        (
            [1249] => Array
                (
                    [0] => 1
                )

            [1250] => Array
                (
                    [0] => 1
                )

        )

)