Проверка вхождения пользователя в определенныу группу [bitrix api]

Комментарии отключены

Думаю метод проверки пользователя в определенной группе обязан быть в API, но его почему-то там не оказалось, есть пару(CUser::GetUserGroupArray(),
CUser::GetUserGroup(), CUser::GetUserGroupString()) методов для выборки всех групп пользователя. Чтобы сделать проверку с помощью этих методов нужны дополнительные манипуляции.

Предложу решение:

/**
* Функция проверки нахождения пользователя в определенной группе
* @param {intva} $i_GroupID - ID группы
* @param {intval} $i_UserID - ID пользователя, если не указан, то текущий
* @return {bool}
*/
function isUserGroupID($i_GroupID, $i_UserID = false)
{
    if(!$i_UserID && $GLOBALS['USER']->IsAuthorized())
        $i_UserID = intval($GLOBALS['USER']->GetID());        

    if($i_UserID)
        return  in_array($i_GroupID, CUser::GetUserGroup(intval($i_UserID)));
}

var_dunp( isUserGroupID(1, 1) ); // true

Проверка активности элемента по дате [bitrix api]

Комментарии отключены

В методе CIBlockElement::GetList() есть параметр фильтра для выборки активных элементов по дате. Т.е. проверка происходит еще в запросе и не надо в списке нечего проверять дополнительно.

Если вам нужно обратная сторона действия с фильтрацией по дате активности, то у вас это не получится сделать. Мной ожидалось поведение, что если
заменить Y на N то выборка отдаст только не активные по дате элементы, но к сожалению это не так, читаем еще раз док и убеждаемся в этом.

ACTIVE_DATE — непустое значение задействует фильтр по датам активности.
Будут выбраны активные по датам элементы.Если значение не установлено («»), фильтрация по датам активности не производится;

Приходится делать полную выборку и проверят уже в результате что конечно не очень хорошо.

function __isElelementDateActive($s_DateFrom, $s_DateTo)
{
    $stmp_DateFrom = MakeTimeStamp($s_DateFrom, "DD.MM.YYYY HH:MI:SS");
    $stmp_DateTo   = MakeTimeStamp($s_DateTo, "DD.MM.YYYY HH:MI:SS");
    $stmp_Date     = MakeTimeStamp(date('d.m.Y H:i:s'), "DD.MM.YYYY HH:MI:SS");

    return ($stmp_Date > $stmp_DateFrom && $stmp_Date < $stmp_DateTo);
}
+ бонус, проверка если дата истекает за 1 день
function __isOneDayShowElement($s_DateTo)
{
    $stmp_DateTo   = MakeTimeStamp($s_DateTo, "DD.MM.YYYY");
    $stmp_Date     = MakeTimeStamp(date('d.m.Y'), "DD.MM.YYYY");

    return (($stmp_DateTo - $stmp_Date) == 86400);
}
+ дата и время

function isDateTimeActive($date_from, $date_to)
{
    $ar_From    	= explode(' ', $date_from);
    $ar_DateFrom    = explode('.', $ar_From[0]);
    $ar_TimeFrom    = explode(':', $ar_From[1]);

    $ar_To      	= explode(' ', $date_to);
    $ar_DateTo    	= explode('.', $ar_To[0]);
    $ar_TimeTo    	= explode(':', $ar_To[1]);

    $ar_Date        = explode('.', date('d.m.Y'));
    $ar_Time        = explode(':', date('H:i:s'));

    $s_MetaDateFrom = mktime($ar_TimeFrom[0], $ar_TimeFrom[1], $ar_TimeFrom[2], $ar_DateFrom[1], $ar_DateFrom[0], $ar_DateFrom[2]);
    $s_MetaDateTo   = mktime($ar_TimeTo[0],   $ar_TimeTo[1],   $ar_TimeTo[2],   $ar_DateTo[1],   $ar_DateTo[0],   $ar_DateTo[2]);
    $s_MetaDate     = mktime($ar_Time[0],     $ar_Time[1],     $ar_Time[2],     $ar_Date[1],     $ar_Date[0],     $ar_Date[2]);

    return ($s_MetaDate >= $s_MetaDateFrom && $s_MetaDate <= $s_MetaDateTo);
}

