Your IP : 18.224.72.25


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/crm/lib/import/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/crm/lib/import/vcardimport.php

<?php
namespace Bitrix\Crm\Import;
use Bitrix\Main;
use Bitrix\Crm\VCard;

class VCardImport
{
	protected $fields = null;
	protected $mappedFields = null;
	protected $mappedMultiFields = null;

	/**
	* @return array
	*/
	public function mapContact(VCard\VCardElement $element)
	{
		$this->fields = array();
		$this->mappedFields = array();
		$this->mappedMultiFields = array();

		$this->tryMapNameAttribute($element, $this->fields);
		$this->tryMapBirthdayAttribute($element, $this->fields);
		$this->tryMapAddressAttribute($element, array('pref', 'work', 'home', ''), $this->fields);
		$this->tryMapTelAttribute($element, $this->fields);
		$this->tryMapEmailAttribute($element, $this->fields);
		$this->tryMapUrlAttribute($element, $this->fields);
		$this->tryMapFileAttribute($element, 'PHOTO', 'PHOTO', $this->fields);
		$this->tryMapFileAttribute($element, 'LOGO', 'COMPANY_LOGO', $this->fields);

		$this->tryMapAttribute($element, 'ORG', 'COMPANY_TITLE', $this->fields);
		$this->tryMapAttribute($element, 'TITLE', 'POST', $this->fields);
		$this->tryMapAttribute($element, 'NOTE', 'COMMENTS', $this->fields);

		return !empty($this->fields);
	}

	public function getFields()
	{
		return $this->fields;
	}

	public function getMappedFields()
	{
		return $this->mappedFields;
	}

	public function getMappedMultiFields()
	{
		return $this->mappedMultiFields;
	}

	/**
	* @return bool
	*/
	protected function tryMapNameAttribute(VCard\VCardElement $element, array &$fields)
	{
		$attr = $element->getFirstAttributeByName('N');
		if($attr === null)
		{
			return false;
		}

		$ary = explode(';', $attr->getValue());
		$qty = count($ary);

		$fields['LAST_NAME'] = trim($ary[0]);
		$fields['NAME'] = $qty > 1 ? trim($ary[1]) : '';
		$fields['SECOND_NAME'] = $qty > 2 ? trim($ary[2]) : '';

		$this->mappedFields[] = 'LAST_NAME';
		$this->mappedFields[] = 'NAME';
		$this->mappedFields[] = 'SECOND_NAME';

		return true;
	}

	/**
	* @return bool
	*/
	protected function tryMapBirthdayAttribute(VCard\VCardElement $element, array &$fields)
	{
		$attr = $element->getFirstAttributeByName('BDAY');
		if($attr === null)
		{
			return false;
		}

		$time = strtotime($attr->getValue());
		if($time === false)
		{
			return false;
		}

		$fields['BIRTHDATE'] = ConvertTimeStamp($time, 'SHORT');
		$this->mappedFields[] = 'BIRTHDATE';
		return true;
	}

	/**
	* @return bool
	*/
	protected function tryMapAttribute(VCard\VCardElement $element, $attrName, $fildName, array &$fields)
	{
		$attr = $element->getFirstAttributeByName($attrName);
		if($attr === null)
		{
			return false;
		}

		$fields[$fildName] = $attr->getValue();
		$this->mappedFields[] = $fildName;
		return true;
	}

	/**
	* @return bool
	*/
	protected function tryMapAddressAttribute(VCard\VCardElement $element, array $types, array &$fields)
	{
		foreach($types as $type)
		{
			$attr = $type !== ''
				? $element->findAttribute('ADR', array('TYPE' => $type))
				: $element->findAttribute('ADR');

			if($attr === null)
			{
				continue;
			}

			$addr = VCard\VCardAddress::createFromAttribute($attr);
			if($addr === null)
			{
				continue;
			}

			$fields['ADDRESS']= $addr->getStreet();

			$pobox = $addr->getPostOfficeBox();
			$ext = $addr->getExtendedAddress();
			if($pobox !== '' && $ext !== '')
			{
				$fields['ADDRESS_2'] = "{$pobox}, {$ext}";
			}
			elseif($pobox !== '')
			{
				$fields['ADDRESS_2'] = $pobox;
			}
			elseif($ext !== '')
			{
				$fields['ADDRESS_2'] = $ext;
			}
			
			$fields['ADDRESS_CITY'] = $addr->getLocality();
			$fields['ADDRESS_PROVINCE'] = $addr->getRegion();
			$fields['ADDRESS_POSTAL_CODE'] = $addr->getCode();
			$fields['ADDRESS_COUNTRY'] = $addr->getCountry();

			$this->mappedFields[] = 'ADDRESS';
			return true;
		}

		return false;
	}

