%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/exchange/entity/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/exchange/entity/userimportbase.php |
<?php namespace Bitrix\Sale\Exchange\Entity; use Bitrix\Main\ArgumentException; use Bitrix\Main\UserTable; use Bitrix\Sale\Exchange\ImportBase; use Bitrix\Sale\IBusinessValueProvider; use Bitrix\Sale\Order; abstract class UserImportBase extends ImportBase { const EXTERNAL_AUTH_ID = 'sale'; /** @var ImportBase */ protected $entity; /** * @param ImportBase $entity */ public function setEntity(ImportBase $entity) { $this->entity = $entity; } /** * @return ImportBase */ public function getEntity() { return $this->entity; } /** * @param $personalTypeId * @param $profile * @param $property * @return array */ public function getPropertyOrdersByConfig($personalTypeId, $profile, $property) { $result = array(); if($fieldsConfig = $this->getFieldsConfig($personalTypeId, $profile)) { if(is_array($fieldsConfig)) { foreach($fieldsConfig as $k => $v) { if(!isset($v['VALUE'])) continue; if(!empty($property[$k])) { $result[$v["VALUE"]] = $property[$k]; } if(empty($result[$v["VALUE"]]) && !empty($profile[$v["VALUE"]])) { $result[$v["VALUE"]] = $profile[$v["VALUE"]]; } } } } return $result; } /** * @param $orgFormId * @param array $userProps * @return bool */ public function getFieldsConfig($orgFormId, $userProps=array()) { if(intval($orgFormId)<=0) return false; $config = $this->getConfig(); if(empty($config[$orgFormId])) return false; $fields = $config[$orgFormId]; foreach($fields as $k => $v) { if(empty($v) || ((empty($v["VALUE"]) || $v["TYPE"] != "PROPERTY") && (empty($userProps) || (is_array($v) && is_string($v["VALUE"]) && empty($userProps[$v["VALUE"]]))) ) ) { unset($fields[$k]); } } return $fields; } /** * @return null */ public function getConfig() { static $config = null; if($config === null) { if($personTypes = $this->getListPersonType($this->settings->getSiteId())) { $r = \CSaleExport::GetList(array(), array("PERSON_TYPE_ID" => $personTypes)); while($ar = $r->Fetch()) { $config[$ar["PERSON_TYPE_ID"]] = unserialize($ar["VARS"]); } } } return $config; } /** * @param $siteId * @return array */ public function getListPersonType($siteId) { static $personType = null; if($personType === null) { $r = \CSalePersonType::GetList(array(), array("ACTIVE" => "Y", "LIDS" => $siteId)); while($ar = $r->Fetch()) { $personType[] = $ar["ID"]; } } return $personType; } /** * @return bool */ public function isFiz() { $fields = $this->getFieldValues(); return ($fields["TRAITS"]["TYPE"] == "FIZ"); } /** * @param $fields * @return int|null|string */ public function resolvePersonTypeId($fields) { $config = $this->getConfig(); if(is_array($config)) { foreach($config as $id => $value) { if(($value["IS_FIZ"] == "Y" && $this->isFiz()) || ($value["IS_FIZ"] == "N" && !$this->isFiz())) { return $id; } } } return null; } /** * @param $personTypeId * @return mixed */ public static function getPropertyOrdersByPersonalTypeId($personTypeId) { static $result = null; if($result[$personTypeId] === null) { $dbOrderProperties = \CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "PERSON_TYPE_ID" => $personTypeId, "ACTIVE" => "Y", "UTIL" => "N", "USER_PROPS" => "Y", ), false, false, array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT", "MULTIPLE") ); while ($arOrderProperties = $dbOrderProperties->Fetch()) $result[$personTypeId][] = $arOrderProperties; } return $result[$personTypeId]; } /** * @param $fields * @param $arErrors * @return bool|int|string */ public function registerUser($fields, &$arErrors) { $userFields = array( "NAME" => $fields["ITEM_NAME"], "EMAIL" => $fields["CONTACT"]["MAIL_NEW"], ); if (strlen($userFields["NAME"]) <= 0) $userFields["NAME"] = $fields["CONTACT"]["CONTACT_PERSON"]; $userFields["NAME"] = ($this->isFiz() ? $userFields["NAME"]:array("NAME"=>$userFields["NAME"])); $emServer = $_SERVER["SERVER_NAME"]; if(strpos($_SERVER["SERVER_NAME"], ".") === false) $emServer .= ".bx"; if (strlen($userFields["EMAIL"]) <= 0) $userFields["EMAIL"] = "buyer" . time() . GetRandomCode(2) . "@" . $emServer; $id = \CSaleUser::DoAutoRegisterUser($userFields["EMAIL"], $userFields["NAME"], $this->settings->getSiteId(), $arErrors, array("XML_ID"=>$fields["XML_ID"], "EXTERNAL_AUTH_ID"=>self::EXTERNAL_AUTH_ID)); $obUser = new \CUser; if(strlen($fields["CONTACT"]["PHONE"])>0) $obUser->Update($id, array('WORK_PHONE'=>$fields["CONTACT"]["PHONE"]), true); return $id; } /** * @param $id * @param $xmlIdUser * @param $xmlIdFields * @return bool * @internal */ static public function updateEmptyXmlId($id, $xmlId) { $result = false; if(intval($id)>0) { $user = UserTable::getById($id); if($fields = $user->fetch()) { if($fields['XML_ID'] == '' && $fields['XML_ID'] <> $xmlId) { $user = new \CUser; $result = $user->Update($id, array('XML_ID'=>$xmlId), true); } } } return $result; } public function initFields() { $this->setFields(array( 'TRAITS'=> $this->getFieldsTraits(), )); } /** * @param IBusinessValueProvider $entity * @return Order */ static protected function getBusinessValueOrderProvider(IBusinessValueProvider $entity) { if(!($entity instanceof Order)) throw new ArgumentException("entity must be instanceof Order"); return $entity; } }