Отделение десятых, сотых, тысячных от числа символом [javascript]

Комментарии отключены

Функция вставляет (в данном случае точку) после десятой, сотой, и тысячной доли числа.

var __formatSumm = function(sum)
{
    var c = sum.length, s = sum, m = "", i = 0;
    while(c--){if(i==3){m+='.'+s[c];i=0;}else{m += s[c];}i++;}
    return m.split("").reverse().join("");
}

1.000
10.000
100.000

1.000.000
10.000.000
100.000.000

1.000.000.000
10.000.000.000
100.000.000.000

UP

Для php

function __formatSumm($s)
{
    $c  = strlen($s);
    $ar = preg_split('//', $s, -1, PREG_SPLIT_NO_EMPTY);
    $i  = 0;
    while($c--){if($i == 3){ $m .='.'.$ar[$c]; $i = 0;}else{ $m .= $ar[$c];}$i++;}	

    return strrev($m);
}

Проверка элемента на активность по дате [bitrix]

5 Comments

function _isDateActive($date_from, $date_to)
{
    $ar_DateFrom    = explode('.', $date_from);
    $ar_DateTo      = explode('.', $date_to);
    $ar_Date        = explode('.', date('d.m.Y'));
    $s_MetaDateFrom = mktime(0, 0, 0, $ar_DateFrom[1], $ar_DateFrom[0], $ar_DateFrom[2]);
    $s_MetaDateTo   = mktime(0, 0, 0, $ar_DateTo[1], $ar_DateTo[0], $ar_DateTo[2]);
    $s_MetaDate     = mktime(0, 0, 0, $ar_Date[1], $ar_Date[0], $ar_Date[2]);

    return ($s_MetaDate >= $s_MetaDateFrom && $s_MetaDate <= $s_MetaDateTo);
}

Отложенные функции [bitrix api]

Комментарии отключены

Первое что хочу сказать, они используются для вывода чего либо в хидере, но не просто вывода, а зависящего от определенных параметров которые передаются на самой странице.

На примере, допустим нам нужно в левую колонку (header.php) выводить список товаров, но по определенному условию, если на странице находится товар с ценой больше 1000 р. или еще по какому-либо критерию. Важно то, что мы не знаем значение по которому можно определить это и оно было-бы нам доступно в header.php, только если это $_GET параметр, но я думаю все цены товара «поднимать» в $_GET это бред.

Вот для передачи значения в header и служат отложенные функции. Заголовок странице устанавливается тоже так, передача значения идет с самой страницы.

С помощью метода $APPLICATION->SetPageProperty(‘KEY’, ‘VALUE’) на самой странице добавляем в ее свойства наше значение, в примере с ценой это будет примерно так:

...
...
$APPLICATION->SetPageProperty(
'MAX_PRICE',
$i_ProductPrice
);
...
...

Далее пишем функцию и ложем ее в init.php например,

More

Статичная ли страница? [bitrix api]

Комментарии отключены

Недавно на форуме был задан вопрос, как можно определить статическую страницу в битриксе. Видимо у людей мало опыта и они просто не знают что изначально все публичные файла сайта битрикса статичные, а уже потом на них можно добавить вывод динамического содержимого.

More

Тот еще COUNT

Комментарии отключены

Иногда бывает под вечер зависнешь на какой-нибудь проверке и не можешь понять почему логика не складывается. Оказывается просто потому что,  не логично работают некоторые участки системы.

В частности столкнулся вот только что с функцией count в php для подсчета значений в массиве. В голове всегда было воспоминание что с ней что-то не так, вот пришлось их обновлять.

//$i = 1.05; // true
//$i = 1;  // true
//$i = '1'; // true
$i = array();// false
var_dump(count($i) > 0);

Логичнее наверное сделать что если переменная не массив, то возвращать NULL или false, так нет же надо возвращать 1.

Если var не является массивом или объектом, реализующим интерфейс Countable, будет возвращена 1. За одним исключением: если varNULL, то будет возвращён 0.