	/**
	* @return bool
	*/
	protected function tryMapTelAttribute(VCard\VCardElement $element, array &$fields)
	{
		$attrs = $element->getAttributesByName('TEL');
		$mappedMultiFields = array();
		$qty = 0;
		foreach($attrs as $attr)
		{
			$phone = VCard\VCardPhone::createFromAttribute($attr);
			if($phone === null)
			{
				continue;
			}

			$value = $phone->getMultiFieldValue();
			if($value === '')
			{
				continue;
			}

			$valueType = $phone->getMultiFieldValueType();

			if(!isset($fields['FM']))
			{
				$fields['FM'] = array();
			}

			if(!isset($fields['FM']['PHONE']))
			{
				$fields['FM']['PHONE'] = array();
			}

			$qty++;
			$fields['FM']['PHONE']["n{$qty}"] = array('VALUE' => $value, 'VALUE_TYPE' => $valueType);

			if(!isset($mappedMultiFields[$valueType]))
			{
				$mappedMultiFields[$valueType] = true;
			}
		}

		if(!empty($mappedMultiFields))
		{
			$this->mappedMultiFields['PHONE'] = array_keys($mappedMultiFields);
		}
		return $qty > 0;
	}

	/**
	* @return bool
	*/
	protected function tryMapEmailAttribute(VCard\VCardElement $element, array &$fields)
	{
		$attrs = $element->getAttributesByName('EMAIL');
		$mappedMultiFields = array();
		$qty = 0;
		foreach($attrs as $attr)
		{
			$email = VCard\VCardEmail::createFromAttribute($attr);
			if($email === null)
			{
				continue;
			}

			$value = $email->getMultiFieldValue();
			if($value === '')
			{
				continue;
			}

			$valueType = $email->getMultiFieldValueType();

			if(!isset($fields['FM']))
			{
				$fields['FM'] = array();
			}

			if(!isset($fields['FM']['EMAIL']))
			{
				$fields['FM']['EMAIL'] = array();
			}

			$qty++;
			$fields['FM']['EMAIL']["n{$qty}"] = array('VALUE' => $value, 'VALUE_TYPE' => $valueType);

			if(!isset($mappedMultiFields[$valueType]))
			{
				$mappedMultiFields[$valueType] = true;
			}
		}

		if(!empty($mappedMultiFields))
		{
			$this->mappedMultiFields['EMAIL'] = array_keys($mappedMultiFields);
		}
		return $qty > 0;
	}

	/**
	* @return bool
	*/
	protected function tryMapUrlAttribute(VCard\VCardElement $element, array &$fields)
	{
		$attrs = $element->getAttributesByName('URL');
		$qty = 0;
		foreach($attrs as $attr)
		{
			$value = $attr->getValue();
			if($value === '')
			{
				continue;
			}

			if(!isset($fields['FM']))
			{
				$fields['FM'] = array();
			}

			if(!isset($fields['FM']['WEB']))
			{
				$fields['FM']['WEB'] = array();
			}

			$qty++;
			$fields['FM']['WEB']["n{$qty}"] = array('VALUE' => $value, 'VALUE_TYPE' => 'WORK');
		}

		if($qty > 0)
		{
			$this->mappedMultiFields['WEB'] = array('WORK');
		}
		return $qty > 0;
	}

	/**
	* @return bool
	*/
	protected function tryMapFileAttribute(VCard\VCardElement $element, $attrName, $fieildName, array &$fields)
	{
		$attr = $element->getFirstAttributeByName($attrName);
		if($attr === null)
		{
			return false;
		}

		$file = VCard\VCardFile::createFromAttribute($attr);
		if($file === null)
		{
			return false;
		}

		$fileInfo = $file->getFileInfo();
		if($fileInfo === null)
		{
			return false;
		}

		$fields[$fieildName] = array_merge($fileInfo, array('MODULE_ID' => 'crm'));
		$this->mappedFields[] = $fieildName;
		return true;
	}
}