Конвертер валют для Bitrix [php, js]

2 Comments

Конвертер валют Битрикс

Конвертер валют Битрикс

Я редко что-то выкладываю готовое, но вот просто захотелось. Я не жадный, просто нет времени. Итак задача была сделать конвертер на js, для этого нам нужно иметь данные для подсчета, принципиально не захотел делать пересчет на аяксе так как это был бы не совсем js конвертер. Вариантов получения данных несколько, вот как сделал я.

В битриксе есть модуль «Валюты» он нам нужен для back-end нашего конвертера. Для автоматического обновления есть скрипт который обновляет курс, его можно запускать кроном или агентом, я выбрал крон. Там же в модуле валюты есть список курсов, с названиями и значениями курса по умолчанию, по большому счету нам нужны только названия валют оттуда. Его пришлось собирать ручками, по этому в архиве положу csv файл, загрузите его сами. Теперь когда back-end готов можно перейти к компоненту.

Компонент обрабатывает данные из модуля, он должен быть постоянно кэшированным так как при вычислении коэффициента для каждой валюты, создается большой кол-во запросов, благо они мелкие и легкие. Кэш компонента очищается при отработки скрипта на кроне, в коде это можно найти. Логика компонента возвращает 2 json объекта с которыми мы в дальнейшем работаем в шаблоне. В общем смотрим что получилось, улучшать там есть что, буду раз замечаниям.

Скачать архив

В папке cron скрипт для пересчета валюты, в flag флаги, их нужно положить в upload или поправить пути. Не забудьте подключить jQuery.

 

Send mail with attachment php

Комментарии отключены

function XMailAttach($from, $to, $subj, $text, $ar_File)
{
	$un        = strtoupper(uniqid(time()));
	$head      = "From: $from\n";
	$head     .= "To: $to\n";
	$head     .= "Subject: $subj\n";
	$head     .= "X-Mailer: PHPMail Tool\n";
	$head     .= "Reply-To: $from\n";
	$head     .= "Mime-Version: 1.0\n";
	$head     .= "Content-Type:multipart/mixed;";
	$head     .= "boundary=\"----------".$un."\"\n\n";
	$zag       = "------------".$un."\nContent-Type:text/html;\n";
	$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";  

	foreach ($ar_File as $file)
	{
		$f         = fopen($file, "rb");
		$zag      .= "------------".$un."\n";
		$zag      .= "Content-Type: application/octet-stream;";
		$zag      .= "name=\"".basename($file)."\"\n";
		$zag      .= "Content-Transfer-Encoding:base64\n";
		$zag      .= "Content-Disposition:attachment;";
		$zag      .= "filename=\"".basename($file)."\"\n\n";
		$zag      .= chunk_split(base64_encode(fread($f,filesize($file))))."\n";
	}

	if (!mail($to, $subj, $zag, $head))
	 	return false;
	else
		return true;
}

Сколько лет пользователю сайта?

2 Comments

Немного лениво выглядит профиль пользователя на сайте, когда вместо надписи о количестве лет выводится дата его рождения. Снипед, для Битрикса, жаль что нету API функции.

if(strlen($ar_UserCabinet['PERSONAL_BIRTHDAY']) > 0)
{
	$ar_UserDateTo  = explode('.', $ar_UserCabinet['PERSONAL_BIRTHDAY']);
	$s_MetaDateTo   = mktime(0, 0, 0, $ar_UserDateTo[1], $ar_UserDateTo[0], $ar_UserDateTo[2]);
	$s_MetaDateFrom = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
	$i_Meta = ($s_MetaDateFrom - $s_MetaDateTo) / 31276800;

	# проверим был ли у пользователя день рождения, если еще небыло то -1
	$s_DateRog = mktime(0, 0, 0, $ar_UserDateTo[1], $ar_UserDateTo[0], date('Y'));
	if($s_DateRog > $s_MetaDateFrom)
		$i_Meta -= 1;

	$arResult['USER_BIRTHDAY'] = intval($i_Meta);
}

Older Entries